java - Datanucleus (JDO) 的 Tomcat JNDI 资源

标签 java tomcat jndi datanucleus

我在 Tomcat 7.0 上开发了一个应用程序,它使用 Datanucleus/JDO 来访问数据库。我目前将 JDO 连接属性存储在应用程序本身的“datanucleus.properties”中。连接工作正常,但我想将连接信息存储为 JNDI,将其保存在服务器上,而不是在 war 本身中(远程部署时我总是必须替换 war 中的文件)。

我尝试了以下方法:

  1. 在应用程序的 web.xml 中创建一个 (jdbc/ConnectionDB)

  2. 在“Server.xml”中,我尝试在我的应用程序上下文中添加以下内容

    <Resource name="jdbc/ConnectionDB" auth="Container" type="javax.jdo.PersistenceManagerFactory" /> <ResourceParams name="jdbc/ConnectionDB
    <parameter>
       <name>javax.jdo.PersistenceManagerFactoryClass</name>
       <value>org.datanucleus.api.jdo.JDOPersistenceManagerFactory</value>
    </parameter>
    <parameter>
       <name>javax.jdo.option.ConnectionDriverName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
       <name>javax.jdo.option.ConnectionURL</name>
       <value>jdbc:mysql://localhost/TomcatTest</value>
    </parameter> 
    ...
    
  3. 然后我尝试使用以下语法创建一个新的 PMF:

    上下文上下文=空; PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("java:comp/env/jdbc/ConnectionDB",context);

当我运行我的应用程序时,我得到一个 javax.jdo.JDOUserException:您已经为此 PMF 指定使用“datanucleus.properties”的“持久性单元”(但这不存在!)

我真的不明白我的设置有什么问题。

问候,

马塞尔

最佳答案

我终于找到了我正在寻找的解决方案,我把它贴在这里,它可能对其他人有帮助:

  1. 在服务器的“Context.xml”文件中创建一个资源

     <Resource name="jdbc/SyncTestDB" 
      auth="Container" 
      type="javax.sql.DataSource" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      username="root"
      password="mysql" 
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost/SyncTestDB"/>
    
  2. 在应用程序的“web.xml”文件中创建对该资源的引用

      <resource-ref>
       <description>MySQL Database Connection</description>
       <res-ref-name>jdbc/SyncTestDB</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
      </resource-ref>
    
  3. 最后使用 JNDI 连接获得 Persistence Manager Factory:

    PersistenceManagerFactory pmf;
    Properties properties = new Properties();
    properties.setProperty("datanucleus.ConnectionFactoryName","java:comp/env/jdbc/SyncTestDB");
    

关于java - Datanucleus (JDO) 的 Tomcat JNDI 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991550/

相关文章:

java - 将mysql数据库连接到jsp

java - Spring Batch输出文件的格式?

java - 使用 int、do-while 和 if 创建菜单系统

java - income_amount (code 1) : , 编译时:SELECT SUM(income_amount) FROM INCOME WHERE month = '24'

tomcat - 使用 NIO 连接器部署到 Tomcat 时,使用 Servlet 3.0 异步是否多余?

tomcat - 在 Tomcat 6.0 中配置 SSI

java - Java 中的泛型和通配符

java - Websphere 8.5 是否提供 API 来使用 Websphere 安全设置中配置的安全详细信息与 Active Directory 交互?

spring-boot - Spring Boot应用中如何定义资源,相当于传统web.xml中的<resource-ref>?

maven-2 - Glassfish 应用程序无法与 Maven 库(gf-client)一起使用