2012-04-09 82 views
0

**我无法使用EJB3.0和Websphere 6.1创建无状态会话Bean。使用EJB3.0和websphere6.1无状态会话bean的问题

我将所有东西打包到EAR文件中,并将其部署到Websphere上。 。 我想创建一个无状态会话bean,并期待它来实例化会话bean,并调用的ejbCreate()**

Following is my code and xml file. 

package com.aa.otrs.datacollector.reject.ejb; 

import javax.annotation.Resource; 
import javax.ejb.Stateless; 
import javax.ejb.Timeout; 
import javax.ejb.Timer; 
import javax.ejb.TimerService; 
import javax.interceptor.Interceptors; 
import com.aa.otrs.datacollector.logging.DataCollectorLogger; 
import com.aa.otrs.fraudnet.service.FraudNetSoapWrapperService; 
import com.google.inject.Inject; 

@Stateless 
@Interceptors(GuiceInterceptor.class) 
public class RejectServiceBean implements IRejectServiceBean{ 

    @Inject 
    private DataCollectorLogger logger; 
    @SuppressWarnings("unused") 
    @Inject 
      private FraudNetSoapWrapperService fraudnetWebService; 
    @Resource 
    private TimerService timerService; 

    public void ejbCreate() throws javax.ejb.CreateException { 
     logger.debug("On ejbCreate"); 
     logger.debug(“RejectServiceBean "); 

    } 

    public void ejbActivate() { 
     logger.debug("ejbActivate"); 
    } 

} 

This is ibm-ejb-jar-bnd xml file under META-INF folder. 

<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee  http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" 
    version="1.0"> 
    <message-driven name="PnrMessageBean"> 
     <listener-port name="RECLOCATOR.LP" /> 
    </message-driven> 

    <session name="RejectServiceBean"> 
    <interface class="com.aa.otrs.datacollector.reject.ejb.IRejectServiceBean" 
       binding-name="ejblocal:ejb/RejectServiceBean"/> 
    </session> 

</ejb-jar-bnd> 

import javax.ejb.Local; 

@Local 
public interface IRejectServiceBean { 

    void callingInterface(); 
} 

I have tried implementing stateless session with or without interface and xml file. 

import com.google.inject.Inject; 
import javax.annotation.Resource; 
import javax.ejb.Stateless; 
import javax.ejb.TimedObject; 
import javax.ejb.Timeout; 
import javax.ejb.Timer; 
import javax.ejb.TimerService; 
import javax.interceptor.Interceptors; 
import com.aa.otrs.datacollector.logging.DataCollectorLogger; 
import com.aa.otrs.fraudnet.service.FraudNetSoapWrapperService; 


@Stateless 
@Interceptors(GuiceInterceptor.class) 
public class RejectServiceSessionBean { 
    @Inject 
    private DataCollectorLogger logger; 
    @Inject 
    private FraudNetSoapWrapperService fraudnetWebService; 


    public void ejbCreate() throws javax.ejb.CreateException { 
     logger.debug("On ejbCreate"); 
     logger.debug("In RejectServiceSessionBean constructor"); 

    } 
    public void ejbActivate() { 
     logger.debug("ejbActivate"); 
    } 


public class GuiceInterceptor{ 
     private static final Injector injector = Guice.createInjector(new EjbEnvironmentModule()); 

     @PostConstruct 
     @PostActivate 
     public void autowireBean(InvocationContext invocationContext) { 
      Object target = invocationContext.getTarget(); 
      injector.injectMembers(target); 
     } 


    } 

问题:从以上两个代码片断它从不给的ejbCreate或在ejbActivate方法调用。 我已经把日志记录器,以便我可以验证它是否通过这些方法。

回答

0

对于EJB-3.0无状态bean,可以通过使用@PostConstruct & @PreDestroy注释来实现生命周期回调方法。

这些方法必须是公开的,返回void &没有任何参数。