到目前为止,我听说不建议对ejb会话bean使用synchronized。
我有一个问题,我通过使用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)
来同步pingeneration会话bean对象的行。
工作正常。在此之前我有问题,当我试图同时生成两个批次。
是否会造成任何问题?对我来说,性能不是问题。
答案 0 :(得分:1)
synchronized
关键字。
25.1.2编程限制
本节描述了Bean Provider必须遵循的编程限制,以确保企业bean是可移植的,并且可以部署在任何兼容的EJB 2.1容器中。这些限制适用于业务方法的实现。
[...]
- 企业bean不得使用线程同步原语来同步多个实例的执行。
我认为最好使用{3.1}中提供的singleton pattern(Singleton Beans)进行“引脚生成”。
您也可以通过调整EJB容器中相应的池来跟踪{2.1}}和EJB 2.1。