0

I am getting the below error with PESSIMISTIC_WRITE while using same jpa component in 2 routes although camel jpa is by default PESSIMISTIC_WRITE from 2.13.0 which I am using

Error:

[ERROR] *************************************
[ERROR] Error occurred while running main from: org.apache.camel.spring.Main
[ERROR] 
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:488)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NoSuchFieldError: PESSIMISTIC_WRITE
    at org.apache.camel.component.jpa.JpaConsumer.<init>(JpaConsumer.java:60)
    at org.apache.camel.component.jpa.JpaEndpoint.createConsumer(JpaEndpoint.java:111)
    at org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:65)
    at org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:80)
    at org.apache.camel.impl.RouteService.warmUp(RouteService.java:134)
    at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:2263)
    at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:2193)
    at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1981)
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1851)
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1683)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1651)
    at org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:254)
    at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:120)
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:318)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:96)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:948)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
    at org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:217)
    at org.apache.camel.spring.Main.doStart(Main.java:157)
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.main.MainSupport.run(MainSupport.java:147)
    at org.apache.camel.main.MainSupport.run(MainSupport.java:351)
    at org.apache.camel.spring.Main.main(Main.java:90)

my camel-context

<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-3.0.xsd
       http://camel.apache.org/schema/spring 
       http://camel.apache.org/schema/spring/camel-spring.xsd">

  <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory">
      <bean class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://localhost" />
      </bean>
    </property>
  </bean>

  <bean id="jpa" class="org.apache.camel.component.jpa.JpaComponent">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="transactionManager" ref="springTransactionManager"/>
  </bean>

  <bean id="entityManagerFactory" 
  class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="camel" />
    <property name="jpaVendorAdapter" ref="jpaAdapter" />
  </bean>

  <bean id="jpaAdapter" 
  class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
    <property name="databasePlatform" value="org.apache.openjpa.jdbc.sql.DerbyDictionary" />
    <property name="database" value="DERBY" />
  </bean>

  <bean id="transactionTemplate" 
  class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="springTransactionManager">
      <!--<bean class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
      </bean>-->
    </property>
  </bean>

  <bean id="springTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
  </bean>



  <bean id="downloadLogger" class="camelinaction.dl.DownloadLogger"/>
  <bean id="exchangeLogger" class="camelinaction.dl.ExchangeLogger"/>


  <bean id="startPolicy" class="org.apache.camel.routepolicy.quartz.CronScheduledRoutePolicy">
    <property name="routeStartTime" value="0 0/1 * * * ?"/>
  </bean>

  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <dataFormats>
      <jaxb id="jaxb" contextPath="camelinaction"/>
    </dataFormats>

<route id="getFile" autoStartup="true" startupOrder="1">
  <from uri="file:data/inbox?noop=true"/>
  <process ref="downloadLogger"/>
  <unmarshal ref="jaxb"/>
  <to uri="jms:incomingOrders"/>
  <process ref="exchangeLogger"/>
  <to uri="jpa:camelinaction.PurchaseOrder"/>
</route>
<route id="fromDB" startupOrder="3">
  <from uri="jpa://camelinaction.PurchaseOrder?consumer.namedQuery=honda"/>
  <process ref="exchangeLogger"/>
  <marshal ref="jaxb"/>
  <to uri="file:data/outbox"/>
</route>

  </camelContext>
</beans>

purchaseOrder class

@Entity
@NamedQuery(name = "honda", query = "select o from PurchaseOrder o where o.customer=honda")
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class PurchaseOrder implements Serializable {

  private static final long serialVersionUID = 414632787969243627L;
  @XmlElement
  private String name;
  @XmlElement
  private double amount;
  @XmlElement
  private String customer;

  public PurchaseOrder() {
  }

  public double getAmount() {
      return amount;
  }

  public void setAmount(double amount) {
      this.amount = amount;
  }

  public String getName() {
      return name;
  }

  public void setName(String name) {
      this.name = name;
  }

  public void setCustomer(String customer) {
      this.customer = customer;
  }

  public String getCustomer() {
      return customer;
  }

  @Override
  public String toString() {
    return "Purchase Order Info: \n\tname: "  + name + "\n\tamount: " + amount +
      "\n\tcustomer: " + customer;
  }
}
4

1 回答 1

0

我遇到了这个问题,当我更改 openjpa 依赖项并向 POM 添加一个 maven 构建插件时,它得到了解决。请看下面:

从:

 <dependency>
   <groupId>org.apache.openjpa</groupId>
   <artifactId>openjpa-persistence-jdbc</artifactId>
   <version>1.2.2</version>
 </dependency>

至:

<dependency>
  <groupId>org.apache.openjpa</groupId>
  <artifactId>openjpa</artifactId>
  <version>2.1.0</version>
</dependency>

构建插件

   <plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>openjpa-maven-plugin</artifactId>
     <version>1.2</version>
     <configuration>
        <includes>**/model/*.class</includes>
        <addDefaultConstructor>true</addDefaultConstructor>
        <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
     </configuration>
     <executions>
        <execution>
           <id>enhancer</id>
           <phase>process-classes</phase>
           <goals>
              <goal>enhance</goal>
           </goals>
        </execution>
     </executions>
     <dependencies>
        <dependency>
           <groupId>org.apache.openjpa</groupId>
           <artifactId>openjpa</artifactId>
           <version>2.0.1</version>
        </dependency>
        <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
           <version>1.1.1</version>
        </dependency>
     </dependencies>
  </plugin>
于 2014-11-13T18:20:47.443 回答