我正在尝试从 Java EE 客户端应用程序访问 EJB3,但除了查找失败之外什么都没有。客户端应用程序在 Java EE 应用程序客户端容器中运行。
我的 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 名称完全相同(通过 SessionContext,而不是 InitialContext - 这有关系吗?)。此外,当我部署“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]
我尝试了所有四个名称,没有一个有效。appclient 是否无法使用(仅)远程接口访问 bean?