0

これまでのところ、同期は ejb セッション Bean には推奨されないと聞いています。

同期を使用して解決した問題が 1 つあります。

同期を使用したコード。

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)ピン生成セッション Bean オブジェクトを同期していた行を確認してください。

それは正常に動作します。その前に、2 つのバッチを同時に生成しようとすると問題が発生しました。

問題はありますか?パフォーマンスは私にとって問題ではありません。

4

1 に答える 1

1

synchronizedキーワードは、EJB 2.1 仕様では許可されていません。

25.1.2 プログラミングの制限

このセクションでは、エンタープライズ Bean が移植可能であり、準拠する EJB 2.1 コンテナーにデプロイできることを保証するために、Bean プロバイダーが従わなければならないプログラミング上の制限について説明します。制限は、ビジネス メソッドの実装に適用されます。

[...]

  • エンタープライズ Bean は、複数のインスタンスの実行を同期するためにスレッド同期プリミティブを使用してはなりません。

「ピン生成」にはシングルトン パターン(シングルトン Beanは EJB 3.1 で使用可能)を使用する方がよいと思います。

EJB コンテナ内の対応するプールのサイズを変更することにより、EJB 2.1 でもこのアプローチに従うことができます。

于 2012-04-04T14:18:49.057 に答える