Java 如何通过JNDI works使用数据源?
在使用JNDI时,有些事情我确实不明白 这将简化Java开发人员的生活,但这一承诺听起来是错误的 从应用程序中使用数据库的最简单方法似乎是在每次需要时(因此,每个应用程序一次)构建一个数据源类,为您提供将要使用的连接或会话。 这是一个在几分钟内编写的工具类,您必须在其中声明驱动程序、url、登录名和密码。一切都结束了 推荐的方法是依靠服务器资源管理、JNDI和所有资源,如目录等。 但它真的有用且简单吗 使用Tomcat,您必须在server.xml中完整描述数据源,然后在context.xml中将其声明为资源 server.xmlJava 如何通过JNDI works使用数据源?,java,database,jndi,Java,Database,Jndi,在使用JNDI时,有些事情我确实不明白 这将简化Java开发人员的生活,但这一承诺听起来是错误的 从应用程序中使用数据库的最简单方法似乎是在每次需要时(因此,每个应用程序一次)构建一个数据源类,为您提供将要使用的连接或会话。 这是一个在几分钟内编写的工具类,您必须在其中声明驱动程序、url、登录名和密码。一切都结束了 推荐的方法是依靠服务器资源管理、JNDI和所有资源,如目录等。 但它真的有用且简单吗 使用Tomcat,您必须在server.xml中完整描述数据源,然后在context.xml中
<GlobalNamingResources>
<Resource auth="Container" driverClassName="org.postgresql.Driver" maxIdle="30" maxTotal="100" maxWaitMillis="10000" name="jdbc/dsTriasEmployees" password="pwd" type="javax.sql.DataSource" url="jdbc:postgresql://localhost:5432/trias_employees" username="login"/>
</GlobalNamingResources>
<ResourceLink name="jdbc/dsTriasEmployees" global="jdbc/dsTriasEmployees"
type="javax.sql.DataSource" />
<resource-ref>
<description>
DB PostgreSQL
</description>
<res-ref-name>
jdbc/trias_employees
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
但在这样做之后,您仍然需要处理错误消息,这些消息告诉您这还不够,就像这样:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
我在某个地方读到,我现在应该在web.xml文件中添加一个JNDI属性文件和一个声明,如下所示:
web.xml
<GlobalNamingResources>
<Resource auth="Container" driverClassName="org.postgresql.Driver" maxIdle="30" maxTotal="100" maxWaitMillis="10000" name="jdbc/dsTriasEmployees" password="pwd" type="javax.sql.DataSource" url="jdbc:postgresql://localhost:5432/trias_employees" username="login"/>
</GlobalNamingResources>
<ResourceLink name="jdbc/dsTriasEmployees" global="jdbc/dsTriasEmployees"
type="javax.sql.DataSource" />
<resource-ref>
<description>
DB PostgreSQL
</description>
<res-ref-name>
jdbc/trias_employees
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
数据库PostgreSQL
jdbc/trias_员工
javax.sql.DataSource
容器
但是当我想用jUnit进行测试时,我的web.xml是没有用的
我应该编写多少XML和属性文件,以遵守希望我将数据源访问权委托给服务器的最佳实践?
我需要复制多少次与url、池连接等相关的所有信息
我读过两三本关于JavaEE的书,50篇关于StackOverFlow的帖子,几十个论坛,以及Tomcat网站上所有的JNDI资源HOW-TO。
但它仍然不起作用
有没有关于使用JNDI进程连接到数据库所需做的一切的完整描述
请帮帮我,否则我每失去一分钟就杀一只小猫,只是为了“按推荐的方式”完成我的工作
Thanx由advance提供。测试依赖于数据源或Tomcat通过您可以依赖的Tomcat之外的JNDI提供的任何其他对象的类。将它指向server.xml和context.xml,它将使用文件中配置的所有对象初始化JNDI环境
TomcatJNDI tomcatJNDI = new TomcatJNDI();
tomcatJNDI.processServerXml(serverXmlFile)
tomcatJNDI.processContextXml(contextXmlFile);
tomcatJNDI.start();
然后查找数据源
DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/jdbc/trias_employee")
Thanx@holger thurow