Java 配置JDBC数据源,以便在JSF2项目中与JNDI和Tomcat6一起使用
我正在使用JSF2开发一个web应用程序,它将部署在Tomcat6中。我需要使用JNDI访问HSQLDB数据源。我不能修改Tomcat的Java 配置JDBC数据源,以便在JSF2项目中与JNDI和Tomcat6一起使用,java,jsf-2,jdbc,tomcat6,jndi,Java,Jsf 2,Jdbc,Tomcat6,Jndi,我正在使用JSF2开发一个web应用程序,它将部署在Tomcat6中。我需要使用JNDI访问HSQLDB数据源。我不能修改Tomcat的server.xml文件,也不能修改任何其他“Tomcat文件”。我已经看过关于这方面的各种教程和解释,但都包括关于修改server.xml等的步骤,这在本例中是不允许的。我的问题是,这可以在不修改Tomcat文件的情况下完成吗(即,仅对META-INF和WEB-INF中的文件(如WEB.xml)以及要部署在.war文件中的其他文件进行更改?如果是,需要修改哪些
server.xml
文件,也不能修改任何其他“Tomcat文件”。我已经看过关于这方面的各种教程和解释,但都包括关于修改server.xml
等的步骤,这在本例中是不允许的。我的问题是,这可以在不修改Tomcat文件的情况下完成吗(即,仅对META-INF
和WEB-INF
中的文件(如WEB.xml
)以及要部署在.war文件中的其他文件进行更改?如果是,需要修改哪些文件以及如何修改?这是我第一次通过JNDI设置对数据库的访问,响应越详细越好。谢谢。请查看。)
在那里你可以看到,你只需要在META-INF中修改/创建项目context.xml
,在web-INF中修改/创建项目web.xml
在Tomcat中通过添加声明来配置JNDI数据源
您的资源与您的上下文相关联
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest"/>
现在为这个测试应用程序创建一个WEB-INF/WEB.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
数据库连接
jdbc/TestDB
javax.sql.DataSource
容器
我建议你阅读,特别是:为链接提供上下文:一个指向潜在解决方案的链接总是受欢迎的,但是请在链接周围添加上下文,这样你的其他用户就会知道它是什么以及为什么存在。总是引用一个重要链接中最相关的部分,以防目标站点无法访问或永久关闭脱机。@反斜杠我希望它现在能满足要求!?这很有帮助。我已经将必要的文件/代码添加到我的项目中,并且(可能)已经已经成功了。我仍然需要做更多的测试。但是,我有一个后续问题。我使用了您发布的代码,并进行了更改,使其适合HSQLDB。当我试图通过
Context initialContext=new initialContext();
thenDataSource ds=(DataSource)initialContext.lookup(“jdbc/TestDB”)获取conn时;
我遇到一个异常,告诉我找不到名称。但是当我执行查找(“java:comp/env/jdbc/TestDB”)
时,乍一看,它似乎找到了名称。为什么?正如apache howto中所述:“当以编程方式访问数据源时,请记住在JNDI查找之前添加java:/comp/env”。如果您想知道原因,我建议您进一步阅读howto以及有关上下文容器的页面。我一定错过了这一部分。我会再看一看。感谢您提供的链接和答案。