问题1:根据我遵循的书,学习EJB作者告诉每个查找创建一个新的有状态会话bean。所以,我所做的是使用带有sysout语句的@PostConstruct注释定义了一个方法init()。因此,需要为每个实例化的有状态bean执行该操作。但同样的事情并没有发生。请考虑以下代码
在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注释方法。但那也没有发生。
答案 0 :(得分:1)
Q1:这应该有效,应该在任何其他调用到达SFSB之前调用带有PostConstruct注释的方法。您的客户是否有效? 也许日志消息转到server.log
Q2:在容器从容器池中删除bean之前,调用带有remove注释的方法。它不适用于业务方法。 查看http://www.java2s.com/Code/Java/EJB3/RemoveAnnotation.htm
问题3:根据您在$ JBOSS_HOME / server / defalut / conf / standardjboss.xml中的设置,清理可能会延迟 检查本节中的缓存策略设置:
<container-configuration>
<container-name>Standard Stateful SessionBean</container-name>
<call-logging>false</call-logging>
...
也许您可以通过设置
强制容器销毁不需要的bean(仅用于测试)<container-pool-conf>
<MaximumSize>1</MaximumSize>
</container-pool-conf>
并使用第二个客户端。