带有EJB3客户端的Oracle ADF

时间:2012-02-01 08:09:16

标签: client ejb-3.0 jdeveloper oracle-adf

我有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倍

2 个答案:

答案 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。