任务是尝试直接连接到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 更改为指向本地和远程接口,但没有任何乐趣!
任何指针都会非常感激。
答案 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目标。
我正在努力使这个步骤变得不必要。如果我有时间完成它,我会告诉你。