1

In my managedBean if I change my scope from @RequestScoped to @ViewScoped, I am getting the following error stack. How can I resolve this? I could see the results in page when I run my application though.

I am running on glassfish 3 with Mojarra 2.1.3 (FCS b02)

Regards

    WARNING: StandardWrapperValve[Faces Servlet]: 
PWC1406: Servlet.service() for servlet Faces Servlet threw exception
    java.io.NotSerializableException: bean
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
        at java.util.ArrayList.writeObject(ArrayList.java:570)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
        at java.util.HashMap.writeObject(HashMap.java:1001)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1346)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1154)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
        at java.util.HashMap.writeObject(HashMap.java:1001)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
        at com.sun.faces.renderkit.ClientSideStateHelper.doWriteState(ClientSideStateHelper.java:325)
        at com.sun.faces.renderkit.ClientSideStateHelper.writeState(ClientSideStateHelper.java:173)
        at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122)
        at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166)
        at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:662)

Update 1

public class SchedulesBean implements Serializable {

    Logger logger = Logger.getLogger(this.getClass().getName().toString());
    CommonMethods commonMethods = new CommonMethods();
    private ScheduleDAO scheduleDAO = DatabaseConnection
            .getInstance(commonMethods.getDSName()).geScheduleDAO();
    List<Schedule> beanValues = new ArrayList<Schedule>();
    private Schedule schedule;

    private Schedule selectedRow  = new Schedule();

    public SchedulesBean() {

        this.getSchedules();                
    }

    public Schedule getSchedule() {
        return schedule;
    }

    public void setSchedule(Schedule schedule) {
        this.schedule = schedule;
    }

    public void getSchedules() {

        try {
            beanValues = scheduleDAO.loadSchedules();

        } catch (Exception e) {
            // TODO: handle exception
        }

    }

    public void selectedRow(SelectEvent event) {
        selectedRow = (Schedule) event.getObject();
        logger.info("selectedRow "+selectedRow);
    }
Jacob
  • 14,463
  • 65
  • 207
  • 320

2 Answers2

1

You can also try to add "transient" keyword for all non-serializable properties.

transient Logger logger = Logger.getLogger(...

transient private ScheduleDAO scheduleDAO 

Another way to check if the bean is serializable is to apply QA tool against your code like Findbugs (TM), or any home-tools to check this aspect of your code.

Jesse
  • 8,605
  • 7
  • 47
  • 57
1

Let your bean implement the java.io.Serializable interface. The problem gets solved.

rags
  • 2,580
  • 19
  • 37
  • I already have `public class bean implements Serializable {` or am I missing something? – Jacob Mar 01 '12 at 07:53
  • How about Schedule and ScheduleDAO classes. May be these require to implement Serializable according to your usage – rags Mar 01 '12 at 09:23
  • I added in Schedule and ScheduleDAO. Now I am getting this error stack `java.io.NotSerializableException: org.apache.log4j.Logger at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)` So how could I add in external classes – Jacob Mar 01 '12 at 09:48
  • clean and rebuild the project afresh – rags Mar 01 '12 at 09:49
  • I did clean and build the project, but same error `java.io.NotSerializableException: org.apache.log4j.Logger at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)` – Jacob Mar 01 '12 at 09:56
  • 1
    Just make the logger `static`. It's the same for every class instance anyway. – BalusC Mar 01 '12 at 19:43
  • @BalusC Thanks. When I change my scope to Viewscoped why I have to implement Serializable for all my classes? – Jacob Mar 02 '12 at 12:06
  • Because the server is apparently storing sessions on disk instead of in memory. This is a configuration matter. – BalusC Mar 02 '12 at 12:08
  • @BalusC Ok. is it best to use RequestScoped or ViewScoped? Besides I have noticed that when someone post an answer or comment there is no small red mark below StackExchange which used to appear on top of the screen. since yesterday samll red mark is missing! – Jacob Mar 02 '12 at 12:31
  • The best scope depends on the data the bean holds. See also http://stackoverflow.com/questions/7031885/how-to-choose-the-right-bean-scope Session serialization should in no way be taken into account for the choice. – BalusC Mar 02 '12 at 12:36