2012-04-03 2 views
1

Я разработал приложение на Tomcat 7.0, которое использует Datanucleus/JDO для доступа к базе данных. В настоящее время у меня есть свойства соединения JDO, хранящиеся в «datanucleus.properties», расположенном в самом приложении. Соединение работает нормально, но я хотел бы хранить информацию о соединении как JNDI, иметь ее на сервере и больше не в самой войне (мне всегда приходится заменять файл на войне при его удаленном развертывании).Tomcat Ресурс JNDI для Datanucleus (JDO)

Я попытался следующие:

  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 со следующим синтаксисом:

    Контекстный контекст = null; PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory ("java: comp/env/jdbc/ConnectionDB", контекст);

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

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

С уважением,

Марсель

+0

Марсель, я делаю одно и то же пытается получить DataNucleus и кота и MySQL, чтобы работать вместе.Моя проблема по какой-то причине я не могу заставить плагин eclipse работать над моими классами, и я продолжаю получать исключение класса, которое не является постоянным. Тот же код работает в автономном приложении. Я почти уверен, что у меня проблема с размещением orm-файлов и т. Д., Если вы могли бы помочь, разделив структуру папок и файлы xml и развертывание, если это будет огромной помощью. Я разместил здесь вопрос, но ответа пока не получил. Посмотри меня и посмотри на мой вопрос. Заранее спасибо. –

ответ

0

Читать Javadoc для JDOHelper.getPersistenceManagerFactory (String) и это явно не для прохождения в некотором источнике данных JNDI строке.

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

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

+0

Здравствуйте DataNucleus, я хочу сделать то, что вы упомянули в своем третьем пункте. Но онлайн-документ Datanucleus не совсем полезен, я нашел только следующее: «Еще одна альтернатива - вызвать JDOHelper.getPersistenceManagerFactory (jndiLocation, context), следовательно, получить доступ к свойствам через JNDI». Я попытался сохранить свойства JDO как JDNI в Server.xml, но это не работает ... – user652341

+0

Просто укажите свойства персистентности (в файле свойств или через карту) в JDOHelper.getPersistenceManagerFactory. – DataNucleus

1

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

  1. Создать ресурс в «контексте. 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"); 
    
Смежные вопросы