JPA с JOTM: невозможно изменить фабрику диспетчера сущностей после изменения фабрики JNDI

Я пытаюсь интегрировать JOTM с JPA в Tomcat. Я могу интегрировать JOTM с JDBC DataSource в Tomcat. Но когда я перешел на JPA, JTA DataSource не нашел. Я могу искать этот источник данных через контекст.

Я использовал Context.xml в пути к классам:

<Context reloadable="true">

<Resource name="jdbc/DB1" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
factory="org.objectweb.jndi.DataSourceFactory"
username="system" password="admin" 
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/DB1"/>

<Transaction factory="org.objectweb.jotm.UserTransactionFactory"
jotm.timeout="60"/> 
</Context>

Атрибут фабрики создает проблему. После удаления он может найти источник данных. Но этот атрибут необходим для выполнения транзакции.

Ниже мое постоянство.xml

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"  version="2.1">
<persistence-unit name="JOTMTest" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<non-jta-data-source>java:/comp/env/jdbc/DB1</non-jta-data-source>
</persistence-unit>
</persistence>

Ниже мой web.xml:

<web-app>
<display-name>JTAProject</display-name> 
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/DB1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

Мой сервлет, имеющий только две строки ниже:

 protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {

EntityManagerFactory emf = 
Persistence.createEntityManagerFactory("JOTMTest");

EntityManager em = emf.createEntityManager();       
}

Работая без JPA и используя JDBC, он работает нормально.

public static DataSource getDataSource1(){
DataSource ds = null;
try {
Context ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/DB1");
} catch (NamingException e) {
e.printStackTrace();
}
return ds;
}

Работает нормально. Даже после внедрения JPA. Но он не может найти источник данных через конфигурацию JPA.

Я ищу JTA с JPA без реализации Spring в Tomcat.

0 ответов

Другие вопросы по тегам