Ресурс Tomcat JNDI для Datanucleus (JDO)

Я разработал приложение на 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 со следующим синтаксисом:

    контекст контекста = ноль; PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("java:comp/env/jdbc/ConnectionDB",context);

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

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

С уважением,

Марсель


person marcel f    schedule 03.04.2012    source источник
comment
Марсель, я делаю то же самое, пытаясь заставить datanucleus, tomcat и mysql работать вместе. Моя проблема в том, что по какой-то причине я не могу заставить плагин eclipse работать с моими классами, и я продолжаю получать исключение класса, не сохраняемое. Тот же код работает в автономном приложении. Я почти уверен, что у меня есть проблема с тем, куда поместить файлы orm и т. Д., Если бы вы могли помочь, поделившись своей структурой папок, файлами xml и развертыванием, если бы это было огромной помощью. Я разместил здесь вопрос, но пока не получил ответа. Посмотри на меня и увидишь мой вопрос. Заранее спасибо.   -  person Amir Peivandi    schedule 11.02.2014


Ответы (2)


Наконец-то я нашел решение, которое искал, я размещаю его здесь, это может помочь кому-то еще:

  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. И, наконец, получите Persistence Manager Factory, используя соединение JNDI:

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

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

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

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

person DataNucleus    schedule 03.04.2012
comment
Здравствуйте, DataNucleus, я хочу сделать именно то, что вы упомянули в своем третьем пункте. Но онлайн-документ Datanucleus не совсем полезен, я нашел только следующее. Другой альтернативой может быть вызов JDOHelper.getPersistenceManagerFactory(jndiLocation, context); , следовательно, доступ к свойствам через JNDI. Я пытался сохранить свойства JDO как JDNI в Server.xml, но это не работает... - person marcel f; 03.04.2012
comment
Просто укажите свойства постоянства (в файле свойств или через карту) для JDOHelper.getPersistenceManagerFactory. - person DataNucleus; 04.04.2012