繁体   English   中英

用状态豆帮助我

[英]help me in Stateful beans

问题1:按照我学习EJB的书,作者告诉我,每次查找都会创建一个新的有状态会话bean。 因此,我所做的是使用sysout语句定义了带有@PostConstruct批注的init()方法。 因此,需要为每个实例化的有状态bean执行该操作。 但是没有发生同样的事情。 考虑以下代码

在豆

@Stateful
public class PersonnelModelBean implements PersonnelModelRemote{

    @PostConstruct
    void init(){
        System.out.println("STATEFUL BEAN transforming to Mathod Ready state");
    }

}

在客户端

try {
            InitialContext context = InitialContextBuilder.getJBOSSInitialContext();
            PersonnelModelRemote personnelModel = (PersonnelModelRemote)context.lookup("PersonnelModel/remote");
            personnelModel.setPersonKey(new Integer(1));
            personnelModel.setPersonName("Naresh");
            PersonData person = personnelModel.getPerson();
            System.out.println(person);
            personnelModel = (PersonnelModelRemote)context.lookup("PersonnelModel/remote");
            personnelModel.setPersonKey(new Integer(2));
            personnelModel.setPersonName("Pokuri");
            person = personnelModel.getPerson();
            System.out.println(person);
        } catch (NamingException e) {
            e.printStackTrace();
        }

问题2:以同样的方式,作者告诉我们,调用@Remove带注释的方法会从容器中删除与客户端关联的bean。 因此,容器必须在删除bean时调用destroy()(用@PreDestroy注释)方法。 但这没有发生。 考虑以下代码

@Stateful
public class PersonnelModelBean implements PersonnelModelRemote{

@Remove
    public PersonData getPerson() {
        PersonData personData = new PersonData();
        personData.setKey(key);
        personData.setName(name);
        return personData;
    }

    @PreDestroy
    void destroy(){
        System.out.println("STATEFUL BEAN transforming to Does not exist state");
    }
}

问题3:我已将JBOSS的server / default / conf目录的standardjboss.xml设置为60秒。 我已经等了15分钟,在执行客户端代码时,应该按书中所述调用@PostConstruct注释方法。 但这也没有发生。

Q1:这应该工作,具有PostConstruct批注的方法应在任何其他调用到达SFSB之前被调用。 您的客户工作吗? 也许日志消息发送到server.log

Q2:在容器从容器池中删除bean之前,将调用带有remove注释的方法。 它不打算与业务方法一起使用。 检查http://www.java2s.com/Code/Java/EJB3/RemoveAnnotation.htm

Q3:清理可能会延迟,具体取决于$ JBOSS_HOME / server / defalut / conf / standardjboss.xml中的设置。检查本节中的缓存策略设置:

<container-configuration>
      <container-name>Standard Stateful SessionBean</container-name>
      <call-logging>false</call-logging>
... 

也许您可以通过设置容器来强制销毁不需要的豆子(仅用于测试)

<container-pool-conf>
        <MaximumSize>1</MaximumSize>
</container-pool-conf>

并使用第二个客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM