Java Datanucleus(JDO)的Tomcat JNDI资源

Java Datanucleus(JDO)的Tomcat JNDI资源,java,tomcat,jndi,datanucleus,Java,Tomcat,Jndi,Datanucleus,我在Tomcat7.0上开发了一个应用程序,它使用Datanucleus/JDO访问数据库。我目前将JDO连接属性存储在应用程序本身的“datanucleus.properties”中。连接工作正常,但我希望将连接信息存储为JNDI,以便将其保存在服务器上,而不再保存在war中(在远程部署war时,我必须始终替换war中的文件) 我尝试了以下方法: 在应用程序(jdbc/ConnectionDB)的web.xml中创建 在“Server.xml”中,我试图在我的应用程序上下文中添加以下内容 &

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

我尝试了以下方法:

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

  • 在“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> 
    ...
    
      <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>
    
    阅读JDOHelper.getPersistenceManagerFactory(字符串)的javadoc,它显然不用于传递一些JNDI数据源字符串

    阅读Tomcat的文档,您还将看到指定数据源并不提供JDO连接详细信息

    您同样可以为“javax.jdo.option.ConnectionFactoryName”属性指定带有JNDI字符串的persistence.xml。根据JDO规范和DataNucleus/Tomcat文档,然后

    阅读JDOHelper.getPersistenceManagerFactory(字符串)的javadoc,它显然不用于传递一些JNDI数据源字符串

    阅读Tomcat的文档,您还将看到指定数据源并不提供JDO连接详细信息


    您同样可以为“javax.jdo.option.ConnectionFactoryName”属性指定带有JNDI字符串的persistence.xml。根据JDO规范和DataNucleus/Tomcat文档,我终于找到了我想要的解决方案,我将其发布在这里,它可能会帮助其他人:

  • 在服务器的“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"/>
    

  • 我终于找到了我正在寻找的解决方案,我将其发布在这里,它可能会帮助其他人:

  • 在服务器的“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"/>
    

  • 您好DataNucleus,我想做您在第3点中提到的事情。但是Datanucleus online文档并不是完全有用的,我只发现了以下“另一种选择是调用JDOHelper.getPersistenceManagerFactory(jndiLocation,context);,从而通过JNDI访问属性。”我尝试将JDO属性作为JDNI存储在Server.xml中,但这不起作用…只需将持久性属性(在属性文件中,或通过映射)指定给JDOHelper.getPersistenceManagerFactory.Hello DataNucleus,我想完全按照您在第三点中提到的方法来做。但是Datanucleus online文档并不是完全有用的,我只发现了以下“另一种选择是调用JDOHelper.getPersistenceManagerFactory(jndiLocation,context);,从而通过JNDI访问属性。”我尝试将JDO属性作为JDNI存储在Server.xml中,但这不起作用……只需将持久性属性(在属性文件中或通过映射)指定到JDOHelper.getPersistenceManagerFactory.Marcel,我正在做完全相同的事情,试图让datanucleus、tomcat和mysql一起工作。我的问题是出于某种原因,我无法让eclipse插件在我的类上工作,并且我一直得到类不可持久异常。同样的代码也适用于独立应用程序。我几乎可以肯定,如果您能通过共享文件夹结构和xml文件以及部署来提供帮助的话,我对将orm文件放在何处等都有疑问。我在这里发布了一个问题,但还没有答案。来看看我的问题。提前谢谢。Marcel,我正在做完全相同的事情,试图让datanucleus、tomcat和mysql一起工作。我的问题是出于某种原因,我无法让eclipse插件在我的类上工作,并且我一直得到类不可持久异常。同样的代码也适用于独立应用程序。我几乎可以肯定,如果您能通过共享文件夹结构和xml文件以及部署来提供帮助的话,我对将orm文件放在何处等都有疑问。我在这里发布了一个问题,但还没有答案。来看看我的问题。提前谢谢。