OpenEJB не может использовать javax.persistence.jtaDataSource - PullRequest
1 голос
/ 28 сентября 2011

Следующая конфигурация подходит для WebLogic, но в OpenEJB возникает ошибка «javax.naming.NameNotFoundException: имя« AppDB »не найдено».

И если я удалил свойство javax.persistence.jtaDataSource, оно работает. А зачем устанавливать 2 дублированных источника данных? Потому что это ошибка Eclipselinks (см. http://bugs.eclipse.org/246126)

<persistence-unit name="app1" transaction-type="JTA">
  <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  <jta-data-source>AppDB</jta-data-source>

  <properties>
    <property name="javax.persistence.jtaDataSource" value="AppDB" />
  </properties>       
</persistence-unit>

Ниже приводится jndi.properties

java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
openejb.validation.output.level=VERBOSE
openejb.nobanner=false
jdbc/AppDB = new://Resource?type=DataSource
jdbc/AppDB.provider = org.eclipse.persistence.jpa.PersistenceProvider 
jdbc/AppDB.JdbcDriver = oracle.jdbc.OracleDriver
jdbc/AppDB.JdbcUrl = jdbc:oracle:thin:@xx.xx.xx.xx:xxxx:xxxx
jdbc/AppDB.JtaManaged = false
jdbc/AppDB.UserName = xxxx
jdbc/AppDB.Password = xxxx

Поскольку это jar-файл, упакованный другой командой, я не могу изменить содержимое, но я все еще хочу использовать его в своем OpenEJB, какое-либо предложение? спасибо.

1 Ответ

2 голосов
/ 09 октября 2011

Не совсем уверен, как EclipseLink обрабатывает свойство javax.persistence.jtaDataSource.Я должен предположить, что это какой-то поиск JNDI, но в том, как они могут это сделать, есть невероятное значение.Например, если они предшествуют java:comp/env/, это существенно меняет семантику.

Возможно, попробуйте переопределить javax.persistence.jtaDataSource, чтобы использовать глобальное имя JNDI OpenEJB для вашего источника данных.Итак, в вашем jndi.properties файле добавьте

app1.javax.persistence.jtaDataSource = openejb:Resource/jdbc/AppDB

Определенно дайте мне знать, если это работает.Кажется, это может быть хорошей возможностью для добавления в OpenEJB, даже если это свойство фактически используется провайдером JPA.Исправление недопустимых имен JNDI может быть более чем удобным.

В дополнение к этому следует добавить инструкцию регистрации, в которой говорится, что 'jdbc / AppDB.provider' не является свойством, поддерживаемым источником данных.Вероятно, лучше всего удалить это свойство.

...