外部@EJB注入使用RESTeasy和JBoss返回null

时间:2013-03-19 11:52:15

标签: jboss ejb resteasy

我正在使用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!

我尝试过这个解决方案:

  • 我已将@Stateless放在HelloWorldResources
  • 我在WEB-INF
  • 中创建了beans.xml
  • 我用

    更改了MyRESTApplication

    @ApplicationPath( “wsapp”) 公共类MyRESTApplication扩展Application { }

你能帮助我吗?

PS:我没有EAR,我不想用它

1 个答案:

答案 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

希望这会有所帮助。