无法使用camel和openjpa检索多个实体

时间:2018-02-07 16:48:59

标签: java apache-camel openjpa camel-jpa

我正在使用spark-rest组件,并希望使用JPA端点使用Camel-jpa和openJpa从oracle DB中获取多个实体。我已经阅读了Camel in Action 2中的第6.5章,但只能通过它的Id设法获得一个单独的实体。但是,当我尝试使用jpa检索多个实体时,我遇到了很多麻烦,结果是openJpa异常,而不管是否带有参数的选择。

这是我的路线:

public class MyRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {

            restConfiguration()
              .component("spark-rest")
                .host("localhost").port(8087).bindingMode(RestBindingMode.json);

            rest("/")
              .get("foo/{name}")
              .route()
                .bean(MyService.class.getName(), "myMethod")
                .to("jpa:" + Foo.class.getName() + "?consumer.namedQuery=Foo.findByName&consumeDelete=false")

@Entity注释类如下:

@Entity
@Table(name=Foo.TABLE_NAME)
@NamedQueries({
    @NamedQuery(name="Foo.findAll", query="SELECT f FROM Foo f"), 
    @NamedQuery(name="Foo.findByName", query="SELECT f FROM Foo f WHERE f.nombre = :nombre"),
    @NamedQuery(name="Foo.findById", query="SELECT f FROM Foo f WHERE f.persfisica = 1")
})
public class Foo implements Serializable{
    ...
}

向上面定义的endpoing发送GET请求时返回的异常是这样的:

<openjpa-2.1.0-r422266:1071316 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "
my.package.Foo".
    at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:116)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:315)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:239)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:213)
    at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:388)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:541)
    at com.sun.proxy.$Proxy17.createEntityManager(Unknown Source)
    at org.apache.camel.component.jpa.JpaHelper.getTargetEntityManager(JpaHelper.java:63)
    at org.apache.camel.component.jpa.JpaProducer.process(JpaProducer.java:57)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:468)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:196)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:91)
    at org.apache.camel.component.sparkrest.CamelSparkRoute.handle(CamelSparkRoute.java:46)
    at spark.RouteImpl$1.handle(RouteImpl.java:58)
    at spark.webserver.MatcherFilter.doFilter(MatcherFilter.java:162)
    at spark.webserver.JettyHandler.doHandle(JettyHandler.java:61)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:499)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.lang.Thread.run(Thread.java:748)

类似的堆栈跟踪是我在尝试使用单元测试获取这些实体时得到的。

根据this failed jpa test,它看起来像OpenJpa中的一个错误,但还没有找到使用jpa组件的解决方法。

有什么建议吗?

正如旁注:这已经在本地进行了测试,但是与OSGI兼容,这是我没有潜入Spring jpa的主要原因。

0 个答案:

没有答案