영속성 단위를 사용하여 낙타 경로에서 JPA 구성 요소를 구성하려고합니다.낙타 경로가 시작될 때 JNDI에서 지속성 단위를 사용할 수 없음
EAP 6.4 및 Fuse 6.3을 사용하고 있습니다.
오른쪽 이제 경로는 그냥 내 데이터 소스에 대해 작업 얻을 정말 기본입니다 :
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);
}
여기서 문제는 내 서버에서이 줄을이 시작할 때이다 : entityManagerFactory = InitialContext.doLookup("java:/UtskicksbegaranOraclePU");
가 발생 javax.naming.NameNotFoundException: UtskicksbegaranOraclePU -- service jboss.naming.context.java.UtskicksbegaranOraclePU
위의 코드는 대부분 Jboss와 함께 제공되는 빠른 시작에서 가져온 것입니다.
내 경로에서 JPA 구성 요소를 사용하거나 구성하지 않고 서버를 시작하면 서버에 액세스하여 내 지속성 장치가 JNDI에 등록되어 있는지 확인할 수 있습니다.
<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>
는 기본적으로, 내가 무엇을 달성하기 위해 노력하고있어 것은 XA 후 다른 큐에 배포됩니다 내 데이터 소스에서 가져 오는 거래입니다 :
여기처럼 내 persistence.xml을 보이는거야.
나는 길을 시작하는 낙타 스프링을 사용하고 있는데,이는 내 구성입니다 :
<?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>
스프링을 사용하여 persistence.xml을 선언 지속성 장치에 액세스 할 수있는 다른 방법이 있나요? 내가 뭘 놓치고 있니?