我有EJB3服务的指针(JNDI),它是在通信通道的另一端创建的。或者换句话说,它是在我们的客户应用服务器上创建的。 现在我需要做基于ADF的接口来调用EJB3。 我对接口没有任何问题,但我正在努力解决如何调用EJB3。 我应该在我的支持bean中这样做,就像它是由客户端制作的:
public class SessionEJBClient {
public static void main(String[] args) {
try {
final Context context = getInitialContext();
SessionEJB sessionEJB = (SessionEJB)context.lookup("MyApp-SessionEJB#org.test.SessionEJB");
} catch (CommunicationException ex) {
System.out.println(ex.getClass().getName());
System.out.println(ex.getRootCause().getLocalizedMessage());
System.out.println("\n*** A CommunicationException was raised. This typically\n*** occurs when the target WebLogic server is not running.\n");
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static Context getInitialContext() throws NamingException {
Hashtable env = new Hashtable();
// WebLogic Server 10.x connection details
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://serverhost:serverport");
return new InitialContext(env);
}
}
或者还有其他方法吗?或者换句话说,什么是正确的引用方式并调用远程EJB3?
10倍
答案 0 :(得分:0)
如果您的意思是“并尊重MVC模式”,那么覆盖实体对象并从那里访问EJB似乎是最好的方法。然后构建在它上面的VO可以为您提供“普通”ADF BC层 - 然后您创建一个应用程序模块,它作为数据控件公开,您可以声明性地构建您的页面。但是,ADFBC层可能太厚,无法满足您的需求。
所以......如果你不想使用ADF BC,你可以创建一个无状态会话bean(再次在模型层中)作为围绕EJB的Facade并委托对它的调用。这两种情况的好处是从View层分离业务逻辑(我假设的EJB?),在ADF中,您可以从ADF BC或Session Bean层创建数据控件,并将其用作ADF Faces页面的基础
答案 1 :(得分:0)
ADF可以在POJO或会话EJB之上工作。 因此,您将编写一个调用EJB的Java层 - 然后您将该Java层公开为ADF数据控件,然后您可以拖放您创建ADF UI的方式。 http://blogs.oracle.com/shay/2009/07/java_class_data_control_and_ad.html http://blogs.oracle.com/shay/2009/01/insert_update_for_jpaejb_30_wi.html
或者,如果您更喜欢跳过ADF绑定层,则可以编写将调用EJB的托管bean,然后将ADF UI直接绑定到这些bean。