到目前为止,我听说ejb会话bean不建议使用synchronized。
我有一个问题通过使用synchronized解决了。
我使用的代码已同步。
if(strBatchID != null && strBatchNumber != null){
pinGenerateSessionBeanLocalHome=getPINGenerateSessionBeanLocalHome();
if(pinGenerateSessionBeanLocalHome != null){
IPINGenerateSessionBeanLocal pinGenerateSessionBean = pinGenerateSessionBeanLocalHome.create();
synchronized(pinGenerateSessionBean){
if(pinGenerateSessionBean != null){
resultObject= pinGenerateSessionBean.generatePIN(pinBatchCustomData,iSessionInfo);
if(resultObject.getResponseCode() == PINResponseCode.SUCCESS_RESPONSE_CODE){
pinBatchCustomData= (PINBatchCustomData)resultObject.getResponseObject();
bSuccess = true;
}else{
bSuccess = false;
debugLog(PIN_MODULE_NAME,"Insertions regarding PINs could not be made successfully ");
}
}else{
bSuccess = false;
debugLog(PIN_MODULE_NAME,"PINGenerateSession Local Is Null ");
}
}
}else{
bSuccess = false;
debugLog(PIN_MODULE_NAME,"PINGenerateSession Local Home Is Null ");
}
}
检查我使用synchronized(pinGenerateSessionBean)
同步ping生成会话bean对象的行。
它运行良好。在此之前,当我试图同时生成两个批次时,我遇到了问题。
这会造成什么问题吗?性能对我来说不是问题。
synchronized
关键字。
25.1.2编程限制
本节描述Bean提供者必须遵守的编程限制,以确保企业Bean是可移植的,并且可以部署在任何兼容的EJB 2.1容器中。这些限制适用于业务方法的实现。
[…]
- 企业bean不能使用线程同步原语来同步多个实例的执行
我认为最好使用singleton模式(EJB 3.1中提供了singleton Beans)进行"pin生成"。
您也可以在EJB 2.1中使用这种方法,通过调整EJB容器中相应的池的大小。