用于定义数据源的便携式方法是使用资源引用.资源引用使您能够相对于应用程序命名上下文(java:comp / env)为数据源定义JNDI名称,然后将该逻辑引用映射到应用程序服务器中定义的物理资源,JNDI名称为应用服务器供应商.这种方法使您的代码和程序集可以移植到任何兼容的应用程序服务器.
步骤1:声明和查找资源引用
选项1
这可以通过在Web部署描述符(WEB-INF / web.xml)中声明资源引用来实现:
My Data Source.
jdbc/MyDataSource
javax.sql.DataSource
Container
在您的代码中,您可以使用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注释在您的代码中更容易地完成此操作.这消除了在Web部署描述符(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):
jdbc/MyDataSource
javax.sql.DataSource
java:/MyDataSource
或者,例如,使用Tomcat的context.xml: