使用Blazeds连接到Glassfish上的EJB

时间:2011-03-30 09:25:31

标签: flex glassfish blazeds

任务是尝试直接连接到Glassfish上部署的无状态EJB。我已经通过Web服务完成了这项工作,我也可以通过调用远程java对象连接到EJB,该对象使用JNDI来查找和加载bean。我不能做的是使用Blazeds直接连接到EJB。我正在使用EBJ3Factory BY Ryan Norris(从adobe网站下载)如下;

我的 WEB-INF / flex / services-config.xml 有;

<factories>
    <factory id="ejb3" class="com.adobe.ac.ejb.EJB3Factory" />
</factories>

我的 WEB-INF / flex / remoting-config.xml 有;

<destination id="MyEJB">
    <properties>
        <factory>ejb3</factory>
        <source>java:global/Together/PSearch!ejb.PSearch</source>  
    </properties>
</destination>

我有一个可以访问bean的简单java类,所以我可以使用Blazeds来调用然后调用bean的类;

public void getBean() {

    PSearch search;

    InitialContext ctx;
    try {
        ctx = new InitialContext();         

        search = (PSearch) ctx.lookup("java:global/Together/PSearch!ejb.PSearch");
        System.out.println("jndi okay");

    } catch (NamingException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
}

glassfish中上下文的 asadmin 命令显示了我;

./asadmin list-jndi-entries --context java:global/Together

PSearch__3_x_Internal_RemoteBusinessHome__: javax.naming.Reference
PSearch!ejb.PSearchRemote: javax.naming.Reference
PSearch!ejb.PSearch: com.sun.ejb.containers.JavaGlobalJndiNamingObjectProxy
PSearch!ejb.PSearchLocal: com.sun.ejb.containers.JavaGlobalJndiNamingObjectProxy

然而,当我使用Eclipse / Flash Builder尝试导入BlazeDS服务时,我得到一个内省错误;

java:global/Together/PSearch/!ejb.PSearch is not available in the specified location

我还尝试将 remoting-config.xml 更改为指向本地远程接口,但没有任何乐趣!

任何指针都会非常感激。

1 个答案:

答案 0 :(得分:0)

您可以执行的一种解决方法是删除工厂XML元素,使用EJB完全限定类名替换源JNDI名称,并使用BlazeDS RTS服务按照您的尝试使用Flash Builder创建服务。

<destination id="MyEJB">
    <properties>            
        <source>packagename.EJBClassName</source>  
    </properties>
</destination>

当您完成Flex项目中的服务客户端,服务和值对象(返回类型等)后,将所有内容恢复原状:

<destination id="MyEJB">
    <properties>
        <factory>ejb3</factory>
        <source>java:global/Together/PSearch!ejb.PSearch</source>  
    </properties>
</destination>

实际上要做的是将EJB 3.x视为内省的正常POJO,以便创建AS3类,并在完成时使用工厂将目标更改为EJB3目标。

我正在努力使这个步骤变得不必要。如果我有时间完成它,我会告诉你。