1

RESTeasy を使用して JBoss 6 Final で RESTful Web サービスを開発しています。外部 EJB があり、EJB を Web サービスに注入したいと考えています。

これは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 は常に null です。

私はこの解決策を試しました:

  • HelloWorldResources に @Stateless を配置しました
  • WEB-INF に beans.xml を作成しました
  • MyRESTApplication を変更しました

    @ApplicationPath("wsapp") public class MyRESTApplication extends Application { }

手伝って頂けますか?

PS: EAR e を持っていません。使用したくありません。

4

1 に答える 1

2

私はこれを解決することができました。まず、RESTeasy に関するすべての設定を web.xml から削除します。必要な注釈は 1 つだけです --> @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 に答える