Java Tomcat 6、JPA和数据源
我正在尝试让数据源在我的jsf应用程序中工作。我在web apps context.xml中定义了数据源Java Tomcat 6、JPA和数据源,java,tomcat,jpa,Java,Tomcat,Jpa,我正在尝试让数据源在我的jsf应用程序中工作。我在web apps context.xml中定义了数据源 <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/Sale"> <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxI
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Sale">
<Resource auth="Container"
driverClassName="com.mysql.jdbc.Driver"
maxActive="20"
maxIdle="10"
maxWait="-1"
name="Sale"
password="admin"
type="javax.sql.DataSource"
url="jdbc:mysql://localhost/sale"
username="admin"/>
</Context>
webapp/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Sale">
<Resource auth="Container"
driverClassName="com.mysql.jdbc.Driver"
maxActive="20"
maxIdle="10"
maxWait="-1"
name="Sale"
password="admin"
type="javax.sql.DataSource"
url="jdbc:mysql://localhost/sale"
username="admin"/>
</Context>
MySQL驱动程序所需的JAR包含在WEB-INF/lib目录中
我做错了什么?认为web.xml还需要对数据源的引用
<resource-ref>
<description>DB Connection</description>
<res-ref-name>Sale</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth> </resource-ref>
数据库连接
特价
javax.sql.DataSource
容器
您的销售
看起来不正确,您应该使用格式java:comp/env/ds/OracleDS
(至少这是我对文档的理解)
实际上,我并不确信您的JDBC数据源JDNI资源是正确创建的(因为您将JDBC驱动程序jar放入了WEB-INF/lib
)。从Tomcat文档中:
JDBC数据源JNDI的使用
资源工厂要求您
制作一个合适的JDBC驱动程序
Tomcat和internal都可用
类并将其添加到web应用程序。
这最容易通过以下方式实现:
安装驱动程序的JAR文件
进入$CATALINA_HOME/common/lib
目录,使驱动程序
资源工厂可以同时使用这两个选项
和你的申请
您可能应该首先测试这一点(通过编写一段快速代码进行查找以获得连接)
还应严格遵循中所述的步骤(并对齐
web.xml
、context.xml
和persistence.xml
)的内容。正如Josek所说,您需要在web.xml文件上进行数据源引用:
<resource-ref>
<description>This is a PostgreSQL database connection</description>
<res-ref-name>jdbc/sadep</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
因此,对于使用tomcat的JPA:
<non-jta-data-source>java:/comp/env/jdbc/sadep</non-jta-data-source>
java:/comp/env/jdbc/sadep
想法相同,也测试过,但没有影响。无论如何,Tomcat文档似乎很清楚这个注释“注意:docBase非常重要-它必须与您的WAR文件相匹配,否则您将在这个链接上得到一个(名称ds在此上下文中不绑定)异常”,这可能有助于java:comp/env/Sale
考虑到这个问题中的Name=“Sale”
。
<resource-ref>
<description>This is a PostgreSQL database connection</description>
<res-ref-name>jdbc/sadep</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:/comp/env/jdbc/sadep");
<non-jta-data-source>java:/comp/env/jdbc/sadep</non-jta-data-source>