ejb2无状态会话bean中的synchronized块

时间:2012-04-04 07:24:25

标签: java ejb-2.x stateless-session-bean

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

工作正常。在此之前我有问题,当我试图同时生成两个批次。

是否会造成任何问题?对我来说,性能不是问题。

1 个答案:

答案 0 :(得分:1)

EJB 2.1 specification不允许

synchronized关键字。

  

25.1.2编程限制

     

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

     

[...]

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

我认为最好使用{3.1}中提供的singleton patternSingleton Beans)进行“引脚生成”。

您也可以通过调整EJB容器中相应的池来跟踪{2.1}}和EJB 2.1。