Я пытаюсь ввести EntityManagerFactory с помощью @PersistenceUnit, но он всегда равен нулю.Inject EntityManagerFactory с помощью @PersistenceUnit на Джерси с Wildfly
Я думаю, что мой persistence.xml в порядке, так как я могу получить EntityManager с этим кодом:
EntityManager em = Persistence.createEntityManagerFactory("myPersistenceUnit").createEntityManager();
Итак, я хотел бы знать, если я делаю что-то неправильно, или если это не возможно при использовании Джерси (2.23) и Wildfly 10 (JBoss EAP 7).
Вот что я сделал до сих пор:
- Создано Maven проект джерси-Quickstart-WebAPP на затмение;
Добавлены следующие зависимости для моей pom.xml:
<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.2.2.Final</version> </dependency> <dependency> <groupId>com.hynnet</groupId> <artifactId>oracle-driver-ojdbc6</artifactId> <version>12.1.0.1</version> </dependency>
создавшего persistence.xml:
<persistence-unit name="myPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <!-- All persistence classes must be listed --> <class>com.mps.classes.TermosPesquisados</class> <properties> <!-- Provider-specific connection properties --> <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" /> <property name="javax.persistence.jdbc.url" value="JDBC_URL" /> <property name="javax.persistence.jdbc.user" value="USER" /> <property name="javax.persistence.jdbc.password" value="PASSWORD" /> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> <property name="hibernate.show_sql" value="false" /> <property name="hibernate.connection.release_mode" value="after_transaction" /> <property name="hibernate.connection.isolation" value="2" /> </properties> </persistence-unit>
Измененный MyResource.java:
@ManagedBean @Path("myresource") public class MyResource { @PersistenceUnit(unitName= "myPersistenceUnit") private EntityManagerFactory emf; @GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { if(emf == null) return "emf is null"; return "emf is not null"; } }
Добавлен пустой beans.xml (не уверен, что это необходимо);
Как примечание, если вы новичок в Java и имеете возможность выбирать свои инструменты, я предлагаю взглянуть на Spring вместо этого. Автоконфигурация Spring Boot упрощает эту настройку и устраняет необходимость в внешнем контейнере. – chrylis
@chrylis согласен, но может зависеть от его cicumstance ... плюс ejb стал легче в последние несколько лет – Crowie