0

在我的项目中使用 mvn install 后,我遇到了一个奇怪的问题。

如果我首先运行 mvn clean,然后在 Eclipse 中启动我的项目,我没有问题。

运行 mvn install (我需要这个命令来生成带有程序集的 jar)并重新启动项目后,由于事务未打开,我在使用休眠状态保存数据时出现奇怪的异常。

其中之一:

 java.lang.RuntimeException: java.lang.IllegalArgumentException: id to load is required for loading
    at com.econorma.ft2500.util.concurrent.UserTransactionRunnable.run(UserTransactionRunnable.java:20)
    at com.econorma.ft2500.util.concurrent.ContextAwareExectuor$CDIRunnable.run(ContextAwareExectuor.java:67)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.IllegalArgumentException: id to load is required for loading
    at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:109)
    at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:79)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2548)
    at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1110)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1068)
    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:606)
    at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
    at org.jboss.weld.proxies.EntityManager$827868750$Proxy$_$$_WeldClientProxy.find(Unknown Source)
    at com.econorma.ft2500.MeasureCache$UpdateLatestMeasure.runInTransaction(MeasureCache.java:136)
    at com.econorma.ft2500.util.concurrent.UserTransactionRunnable.run(UserTransactionRunnable.java:16)
    ... 8 more

这是我的 beans.xml 正确放置在 src/main/resources/META-INF 中:

 <?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
<interceptors>
    <class>com.econorma.ft2500.cdi.SynchronizedInterceptor</class>
    <class>org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor</class>
</interceptors>

事务类:

public abstract class UserTransactionRunnable implements Runnable{

    protected @Inject EntityManager em; 

    @Override
    public void run() {
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        try{
            runInTransaction();
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
            throw new RuntimeException(e);
        }finally{

        }

    }

    protected abstract void runInTransaction();
}

我的考虑是生成 TARGET 文件夹的 mvn install 命令失去了与 beans.xml 的连接。

4

0 回答 0