Переносимый подход к определению источников данных заключается в использовании ссылки на ресурс .Ссылки на ресурсы позволяют вам определить имя JNDI для вашего источника данных относительно контекста именования вашего приложения (java:comp/env
), а затем сопоставить эту логическую ссылку с физическим ресурсом , определенным всервер приложений, чье имя JNDI является проприетарным поставщику сервера приложений.Этот подход позволяет переносить ваш код и сборку на любой совместимый сервер приложений.
Шаг 1. Ссылка на ресурс объявления и поиска
Опция 1
Это можно сделать, объявивa 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), это можно сделать еще проще вВаш код, используя аннотацию @Resource
.Это устраняет необходимость в настройке resource-ref в вашем дескрипторе веб-развертывания (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>
или, например, с помощью Tomcatcontext.xml
:
<Resource name="jdbc/MyDataSource" . . . />