2012-04-03 106 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");