2011-04-28 47 views
2

我想要做的事情应该是非常直接的,但迄今为止是不可能的。有人能告诉我如何从暴露的RESTeasy接口访问@Local Session Bean吗?我拖网的长度和宽度,我可以找到的所有我能找到的是相同的示例从暴露的RESTeasy接口访问@本地会话Bean

我想了解如何以常规方式使用RESTeasy访问会话bean。这就是事情的样子至今:

使用:

EJB 3

RestEasy的2.1

出版EJB接口:

@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);   

    } 
} 

UNPUBLISHED 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>"; 
     } 
} 

这个例子是展示我的问题的目的,超级简单。预先感谢您的帮助。

回答

1

为:JBoss的5,RestEasy的2.1和EJB 3

好了,所以我终于得到了与RestEasy的EJB的完整的故事。所以在这里,它是:

答:您可以通过给它RestEasy的路径注释和EJB会话bean annotaion了RESTful接口发布一个会话bean。

接口:

@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.因此,使用从已发布的POJO一个@Local会话bean引用或发布EJB不能使用@EJB注释中RestEasy的是出了问题。因此原始帖子中提供的示例无效。

C.要从发布的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> 

您可以使用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的。