2017-05-05 4 views
1

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?

Répondre

0

Ceci est finalement résolu.
Il s'agissait de l'ordre de chargement au démarrage du serveur. Pour une raison quelconque, l'utilisation de jboss-deployment-structure.xml n'a pas résolu cela. J'utilise maintenant un WEB-INF/jboss-all.xml et le fichier en question contient ce qui suit, que mon intégration de chameau dépend avant de commencer:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss umlns="urn:jboss:1.0"> 
    <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0"> 
     <dependency name="activemq-rar.rar" /> 
     <dependency name="ojdbc6.jar" /> 
    </jboss-deployment-dependencies> 
</jboss> 

Tout fonctionne bien avec cela.