Java EE教程根本没用。互联网搜索没有给人留下深刻印象。
我有一个EJB模块,它自己部署到glassfish。它有@Local和@Remote注释的iterfaces,它们都是由具体类实现的。
然后我有一个REST资源需要获取对该ejb模块的引用并调用一些方法。
你能给我一个准系统,简单的例子说明如何做到这一点?我的意思是,我甚至无法将SessionContext注入到我的应用程序中,因为它会崩溃...请保持简单。
ejb应该只有:
public String getMsg(){
return "ohai";
}
休息服务:
@GET
@Produces("text/plain")
public String asd(){
return <the myterious ejb that was injected somehow>.getMsg();
}
感谢。
答案 0 :(得分:1)
好吧,我明白了。使用NetBeans,但可能适用于Eclipse。服务器 - glassfish
创建webapp,一个EJB - &gt;从webapp调用EJB。所有这些都在与单独模块相同的服务器内运行。
首先:创建一个EJB模块,它将自行部署:
远程接口:
package main;
import javax.ejb.Remote;
@Remote
public interface YourRemoteInterface{
public String tellMeSomething();
public void otherMethod(); //etc...
}
然后创建EJB实现类:
具体实施
package main;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.EJB; //crucial to JNDI lookup
@Remote(RemoteInterface.class)
@Stateless
@EJB(name="java:global:/MYSTUFF", beanInterface=YourRemoteInterface.class)
public class YourConcreteClass implements YourRemoteInterface{
@Override
public String tellMeSomething(){//...} //and do the other methods
}
@EJB name属性命名你的bean,你将用它来查找它。可以任何名字。例如:&#34; some-name&#34;,或&#34; java:global / YourConcreteClass&#34;
第二部分 - webapp: 对于Web应用程序,我使用了休息服务,但肯定可以是另一个EJB或SE客户端应用程序。对于SE客户端,您需要设置连接信息,但需要设置连接信息。
@Path("/somePath")
public class Service{
@GET
@Produces("text/plain")
public String qwe(){
try{
javax.naming.InitialCOntext ic = new javax.naming.InitialContext();
YourRemoteInterface rb = (YourRemoteInterface)ic.lookup("java:global:/MYSTUFF");
return rb.tellMeSomething();
} catch (Exception ex) {
return "F*uck your life";
}
}
}
现在,从您的网络应用的项目属性,您需要:
1)将ejb jar文件添加到库,以便在“编译”选项卡中显示。我使用了&#34;添加项目&#34;按钮
2)构建 - &gt;打包:将ejb jar文件添加到WAR内容中。我使用&#34;添加文件/文件夹&#34;,我导航到NetBeans项目/ EJB模块/ build / dist
注意:在尝试部署ejb或重新部署时可能会遇到错误。错误名称为: java.lang.RuntimeException:绑定JNDI名称main.RemoteInterface #main.RemoteInterface for EJB RemoteBean 时出错。跳过模糊的解释,为了治愈它,你需要在glassfish中执行一个命令:
asadmin set server.ejb-container.property.disable-nonportable-jndi-names =&#34; true&#34;
现在,您可以编译webapp并进行部署。应该工作。
最后这很简单。我发誓我已经在玻璃鱼教程中吃掉了整个ejb部分,他们没有告诉你这些东西。这太烦人了。