Ресурс Tomcat JNDI для Datanucleus (JDO) - PullRequest
1 голос
/ 03 апреля 2012

Я разработал приложение для Tomcat 7.0, которое использует Datanucleus / JDO для доступа к базе данных. В настоящее время у меня есть свойства соединения JDO, хранящиеся в «datanucleus.properties», расположенном в самом приложении. Соединение работает нормально, но я хотел бы сохранить информацию о соединении как 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 context = null; PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory ("java: comp / env / jdbc / ConnectionDB", контекст);

Когда я запускаю свое приложение, я получаю javax.jdo.JDOUserException: вы либо указали для этого PMF, чтобы использовать «единицу постоянства» «datanucleus.properties» (пока этого не существует!)

Я действительно не понимаю, что не так в моей настройке.

С уважением,

Marcel

Ответы [ 2 ]

1 голос
/ 25 апреля 2012

Я наконец-то нашел решение, которое искал, выкладываю здесь, оно может кому-то помочь:

  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:

    PersistenceManagerFactory pmf;
    Properties properties = new Properties();
    properties.setProperty("datanucleus.ConnectionFactoryName","java:comp/env/jdbc/SyncTestDB");
    
0 голосов
/ 03 апреля 2012

Прочитайте javadoc для JDOHelper.getPersistenceManagerFactory (String) , и он явно не предназначен для передачи какой-либо строки источника данных JNDI.

Прочитайте документы для Tomcat, и вы также увидите, что при указании источника данных вы не предоставляете подробности соединения JDO.

Вы также можете указать persistence.xml со строкой JNDI для свойства "javax.jdo.option.ConnectionFactoryName". Согласно спецификации JDO и документам DataNucleus / Tomcat

...