somehow you hold reference to:
com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate
in your page. That seems to be not serializeable so i guess that one needs
to be transient
and needs to be re lookuped
johan
On Nov 23, 2007 9:38 PM, V. Jenks <[EMAIL PROTECTED]> wrote:
>
> I'm upgrading from Wicket 1.2.4 to 1.2.6 and there's obviously a change
> I'm
> not able to find concerning the session (or...who knows?)
>
> I've got a simple pair of pages, one for viewing a list of entity beans
> (EJB3) and one for editing a chosen entity from the list page. I'm
> comparing it to dozens of pages I've built like this in the past in
> previous
> versions of Wicket and I just can't figure out why I keep getting this
> exception:
>
> ***********************************************************
> Internal error cloning object. Make sure all dependent objects implement
> Serializable. Class: com.myapp.ui.admin.EditPilot
> wicket.WicketRuntimeException: Internal error cloning object. Make sure
> all
> dependent objects implement Serializable. Class:
> com.myapp.ui.admin.EditPilot
> at
> wicket.protocol.http.HttpSessionStore.setAttribute(HttpSessionStore.java
> :63)
> at wicket.Session.setAttribute(Session.java:952)
> at wicket.PageMap.put(PageMap.java:531)
> at wicket.Session.touch(Session.java:744)
> at wicket.Page.renderPage(Page.java:414)
> at
> wicket.request.target.component.BookmarkablePageRequestTarget.respond(
> BookmarkablePageRequestTarget.java:226)
> at
> wicket.request.compound.DefaultResponseStrategy.respond(
> DefaultResponseStrategy.java:49)
> at
> wicket.request.compound.AbstractCompoundRequestCycleProcessor.respond(
> AbstractCompoundRequestCycleProcessor.java:66)
> at
> wicket.RequestCycle.doProcessEventsAndRespond(RequestCycle.java:902)
> at
> wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:929)
> at wicket.RequestCycle.step(RequestCycle.java:1010)
> at wicket.RequestCycle.steps(RequestCycle.java:1084)
> at wicket.RequestCycle.request(RequestCycle.java:454)
> at wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:219)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:718)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
> at
> org.apache.catalina.core.ApplicationFilterChain.servletService(
> ApplicationFilterChain.java:411)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:317)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:198)
> at
> org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(
> MonitorFilter.java:390)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:230)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:198)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:288)
> at
> org.apache.catalina.core.StandardContextValve.invokeInternal(
> StandardContextValve.java:271)
> at
> org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:202)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :632)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :577)
> at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
> :206)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :632)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :577)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :571)
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:150)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :632)
> at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java
> :577)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :571)
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
> at
> org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
> at
>
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter
> (DefaultProcessorTask.java:637)
> at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(
> DefaultProcessorTask.java:568)
> at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(
> DefaultProcessorTask.java:813)
> at
>
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask
> (DefaultReadTask.java:339)
> at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(
> DefaultReadTask.java:261)
> at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(
> DefaultReadTask.java:212)
> at
> com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(
> PortUnificationPipeline.java:361)
> at
> com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
> at
> com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(
> SSLWorkerThread.java:106)
> Caused by: java.io.NotSerializableException:
> com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
> :1509)
> at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java
> :1392)
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
> :1509)
> at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java
> :1392)
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
> at
> java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
> :1509)
> at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java
> :1392)
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
> at
> java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
> :1509)
> at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java
> :1392)
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
> at
> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
> at
> wicket.protocol.http.HttpSessionStore.setAttribute(HttpSessionStore.java
> :57)
> ... 47 more
> ***********************************************************
>
> Here's the EditPilot class:
>
> ***********************************************************
> public class EditPilot extends PublicPage
> {
> public EditPilot()
> {
> this(null);
> }
>
> public EditPilot(Pilot pilot)
> {
> //add page components
> add(new FeedbackPanel("feedbackPanel"));
>
> //edit or new?
> if (pilot == null) pilot = new Pilot();
>
> //get bean interface
> final PilotLocal bean = BeanLookup.get("PilotBean");
>
> //init form object
> final Form pilotForm = new Form("pilotForm", new
> CompoundPropertyModel(pilot));
>
> //add form components
> pilotForm.add(new TextField("salutation")
> .add(StringValidator.lengthBetween(1, 3)));
> pilotForm.add(new TextField("firstName")
> .setRequired(true)
> .add(StringValidator.lengthBetween(2,
> 50)));
> pilotForm.add(new TextField("lastName")
> .setRequired(true)
> .add(StringValidator.lengthBetween(2,
> 50)));
>
> pilotForm.add(new Button("saveButton")
> {
> public void onSubmit()
> {
> try
> {
> //save form values, redirect
> Pilot pilot =
> (Pilot)pilotForm.getModelObject();
> bean.persist(pilot);
>
> setResponsePage(new ViewPilots());
> }
> catch (Exception exp)
> {
> info(exp.getMessage());
> }
> }
> });
>
> //add cancel button
> pilotForm.add(new Button("cancelButton")
> {
> public void onSubmit()
> {
> setResponsePage(new ViewPilots());
> }
> }.setDefaultFormProcessing(false));
>
> //add form to page
> add(pilotForm);
> }
> }
>
> which inherits this...
>
> public abstract class PublicPage extends BasePage
> {
> public PublicPage()
> {
> }
> }
>
> which inherits this...
>
> public abstract class BasePage extends WebPage
> {
> public BasePage()
> {
> //add page components
> add(new UserHeaderPanel("userHeaderPanel"));
> add(new TabPanel("tabPanel"));
> add(new FooterPanel("footerPanel"));
> }
>
> protected void redirect(String url) //utility method for
> redirecting
> externally
> {
> //disable wicket redirecting
> getRequestCycle().setRedirect(false);
>
> //make sure no output for the current cycle is sent
> getRequestCycle().setRequestTarget(
> EmptyRequestTarget.getInstance());
>
> //set absolute URL to redirect to
> getResponse().redirect(url);
> }
> }
>
> ...and Abraham beget Lot...whom beget......etc.
> ***********************************************************
>
> Here's the BeanLookup class:
>
> ***********************************************************
> public class BeanLookup
> {
> public static <T> T get(String name)
> {
> T bean = null;
>
> try
> {
> InitialContext ctx = new InitialContext();
> bean = (T)ctx.lookup("java:comp/env/" + name);
> }
> catch (NamingException exp)
> {
> }
>
> return bean;
> }
> }
> ***********************************************************
>
> Here's my 'app' class:
>
> ***********************************************************
> public class MyApp extends WebApplication
> {
> @Override
> public Class getHomePage()
> {
> return Index.class;
> }
>
> @Override
> public void init()
> {
> //create external images resource
> getSharedResources().add("imageResource", new
> ImageResource());
> }
>
> /**
> * set custom session class
> */
> @Override
> public ISessionFactory getSessionFactory()
> {
> return new ISessionFactory()
> {
> public Session newSession()
> {
> return new UserSession(MyApp.this);
> }
> };
> }
> }
> ***********************************************************
>
> I've tried implementing Serializable all over the place but it doesn't
> help...and comparing this to apps I've built in the past in previous
> versions of Wicket, this is "correct". I can pull up the ViewPilots page
> just fine but if I even add a reference to the EditPilot page (i.e.
> setResponsePage(new EditPilot())), then that page also throws the same
> exception.
>
> I'm on Ubuntu 7.10 and using Glassfish v2 as the container...but have
> replicated the issue on Winxp and Vista. As you can see from the error,
> everything is being developed in Netbeans.
>
> What's the obvious trivial detail I'm forgetting? :)
>
> Thanks!
> --
> View this message in context:
> http://www.nabble.com/What-exactly-isn%27t-serializable--tf4863669.html#a13918451
> Sent from the Wicket - User mailing list archive at
> Nabble.com<http://nabble.com/>
> .
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>