Переносимый подход к определению источников данных заключается в использовании ссылки на ресурсы. Ссылки на ресурсы позволяют вам определить имя JNDI для вашего источника данных относительно контекста именования вашего приложения (java:comp/env), а затем сопоставить эту логическую ссылку с физическим ресурсом, определенным в сервер приложений, имя JNDI которого является проприетарным поставщиком сервера приложений. Такой подход позволяет переносить ваш код и сборку на любой совместимый сервер приложений.
Шаг 1. Объявление и поиск ссылки на ресурсы
Опция 1
Это можно сделать, объявив resource-ref в дескрипторе веб-развертывания (WEB-INF/web.xml):
<resource-ref>
<description>My Data Source.</description>
<res-ref-name>jdbc/MyDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Затем вы можете найти этот ресурс в своем коде, используя имя JNDI java:comp/env/jdbc/MyDataSource:
dataSource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/MyDataSource");
Это имя JNDI не изменится независимо от сервера, на котором развернуто приложение.
Вариант 2
В качестве альтернативы, начиная с Java EE 5 (Servlet 2.5), это можно сделать еще проще в вашем коде, используя _ 7_ аннотации. Это избавляет от необходимости настраивать ссылку на ресурс в дескрипторе веб-развертывания (web.xml) и предотвращает необходимость выполнять явный поиск JNDI:
public class MyServlet extends HttpServlet {
@Resource(name = "jdbc/MyDataSource")
private DataSource dataSource;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// dataSource may be accessed directly here since the container will automatically
// inject an instance of the data source when the servlet is initialized
}
Этот подход дает те же результаты, что и предыдущий вариант, но сокращает шаблонный код и конфигурацию в вашей сборке.
Шаг 2. Сопоставьте ссылку на ресурс с источником данных
Затем вам нужно будет использовать собственный подход вашего сервера приложений для сопоставления ссылки на ресурс с физическим источником данных, который вы создали на сервере, например, с помощью пользовательских дескрипторов развертывания JBoss (WEB-INF/jboss-web.xml):
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<resource-ref>
<res-ref-name>jdbc/MyDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<jndi-name>java:/MyDataSource</jndi-name>
</resource-ref>
</jboss-web>
Или, например, используя Tomcat context.xml:
<Resource name="jdbc/MyDataSource" . . . />
person
shelley
schedule
06.09.2011
web.xmlиjboss-web.xml? - person CoolBeans   schedule 29.08.2011<use-java-context>значение true в вашем источнике данных xml (* -ds.xml)? - person CoolBeans   schedule 29.08.2011