类型正确吗,对象没有size()、iterator()方法时会抛出IllegalStateException异常。

解决方案 »

  1.   

    类型肯定正确,不正确的话调用size()方法也不会通过编译啊。错误信息是:
    04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R java.lang.IllegalStateException
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.ejbpersistence.associations.LinkSet.checkValidTx(Unknown Source)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.ejbpersistence.associations.LinkSet.size(Unknown Source)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.gdnt.sc.ejb.session.ScheduleManagementBean.getDataFromPlanner(ScheduleManagementBean.java:142)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.gdnt.sc.ejb.session.EJSLocalStatelessScheduleManagement_754f0fb2.getDataFromPlanner(EJSLocalStatelessScheduleManagement_754f0fb2.java:79)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:41)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at java.lang.reflect.Method.invoke(Method.java:386)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.etools.utc.model.ReflectionMethodModel.invoke(ReflectionMethodModel.java:68)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.etools.utc.servlet.InvokeServlet.invoke(InvokeServlet.java:110)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.etools.utc.servlet.InvokeServlet.doPost(InvokeServlet.java:366)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:983)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:116)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:443)
    [04-11-16 11:24:12:141 CST] 2f473cbc SystemErr     R  at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
      

  2.   

    检查封装Collection时是按照你取数据的方式进行封装了吗?如果Collection中类型正确是不会抛出异常的。可以简单的通过client application来测试。
      

  3.   

    检查封装Collection时是按照你取数据的方式进行封装了吗?如果Collection中类型正确是不会抛出异常的。可以简单的通过client application来测试。
      

  4.   

    看来是和ejb的问题有关,entity bean的find方法返回的collection可能不是简单的LinkedList或ArrayList,你的这个例子使用的是ibm的服务器,可能是ibm实现的Collection类(LinkSet),而在这个类中当调用size或是iterator时好象还要检测事务(checkValidTx),可能是事务方面的问题,不知道,如楼上老兄说的,看看写个简单测试试试,好象在getDataFromPlanner这儿没有得到数据是不是
      

  5.   

    应该不是服务器不允许在web容器中访问ejb容器中的local对象吧,猜的啊!使用session facade试试
      

  6.   

    对一个Collection/Set迭代之后,如果Iterator没有正常的遍历,就进行函数调用,如:it.remove()就会抛出IllegalStateException异常。eg:  public static void testModList(){
        List list=new LinkedList();
        for(int i=0;i<10;i++)
          list.add(i+"");
        Iterator it=list.listIterator();
        while(it.hasNext()){
          it.remove();//will throws IllegalStateException
        }
        System.out.print("list="+list);
      }
    必须改成
      public static void testModList(){
        List list=new LinkedList();
        for(int i=0;i<10;i++)
          list.add(i+"");
        Iterator it=list.listIterator();
        while(it.hasNext()){
          it.next();
          it.remove();
        }
        System.out.print("list="+list);
      }
    你可以检查一下你对iterator遍历的情况
      

  7.   

    是不是迭代器写错了:)
    就象 whyonly(竹迹) 说的一样啊?
      

  8.   

    确实是EJB事务的问题。我原来因某些原因禁用了事务的缘故。thx to all