プロジェクトで mvn install を使用した後、奇妙な問題が発生しました。
何よりもまず mvn clean を実行し、Eclipse 内でプロジェクトを開始しても問題ありません。
mvn install (アセンブリで jar を生成するにはこのコマンドが必要) を実行してプロジェクトを再起動した後、トランザクションが開かれていないため、休止状態でデータを保存するときに奇妙な例外が発生します。
これの1つ:
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
これは、src/main/resources/META-INF に正しく配置された beans.xml です。
<?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 への接続を失ったことです。