2012-04-03 63 views
1

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

我尝试以下:

  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的语法如下:

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

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

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

问候,

马塞尔

+0

马塞尔,我做试图让DataNucleus将和Tomcat和MySQL大家一起努力完全一样的事情。我的问题是由于某些原因,我不能让Eclipse插件工作在我的类上,并且我一直在获取类不是持久化异常。相同的代码适用于独立应用程序。我几乎可以肯定,如果可以通过共享文件夹结构和xml文件以及部署来帮助解决问题,那么可以在哪里放置orm文件等问题。我在这里发布了一个问题,但还没有答案。看看我,看看我的问题。提前致谢。 – 2014-02-10 20:17:56

回答

0

阅读JDOHelper.getPersistenceManagerFactory(字符串)的Javadoc,它显然不用于使某些JNDI数据源串。

阅读Tomcat的文档,你也会看到指定一个数据源,你不提供JDO连接细节。

您可以同样为“javax.jdo.option.ConnectionFactoryName”属性指定一个具有该JNDI字符串的persistence.xml。由于按照JDO规范,DataNucleus将/ Tomcat的文档,然后

+0

你好DataNucleus,我想做你刚才提到的第三点。但Datanucleus在线文档并不完全有帮助,我只发现以下内容:“另一种方法是调用JDOHelper.getPersistenceManagerFactory(jndiLocation,context);因此通过JNDI访问属性。”我尝试将JDO属性作为JDNI存储在Server.xml中,但这不起作用... – user652341 2012-04-03 11:26:32

+0

只需在JDOHelper.getPersistenceManagerFactory中指定持久性属性(在属性文件中,或通过Map)即可。 – DataNucleus 2012-04-04 09:17:56

1

我终于找到了我一直在寻找的解决方案,我张贴在这里,它可能会帮助别人:

  1. 创建“语境下的资源。 XML应用程序的web.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. 在创建到资源的引用’

    <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连接获得持久性管理器工厂:

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