Ejb 3.0 在缓存空闲超时(以秒为单位的缓存空闲超时)之后,有状态会话Bean未被钝化

Ejb 3.0 在缓存空闲超时(以秒为单位的缓存空闲超时)之后,有状态会话Bean未被钝化,ejb-3.0,java-ee-6,glassfish-3,ejb-3.1,stateful-session-bean,Ejb 3.0,Java Ee 6,Glassfish 3,Ejb 3.1,Stateful Session Bean,我试图理解有状态会话bean的生命周期。当激活和钝化生命周期回调被调用时,我特别感兴趣。我创建了一个演示来理解这个场景。这是我的密码: 我的远程接口是: package com.orbit.stateful; import javax.ejb.Remote; import java.util.List; @Remote public interface ShoppingCart { public void addItem(String itemName); public voi

我试图理解有状态会话bean的生命周期。当激活和钝化生命周期回调被调用时,我特别感兴趣。我创建了一个演示来理解这个场景。这是我的密码:

我的远程接口是:

package com.orbit.stateful;
import javax.ejb.Remote;
import java.util.List;
@Remote
public interface ShoppingCart 
{
    public void addItem(String itemName);
    public void removeItem(String item);
    public List<String> getAllItems();
    public void finishShopping();
}
package com.orbit.stateful;
导入javax.ejb.Remote;
导入java.util.List;
@遥远的
公共界面购物车
{
public void addItem(字符串itemName);
公共无效删除项(字符串项);
公共列表getAllItems();
公共空间完成购物();
}
我的有状态会话bean类如下所示:

package com.orbit.stateful;
import javax.ejb.Stateful;
import javax.ejb.Remove;
import javax.ejb.PrePassivate;
import javax.ejb.PostActivate;
import javax.ejb.StatefulTimeout;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
//import java.util.concurrent.TimeUnit;
import java.util.List;
import java.util.ArrayList;
@Stateful
//@StatefulTimeout(value=5L,unit=TimeUnit.MINUTES)
public class ShoppingCartBean implements ShoppingCart 
{
    private List<String> itemList;
    public ShoppingCartBean(){
        System.out.println("Stateful SessionBean Constructor Called");
    }
    @PostConstruct
    public void intialize(){
        System.out.println("Initializing shopping Cart");
        itemList=new ArrayList<String>();
    }
    public void addItem(String itemName){
        itemList.add(itemName);
    }
    public void removeItem(String item){
        itemList.remove(item);
    }
    public List<String> getAllItems(){
        return itemList;
    }
    @Remove
    public void finishShopping(){
        System.out.println("I am finished with Shopping");
    }
    @PreDestroy
    public void tidyUp(){
        System.out.println("Remove Shopping Bean");
    }
    @PrePassivate
    public void logPassivation(){
        System.out.println("Passivating Now");
    }
    @PostActivate
    public void logActivation(){
        System.out.println("Activating Now");
    }
}
package com.orbit.stateful;
导入javax.ejb.Stateful;
导入javax.ejb.Remove;
导入javax.ejb.PrePassivate;
导入javax.ejb.PostActivate;
导入javax.ejb.StatefulTimeout;
导入javax.annotation.PostConstruct;
导入javax.annotation.PreDestroy;
//导入java.util.concurrent.TimeUnit;
导入java.util.List;
导入java.util.ArrayList;
@有状态
//@StatefulTimeout(值=5L,单位=TimeUnit.MINUTES)
公共类ShoppingCartBean实现ShoppingCart
{
私人清单项目清单;
公共购物cartbean(){
println(“调用的有状态会话bean构造函数”);
}
@施工后
公共无效初始化(){
System.out.println(“初始化购物车”);
itemList=新的ArrayList();
}
public void addItem(字符串itemName){
itemList.add(itemName);
}
public void removietem(字符串项){
项目列表。删除(项目);
}
公共列表getAllItems(){
返回项目列表;
}
@除去
公共空间完成购物(){
System.out.println(“我购物完了”);
}
@发情前期
公共空间tidyUp(){
System.out.println(“删除购物Bean”);
}
@预助产
公共无效日志钝化(){
System.out.println(“立即钝化”);
}
@激活后
公共无效日志激活(){
System.out.println(“立即激活”);
}
}
此bean的独立客户端是:

package com.orbit.stateful;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
import java.util.List;
public class ShoppingCartClient  
{
    public static void main(String[] args) throws Exception
    {

         Properties props = new Properties();
         props.setProperty("java.naming.factory.initial",
                    "com.sun.enterprise.naming.SerialInitContextFactory");
         props.setProperty("java.naming.factory.url.pkgs",
                    "com.sun.enterprise.naming");
         props.setProperty("java.naming.factory.state",
                    "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
          props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
          props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
          Context ctx=new InitialContext(props);
          ShoppingCart sc=(ShoppingCart)ctx.lookup("com.orbit.stateful.ShoppingCart");
          sc.addItem("J2SE");
          //Thread.sleep(17000);
          sc.addItem("J2EE");
          sc.addItem("JDBC");
          List<String> books=sc.getAllItems();
          for (String str: books )
          {
              System.out.println("Books is : "+ str);
          }
          //sc.finishShopping();

    }
}
package com.orbit.stateful;
导入javax.naming.Context;
导入javax.naming.InitialContext;
导入java.util.Properties;
导入java.util.List;
公共类ShoppingCartClient
{
公共静态void main(字符串[]args)引发异常
{
Properties props=新属性();
setProperty(“java.naming.factory.initial”,
“com.sun.enterprise.naming.SerialInitContextFactory”);
setProperty(“java.naming.factory.url.pkgs”,
“com.sun.enterprise.naming”);
setProperty(“java.naming.factory.state”,
“com.sun.corba.ee.impl.presentation.rmi.jndistrateFactoryImpl”);
setProperty(“org.omg.CORBA.ORBInitialHost”、“localhost”);
setProperty(“org.omg.CORBA.ORBInitialPort”,“3700”);
Context ctx=新的初始上下文(props);
ShoppingCart sc=(ShoppingCart)ctx.lookup(“com.orbit.stateful.ShoppingCart”);
sc.addItem(“J2SE”);
//睡眠(17000);
sc.addItem(“J2EE”);
sc.addItem(“JDBC”);
List books=sc.getAllItems();
用于(字符串str:books)
{
System.out.println(“图书为:+str”);
}
//sc.finishShopping();
}
}
现在我在GlassFish 3.1.2中设置了
缓存空闲超时时间
=20
但我的有状态会话bean在20秒后仍然没有钝化。我是做错了什么,还是格拉什菲什的事情发生得不对?请帮助我理解这一点。
提前谢谢