定义数据源的可移植方法是使用 _ 资源引用
。资源引用使您能够相对于应用程序命名上下文(java:comp/env
)为数据源定义JNDI名称,然后将该 _逻辑引用 映射到应用程序服务器中定义的
物理资源 ,该 资源 的JNDI名称是应用程序服务器供应商 专有 的。这种方法使您的代码和程序集可移植到任何兼容的应用程序服务器。
这可以通过
resource-ref在Web部署描述符(
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注释可以在代码中更轻松地完成此 *** 作。这消除了在Web部署描述符(web.xml)中配置resource-
ref的需要,并避免了执行显式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" . . . />
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)