レガシー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...