我想要做的事情应该是非常直接但到目前为止是不可能的。有人能告诉我如何从暴露的RESTeasy界面访问@Local会话Bean吗?我已经浏览了互联网的长度和广度,我所能找到的只是同一个例子的变体
我试图找出如何使用RESTeasy以正常方式访问会话bean。这就是目前的情况:
使用:
EJB 3
RESTeasy 2.1
PUBLISHED EJB INTERFACE:
@Local
@Path("RequestReport")
public interface EReport {
@GET
@Produces({"application/xml"})
@Path("request")
public String requestReport(@QueryParam("reportId") @DefaultValue("") String reportId,
@QueryParam("reportName") @DefaultValue("") String reportName,
@QueryParam("reportType") @DefaultValue("") String reportType);
}
}
BEAN 1:
@Stateless
public class EReportRequest implements EReport {
@EJB
private ReplyStringLocal replyString; // THIS IS WHERE THE PROBLEM LIES.
public String requestReport(@QueryParam("reportId") @DefaultValue("") String reportId,
@QueryParam("reportName") @DefaultValue("") String reportName,
@QueryParam("reportType") @DefaultValue("") String reportType) {
return replyString.getReply(reportId, reportName, reportType);
}
}
未发布的EJB接口:
@Local
public interface ReplyStringLocal {
public String getReply(String reportId, String reportName, String reportType);
}
BEAN 2:
@Stateless
public class ReplyString implements ReplyStringLocal {
public String getReply(String reportId, String reportName, String reportType) {
return "<response><reportId>" + reportId + "</reportId><reportName>" + reportName +
"</reportName><reportType>" + reportType + "</reportType></response>";
}
}
为了演示我的问题,这个例子是超级简化的。提前感谢您的帮助。
答案 0 :(得分:1)
For:JBoss 5,RESTeasy 2.1和EJB 3。
好的,所以我终于得到了有关RESTeasy的EJB的完整故事。所以这就是:
:一种。您可以通过为RESTeasy路径注释和EJB会话bean注释发布具有RESTful接口的会话bean。
INTERFACE:
@Local
@Path("MessageMaker")
public interface MessageMakerLocal {
@GET
@Produces({"application/xml"})
@Path("getMessage")
public String getMessage(@QueryParam("message") @DefaultValue("") String message);
}
实现:
@Stateless
public class MessageMakerImpl implements MessageMakerLocal {
public String getMessage(@QueryParam("message") @DefaultValue("") String message) {
return "Your Message: " + message;
}
}
<强> B中。您不能在RESTeasy中使用@EJB注释,因此使用来自已发布的POJO或已发布的EJB的@Local会话Bean引用是不可能的。因此,原始帖子中提供的示例无效。
<强>℃。要从已发布的POJO或已发布的会话Bean访问会话Bean,您可以使用@Remote接口注释和JAR您的Bean类。在构建EAR文件时,将JAR添加到EAR的根目录,并在META-INF / application.xml文件中添加对它的引用。
INTERFACE:
@Remote
public interface MessageMakerRemote {
public String getMessage(@QueryParam("message") @DefaultValue("") String message);
}
}
实现:
@Stateless
@RemoteBinding(jndiBinding = "MessageMakerRemote")
public class MessageMakerImpl implements MessageMakerRemote {
public String getMessage(String message) {
return "Your Message: " + message;
}
}
在Application.xml中:
<module>
<java>MessageMaker.jar</java>
</module>
然后,您可以使用对jar的JNDI远程调用来引用它:
@Local
@Path("Message")
public class Message {
@GET
@Path("requestMessage")
public String requestMessage(@QueryParam("msg") @DefaultValue("") String msg){
// I use a custom JNDI remote call handler class so my call to the JARed beans looks like this:
return JNDIRemote.getRemote(com.message.ejb3.MessageMakerRemote.class).getMessage(msg);
}
}
我希望RESTeasy的更高版本能够更好地集成EJB。