![](/img/trans.png)
[英]How to fix concurrent.ExecutionException Caused by: java.lang.UnsupportedOperationException
[英]concurrent.ExecutionException on @service spring bean method
我今年春天有@Service bean:
@Service
public class ParMngImpl implements ParMng {
@Autowired
private ApplicationContext ctx;
@Autowired
private ParDAO pDao;
//@Transactional(readOnly = true)
public /*synchronized*/ Double getDbl(Storable st, String cd, Date genDt) {
Par par = getByCD(cd);
try {
for (Dw d: st.getDw()) {
if (Utl.between(genDt, d.getDt1(), d.getDt2())) {
if (d.getPar().equals(par)) {
if (d.getPar().getTp().equals("NM")) {
if (d.getPar().getDataTp().equals("SI")) {
return d.getN1();
} else {
throw new WrongGetMethod("Wrong type");
}
} else {
throw new WrongGetMethod("Wrong cd");
}
}
}
}
if (!isExByCd(cd)) {
throw new WrongGetMethod("Parameter not exists");
};
} catch (WrongGetMethod e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
...
这个bean是无状态的(没有任何实例字段),它是-单调的。 为什么当我删除“同步”字时,却得到了这个并发异常:
java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at com.ric.bill.ChrgServ.chrgLsk(ChrgServ.java:179)
at com.ric.bill.ChrgServ$$FastClassBySpringCGLIB$$67dcba28.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651)
at com.ric.bill.ChrgServ$$EnhancerBySpringCGLIB$$e923e72.chrgLsk(<generated>)
at com.ric.bill.ChrgServThr.chrgAndSaveLsk(ChrgServThr.java:35)
at com.ric.bill.ChrgServThr$$FastClassBySpringCGLIB$$8f447d36.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:115)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at org.hibernate.engine.internal.StatefulPersistenceContext.getLoadedCollectionOwnerOrNull(StatefulPersistenceContext.java:780)
at org.hibernate.event.spi.AbstractCollectionEvent.getLoadedOwnerOrNull(AbstractCollectionEvent.java:58)
at org.hibernate.event.spi.InitializeCollectionEvent.<init>(InitializeCollectionEvent.java:22)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2002)
at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:562)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:246)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:558)
at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:131)
at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:277)
at com.ric.bill.mm.impl.ParMngImpl.getDbl(ParMngImpl.java:65)
at com.ric.bill.mm.impl.ParMngImpl$$FastClassBySpringCGLIB$$e246ae1d.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
另外,“ @ Transactional(readOnly = true)”也无法帮助我解决此问题。
我必须说,当我使用“同步”时,我的代码运行良好,但是我认为这不是一个好的解决方案。
任何建议将不胜感激。
在这行代码中,我尝试遍历集合getDw():
对于(Dw d:st.getDw()){
这是不正确的,因为此集合无法在线程中初始化。 因此,我的解决方案是在调用此方法之前,对传递的实体执行st.size()以初始化集合。
它完全解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.