我正在使用RESTeasy在JBoss 6 Final上开发RESTful Web服务。 我有一个外部EJB,我想在Web服务上注入EJB。
这是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();
}
}
MyRESTApplication.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是alwasy null!
我尝试过这个解决方案:
我用
更改了MyRESTApplication@ApplicationPath( “wsapp”) 公共类MyRESTApplication扩展Application { }
你能帮助我吗?
PS:我没有EAR,我不想用它
答案 0 :(得分:1)
我设法解决了这个问题。首先,从web.xml中删除有关RESTeasy的所有设置。您只需要一个注释 - &gt; @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:// localhost:8080 / YOURAPPNAME / api / MyEJB / Fabio
输出:你好,Fabio
希望这会有所帮助。