@EJB注入失败,但JNDI查找在Glassfish的Web服务类中有效

时间:2012-02-24 06:20:15

标签: jax-ws jndi glassfish-3 ejb-3.1

我有一个注入@EJB的@WebService类。 EJB打包在.jar文件中,该文件与Web服务类位于同一.war文件中。 @EJB注入总是失败,但我可以在EJB上进行JNDI查找。我已经尝试过制作EJB及其接口@Remote,但这并不重要。注入仍然失败,JNDI查找仍然有效。

我使用的是3.0版web.xml。 ejb.jar文件中没有ejb部署描述符,但在EJB 3.1中并不重要。

我遗漏了一些东西,或者这是Glassfish中的一个错误?

这是我的代码。

EJB类和接口打包在.war文件中的.jar中:

//@Remote
public interface ReportServiceI {

    public String testAlive();
}

@Stateless
//@Remote (ReportServiceI.class)
public class ReportService implements ReportServiceI {...}

Web服务类:

@WebService(
  targetNamespace = "http://www.reps.corp.com/services/reports/ReportService", 
  portName="ReportPort",
  serviceName="ReportService", 
  endpointInterface="com.corp.reps.reports.ws.server.ReportServiceWSI")

public class ReportServiceWS implements ReportServiceWSI {

  public static Logger logger = Logger.getLogger(ReportServiceWS.class);

//  These all fail
//  @EJB
//  @EJB(beanInterface=ReportServiceI.class)
//  @EJB(lookup="java:global/repsreports/ReportService")
  ReportServiceI reportService;

  public String testAlive() {

    //  this works
    try {
      InitialContext context = new InitialContext();
      reportService = (ReportServiceI)context.lookup("java:global/repsreports/ReportService");
    }
    catch (NamingException ex) {
      logger.error(ex);

      return "InitialContext.lookup() failed.";
    }

2 个答案:

答案 0 :(得分:1)

这是bug in Glassfish(显然在Web服务堆栈中)。

答案 1 :(得分:-1)

·彼得,

两者都不。

beans.xml是一个CDI文件,我使用Glassfish作为注入容器。我会尝试制作@WebService bean @stateless - 这是我唯一没有尝试过的东西 - 但这不是必需的。

(此论坛软件不允许我在Piotr的下面添加评论。)