Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat 6、JPA和数据源_Java_Tomcat_Jpa - Fatal编程技术网

Java Tomcat 6、JPA和数据源

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

我正在尝试让数据源在我的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" 
   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>