J'essaie d'utiliser une unité de persistance pour configurer mon composant JPA dans une route de dromadaire. J'utilise EAP 6.4 et Fuse 6.3.Unité de persistance non disponible dans JNDI lors du démarrage de l'itinéraire de camel
En ce moment, la route est vraiment de base pour le faire fonctionner contre mon datasource:
private UserTransaction userTransaction;
private JpaEndpoint jpaEndpoint;
private JaxbDataFormat jaxbDataFormat;
@Override
public void configure() throws Exception {
// @formatter:off
configureErrorHandling();
configureJpa();
from("timer:startup?repeatCount=1")
.to(jpaEndpoint)
.process(exchange -> {
Exchange ex = exchange;
});
// @formatter:on
}
private void configureJpa() {
// Configure our JaxbDataFormat to point at our 'model' package
EntityManagerFactory entityManagerFactory = null;
try {
userTransaction = InitialContext.doLookup("java:jboss/UserTransaction");
entityManagerFactory = InitialContext.doLookup("java:/UtskicksbegaranOraclePU");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setContextPath(UtskicksbegaranRequestOracle.class.getPackage().getName());
// Configure a JtaTransactionManager by looking up the JBoss transaction manager from JNDI
JtaTransactionManager transactionManager = new JtaTransactionManager(userTransaction);
transactionManager.afterPropertiesSet();
// Configure the JPA endpoint to use the correct EntityManagerFactory and JtaTransactionManager
jpaEndpoint = new JpaEndpoint();
jpaEndpoint.setCamelContext(getContext());
jpaEndpoint.setConsumeDelete(false);
jpaEndpoint.setMaximumResults(500);
jpaEndpoint.setQuery(consumerQuery);
jpaEndpoint.setEntityType(UtskicksbegaranRequestOracle.class);
jpaEndpoint.setEntityManagerFactory(entityManagerFactory);
jpaEndpoint.setTransactionManager(transactionManager);
}
Le problème est que lorsque je commence sur mon serveur, cette ligne: entityManagerFactory = InitialContext.doLookup("java:/UtskicksbegaranOraclePU");
lancers francs javax.naming.NameNotFoundException: UtskicksbegaranOraclePU -- service jboss.naming.context.java.UtskicksbegaranOraclePU
Le code ci-dessus provient principalement d'un quickstart fourni avec Jboss. Lorsque je démarre le serveur sans utiliser ou configurer le composant JPA dans mon itinéraire, je peux accéder à mon serveur et voir que mon unité de persistance a été enregistrée dans JNDI.
Voici ce que mon persistence.xml ressemble:
<persistence version="2.0"
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_2_0.xsd">
<persistence-unit name="UtskicksbegaranOraclePU" transaction-type="JTA">
<jta-data-source>java:jboss/datasources/xa/utskicksbegaran</jta-data-source>
<class>classes</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.default_schema" value="icc" />
<property name="jboss.entity.manager.factory.jndi.name" value="java:/UtskicksbegaranOraclePU"/>
</properties>
</persistence-unit>
</persistence>
Fondamentalement, ce que je suis en train de réaliser est un XA de mon traitée chercher la source de données qui seront ensuite distribués aux différentes files d'attente.
J'utilise ressort de chameau pour commencer la route, ce qui est ma configuration pour que:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd>
<camelContext id="camelContext_utskicksbegaran-oracle-adapter" xmlns="http://camel.apache.org/schema/spring">
<packageScan>
<package>se.sjv.integration.camel.hanterautskick</package>
</packageScan>
</camelContext>
</beans>
est-il un autre moyen d'accéder à une unité de persistance déclarée dans persistence.xml avec Spring? Qu'est-ce que je rate?