2013-03-19 62 views
1

我正在用RESTeasy在JBoss 6 Final上開發一個RESTful Web服務。 我有一個外部的EJB,我想在Web服務上注入EJB。External @EJB注入RESTeasy和JBoss返回null

這是EJB的代碼

BeanLocalInterface.java

@Local 
public interface BeanLocalInterface { 
    public String sayHello(); 
} 

Bean.java

@Stateless 
@LocalBinding(jndiBinding = "BeanLocal") 
public class Bean implements BeanLocalInterface { 

    @Override 
    public String sayHello() { 
    return "Hello!"; 
    } 
} 

在另一個項目中,我有一個WS:

@Path("/ws") 
public class HelloWorldResource { 

    @EJB(mappedName="BeanLocal") 
    private BeanLocalInterface bean; 

    @GET 
    @Path("/hello") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayHello() {    
     return bean.sayHello(); 
    } 
} 

MyRESTApplicati on.java

public class MyRESTApplication extends Application { 

    private Set<Object> singletons = new HashSet<Object>(); 
    private Set<Class<?>> empty = new HashSet<Class<?>>(); 
    public MyRESTApplication(){ 
     singletons.add(new HelloWorldResource()); 
    } 
    @Override 
    public Set<Class<?>> getClasses() { 
     return empty; 
    } 
    @Override 
    public Set<Object> getSingletons() { 
     return singletons; 
    } 
} 

bean is alwasy null!

我曾嘗試這種解決方案:

  • 我已經把@Stateless上HelloWorldResources
  • 我創建beans.xml的WEB-INF
  • 我有

    變化MyRESTApplication @ ApplicationPath(「wsapp」) public class MyRESTApplication extends Application { }

你能幫我嗎?

PS:我沒有EARË我不想使用它

+0

我試圖達到同樣的目的。如果您找到解決方案,請告訴我。 – 2014-02-16 11:52:09

回答

1

我設法解決這個問題。首先,從web.xml中刪除關於RESTeasy的所有設置。您只需要一個內容 - > @ApplicationPath

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("api") 
public class MyRESTApplication extends Application { 
//nothing required here, leave this empty 

} 

這是您的會話bean接口。

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 


@Path("MyEJB") 
public interface BeanInterface { 

@Path("{username}") 
@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String sayHello(@PathParam("username") String username); 

} 

這是您的會話bean。

import javax.ejb.Stateless; 

@Stateless 
public class EJB implements BeanInterface{ 

@Override 
public String sayHello(String username) { 

    return "Hello, "+username; 
} 

} 

與JBoss 7.1

用法:HTTP://本地主機:8080/YOURAPPNAME/API/MyEJB /法比奧

輸出:您好,法比奧

希望這有助於。

+0

嗨艾德里安,謝謝你的迴應,但沒有解決我的問題。我的CRM有幾個EJB,我想爲iPad應用程序發佈一些Web服務。我決心做一個查詢。 – 2014-02-17 15:16:39

+0

我很高興遇到這個答案。它幫助我讓CDI在RESTeasy服務中工作。你能解釋爲什麼MyRESTApplication課程內容是空的嗎?它確實有效,但爲什麼在這裏添加單例導致CDI失敗? – dave823 2014-03-18 16:32:36