1

我正在使用 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 始终为空!

我试过这个解决方案:

  • 我已将 @Stateless 放在 HelloWorldResources 上
  • 我在 WEB-INF 中创建 beans.xml
  • 我已经改变了 MyRESTApplication

    @ApplicationPath("wsapp") 公共类 MyRESTApplication 扩展应用程序 { }

你能帮助我吗?

PS:我没有 EAR e 我不想使用它

4

1 回答 1

2

我已经设法解决了这个问题。首先,从 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://localhost:8080 /YOURAPPNAME/api/MyEJB/Fabio

输出:你好,法比奥

希望这可以帮助。

于 2014-02-17T12:10:09.307 回答