2013年3月1日金曜日

Struts1.3+EJB3.0 の lookup 方式およびパフォーマンス

レガシーStruts(Struts1.3)の Action クラスで EJB3.0 を呼び出す場合、インジェクションができないので lookup で呼び出す必要があります。WebLogic11g の場合ですが、以下のように記述できます。 ■インタフェース @Local @Remote public interface MyBean ■EJB @Stateless(mappedName = "MyBean") public class MyBeanEJB implements MyBean { ■lookup Context ctx = new InitialContext(); MyBean ejb = (MyBean)ctx.lookup("MyBean#" + MyBean.class.getName()); この記述で、一見正常に動作しているように見えましたが、1つ問題が発生しました。負荷テストを実施した際、この EJB の利用部分でものすごくパフォーマンスが悪いことが判明したのです。EJB 自体はStruts と同じサーバ(ローカル)で稼働しているため、普通にローカル呼び出しになっているのですが、その前段階の lookup が異常に遅いことが判明しました(負荷がかかった状態で、10sec...