ejb2无状态会话bean中的同步块



到目前为止,我听说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对象的行。

它运行良好。在此之前,当我试图同时生成两个批次时,我遇到了问题。

这会造成什么问题吗?性能对我来说不是问题。

EJB 2.1规范不允许使用

synchronized关键字。

25.1.2编程限制

本节描述Bean提供者必须遵守的编程限制,以确保企业Bean是可移植的,并且可以部署在任何兼容的EJB 2.1容器中。这些限制适用于业务方法的实现。

[…]

  • 企业bean不能使用线程同步原语来同步多个实例的执行

我认为最好使用singleton模式(EJB 3.1中提供了singleton Beans)进行"pin生成"。

您也可以在EJB 2.1中使用这种方法,通过调整EJB容器中相应的池的大小。

相关内容

  • 没有找到相关文章

最新更新