2011-04-28 40 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的。

相關問題