Java EE クライアント アプリケーションから EJB3 にアクセスしようとしていますが、ルックアップの失敗しか得られません。クライアント アプリケーションは、Java EE Application Client Container 内で実行されています。
私の Java EE アプリケーション 'CoreServer' は、リモート インターフェイスを持つ多数の Bean を公開しています。同じ Glassfish v3.0.1 にデプロイされた Web アプリケーションから問題なくアクセスできます。
今、クライアントアプリケーションからアクセスしようとしています:
public class Main {
public static void main(String[] args) {
CampaignControllerRemote bean = null;
try {
InitialContext ctx = new InitialContext();
bean = (CampaignControllerRemote) ctx.lookup("java:global/CoreServer/CampaignController");
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (bean != null) {
Campaign campaign = bean.get(361);
if (campaign != null) {
System.out.println("Got "+ campaign);
}
}
}
}
これを Glassfish にデプロイして appclient から実行すると、次のエラーが発生します。
Lookup failed for 'java:global/CoreServer/CampaignController' in SerialContext targetHost=localhost,targetPort=3700,orb'sInitialHost=localhost,orb'sInitialPort=3700
ただし、これは WebApplication から Bean をルックアップするときに使用する JNDI 名とまったく同じです (InitialContext ではなく SessionContext を介して - それは重要ですか?)。また、「CoreServer」をデプロイすると、Glassfish は次のように報告します。
Portable JNDI names for EJB CampaignController : [java:global/CoreServer/CampaignController!mvs.api.CampaignControllerRemote, java:global/CoreServer/CampaignController]
Glassfish-specific (Non-portable) JNDI names for EJB CampaignController : [mvs.api.CampaignControllerRemote, mvs.api.CampaignControllerRemote#mvs.api.CampaignControllerRemote]
4 つの名前すべてを試しましたが、どれも機能しませんでした。appclient はリモート インターフェイス (のみ) を持つ Bean にアクセスできませんか?