J'ai travaillé sur le déplacement de notre application de JBoss AS 6 vers Wildfly 10. Le problème principal auquel je suis resté est que l'EntityManager n'est pas injecté dans l'EJB. Je fais des recherches depuis un moment et j'essaie tout ce que je trouve, mais rien n'y fait.EntityManager est null lorsqu'il est injecté dans WildFly 10 EJB
Je n'ai pas une simple application pour recréer le problème pour le moment mais voici quelques détails et extraits de code.
Nous déployons en utilisant un fichier SAR. Ceci est une application de cadre Spring. Notre cache de deuxième niveau est désactivé pour le moment. C'est un autre problème que je dois aborder.
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="IpsDb" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:jboss/datasources/HarmonyServerDS</jta-data-source>
<jar-file>../harmonyserver-model.jar</jar-file>
<properties>
<!-- pessimistic lock timeout in milliseconds (Integer or String), this is a hint used by Hibernate but requires support by your underlying database. -->
<property name="javax.persistence.lock.timeout" value="15000"/>
<!-- query timeout in milliseconds (Integer or String), this is a hint used by Hibernate but requires support by your underlying database -->
<property name="javax.persistence.query.timeout" value="15000"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform" />
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
</properties>
</persistence-unit>
</persistence>
Début de la source de données à partir autonome-full.xml:
<datasource jta="true" jndi-name="java:jboss/datasources/HarmonyServerDS" pool-name="HarmonyServerDS" enabled="true" use-java-context="true" spy="false" use-ccm="true" connectable="false">
de la classe EJB (Ce sont les parties importantes, mais pas tout le code de la classe):
@Stateless
@Clustered
public class DataModificationBean implements DataModificationLocal {
@PersistenceUnit(unitName="IpsDb")
private EntityManagerFactory entityMgrFactory;
@PersistenceContext(unitName="IpsDb")
private EntityManager entityMgr;
@Override
@Transactional(propagation=Propagation.REQUIRES_NEW)
@InterruptOnTransactionTimeout(value=true)
public DataModificationResponse handleModification(DataModification mod, ModificationHandler handler, AdaptationContext adaptation, boolean bulk_lock)
{
try {
// Handler's data update monitor for delta changes.
DataUpdateMonitor updateMonitor = null;
// Pre-process the request and gather up the dataContext for processing.
logger.info("DataModificationBean EntityMgr=" + (entityMgr == null ? "null" : entityMgr.toString()));
logger.info("DataModificationBean EntityMgrFactory=" + (entityMgrFactory == null ? "null" : entityMgrFactory.toString()));
handler.preProcess(this, entityMgr);
...
La journalisation en bas de cet extrait montre que entityMgr et ent ityMgrFactory sont null.
Y at-il autre chose qui me manque? Ou toute autre chose que je pourrais montrer que ce serait utile?