私は、スマック(イベントベースのJavaライブラリ)を介してIQスタンザを処理するアプリケーションを持っています。我々は今、バニラのTomcatからglassfish 3.1に切り替えると、私はejb 3.1に切り替えたいと思う。EJB 3.1トランザクション、EntityManager
@Stateless
public class DispatchIQService {
private static Logger log = Logger.getLogger(DispatchIQService.class);
@PersistenceContext(unitName="hq")
private EntityManager em;
....
public void process(XMPPConnection connection, IQ rawRequest) {
log.debug("Raw Provider IQ: " + rawRequest.toXML());
RawResponse answer = null;
try{
StateWrapper state = new StateWrapper(em, connection, rawRequest);
// parsing raw xml from request
rawRequest.parse();
// processing action
answer = rawRequest.dispatchAction(state);
イベントベースのライブラリのため、私はそれぞれの要求に対して正しいオブジェクトを取得します。 StateWrapperは、メッセージ処理を通じてem、要求、および接続を渡す古い構造体です。私はejbsと依存性注入によってこれをできるだけ早く取り除きたい。
rawRequest.dispatchAction(状態)では、リクエストオブジェクトにコントロールを渡してファサードサービスを検索し、ビジネスロジックから開始します。
@Override
public RawResponse dispatchAction(StateWrapper state) {
ModelFacade modelFacade = Core.lookup(ModelFacade.class);
return modelFacade.listModels(state, childElement.getIds());
}
Core.lookupは、必要なBeanを取得するためにjndiルックアップを作成するだけです。この豆で私はそれらを注入することができます。
私の質問です:これはDispatchIQServiceのemのような同じトランザクションを実行していますか? どうすれば確認できますか?彼らの住所?
よろしく メートル
これは良いアイデアです!私は同じ取引にいると確信していますが、私が正しいかどうか聞いてみたかったのです。 – mkuff
もし私が間違っていないのであれば、EntityManagerプロキシはその永続コンテキストを "トランザクションスレッドコンテキスト"ではなく見ます。 EntityManagerがトランザクションに参加すると、永続コンテキストはdbにフラッシュ(同期)されます。 –
@MikeArgyriou「永続性コンテキスト」を見るのはどういう意味ですか?私の経験では、これはTransactionSynchronizationRegistry(つまり、トランザクションスレッドコンテキスト)を使用することを意味します。また、トランザクションコミットのbeforeCompletionステップまでエンティティマネージャが(明示的に行われない限り)フラッシュされるとは思わない。 –