I reference the bean's interface in order to use it, yes. What's the alternative? Would I instead access everything through a proxy class and store the proxy itself into the WebSession, to retain a reference? As it is, each page in the checkout process changes the Stateful bean's properties and stores it back into the WebSession. Here is what the Cart page looks like, in summary:
public class Cart extends BasePage { public Cart() { //get session - derives from Wicket's WebSession UserSession session = (UserSession)getSession(); //get cart from session final ShoppingCartLocal cart = ((UserSession)getSession()).getCart(); //create form Form form = new Form("cartForm"); //add list of non-bundle Configuration objects to form form.add(new ListView("orderLinesView", cart.getOrderLines()) { protected void populateItem(ListItem item) { //stuff happens here... } } //...and so on...and so forth... } } On Thu, Nov 19, 2009 at 10:07 AM, Igor Vaynberg <igor.vaynb...@gmail.com>wrote: > according to the stacktrace, this component: > > path=3:cartForm:orderLinesView] > > has this reference: final com.myapp.session.ShoppingCartLocal > > so looks like you are holding on to your bean directly instead of using a > proxy. > > -igor > > On Thu, Nov 19, 2009 at 8:48 AM, VGJ <zambi...@gmail.com> wrote: > > One would think...however I tried it and it makes no difference. None of > my > > proxy classes implement Serializable and this exception occurs nowhere > else, > > also. > > > > Just to be certain, I just went through and implemented it on *all* of my > > proxy classes in this app. No change. > > > > > > On Thu, Nov 19, 2009 at 9:30 AM, Igor Vaynberg <igor.vaynb...@gmail.com > >wrote: > > > >> your CartProxy does not implement serialiazable so it cannot be > >> serialized... > >> > >> -igor > >> > >> On Thu, Nov 19, 2009 at 7:30 AM, VGJ <zambi...@gmail.com> wrote: > >> > I'm not injecting it directly. I'm using a "proxy" class to get a > >> reference > >> > to the stateless bean's interface like so: > >> > > >> > public class CartProxy > >> > { > >> > private static ShoppingCartLocal lookupCartInterface() > >> > { > >> > ShoppingCartLocal cart = null; > >> > > >> > try > >> > { > >> > InitialContext ctx = new InitialContext(); > >> > cart = > >> > (ShoppingCartLocal)ctx.lookup("java:comp/env/ShoppingCartBean"); > >> > } > >> > catch (NamingException exp) > >> > { > >> > LogProxy.saveEntry(exp); > >> > } > >> > > >> > return cart; > >> > } > >> > } > >> > > >> > The reference in web.xml makes this possible: > >> > > >> > <ejb-local-ref> > >> > <ejb-ref-name>ShoppingCartBean</ejb-ref-name> > >> > <ejb-ref-type>Session</ejb-ref-type> > >> > <local>com.myapp.session.ShoppingCartLocal</local> > >> > <ejb-link>MyProjectEJB.jar#ShoppingCartBean</ejb-link> > >> > </ejb-local-ref> > >> > > >> > Is this not supposed to work? It's been in production for over 3 > >> yrs...so I > >> > hope it does! :) > >> > > >> > The entire app is built this way and this one page is the only one > >> throwing > >> > this exception. It works, it doesn't stop the show or affect anything > >> > negatively, so far as I can tell. I would just like to get rid of it > and > >> > figure out what it is. > >> > > >> > Thanks again, > >> > > >> > -v > >> > > >> > On Wed, Nov 18, 2009 at 11:49 PM, Igor Vaynberg < > igor.vaynb...@gmail.com > >> >wrote: > >> > > >> >> wicket stuff contains a wicket-jee module which supports injecting > ejb > >> >> beans into wicket components the same way that wicket-spring injects > >> >> wicket beans. > >> >> > >> >> -igor > >> >> > >> >> On Wed, Nov 18, 2009 at 10:37 PM, Pieter Degraeuwe > >> >> <pieter.degrae...@systemworks.be> wrote: > >> >> > Your cart has a reference to the sessionBean ShopingCart. This is > not > >> >> > allowed, however. The IOC incjectionsupport makes this possible by > >> >> wrapping > >> >> > this EJB reference with a serializable proxy. > >> >> > > >> >> > I only have expecience with wicket-spring end it works great. (In > your > >> >> case, > >> >> > define your ejb reference in spring and inject it via wicket-spring > >> >> support > >> >> > in your page. > >> >> > problem solved! > >> >> > > >> >> > Pieter > >> >> > > >> >> > On Wed, Nov 18, 2009 at 10:50 PM, VGJ <zambi...@gmail.com> wrote: > >> >> > > >> >> >> I'm completely at wits end here and I hope someone can point out > >> what's > >> >> >> wrong. > >> >> >> > >> >> >> I've got an e-commerce application that is simply moving between > two > >> >> pages > >> >> >> using setRedirectPage() when going from a product detail page to > the > >> >> >> shopping cart page. There isn't anything remarkable about either > of > >> >> these > >> >> >> two pages, they're basically like any other in the app. However, > >> when > >> >> the > >> >> >> cart page loads, I get the exception at the bottom of this > message. > >> >> >> > >> >> >> I've tried implementing Serializable on the Cart() page class but > it > >> >> makes > >> >> >> no difference. It points out > >> >> >> "com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate" > as > >> the > >> >> >> culprit. I use a stateful session bean (ShoppingCart) which is > >> passed > >> >> >> around the app as part of the session (custom WebSession-derived > >> class) > >> >> >> > >> >> >> This is the only page this occurs on. There are several other > steps > >> in > >> >> the > >> >> >> cart's checkout process that look exactly like this one and the > >> >> exception > >> >> >> doesn't happen on any of the others > >> >> >> > >> >> >> Any ideas? > >> >> >> > >> >> >> Exception: > >> >> >> > >> >> >> 25717 [httpSSLWorkerThread-8080-1] ERROR > >> >> >> org.apache.wicket.util.lang.Objects > >> >> >> - Error serializing object class com.myapp.ui.Cart [object=[Page > >> class = > >> >> >> com.myapp.ui.Cart, id = 3, version = 0]] > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException: > >> >> >> Unable to serialize class: > >> >> >> com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate > >> >> >> Field hierarchy is: > >> >> >> 3 [class=com.myapp.ui.Cart, path=3] > >> >> >> private java.lang.Object > >> org.apache.wicket.MarkupContainer.children > >> >> >> [class=[Ljava.lang.Object;] > >> >> >> private > >> >> >> org.apache.wicket.markup.html.ContainerWithAssociatedMarkupHelper > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.markup.html.WebMarkupContainerWithAssociatedMarkup.markupHelper[6] > >> >> >> [class=org.apache.wicket.markup.html.form.Form, path=3:cartForm] > >> >> >> private java.lang.Object > >> >> org.apache.wicket.MarkupContainer.children > >> >> >> [class=[Ljava.lang.Object;] > >> >> >> private java.lang.Object > >> >> >> org.apache.wicket.MarkupContainer.children[0] > >> >> [class=com.myapp.ui.Cart$1, > >> >> >> path=3:cartForm:orderLinesView] > >> >> >> final com.myapp.session.ShoppingCartLocal > >> >> >> com.myapp.ui.Cart$1.val$cart [class=$Proxy92] > >> >> >> protected java.lang.reflect.InvocationHandler > >> >> >> java.lang.reflect.Proxy.h > >> >> >> > >> [class=com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate] > >> >> >> <----- field that is not serializable > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:346) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:392) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:615) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:538) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.SerializableChecker.writeObjectOverride(SerializableChecker.java:684) > >> >> >> at > >> >> >> > java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:322) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.IObjectStreamFactory$DefaultObjectStreamFactory$2.writeObjectOverride(IObjectStreamFactory.java:129) > >> >> >> at > >> >> >> > java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:322) > >> >> >> at > >> >> >> > >> org.apache.wicket.util.lang.Objects.objectToByteArray(Objects.java:1120) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.protocol.http.pagestore.AbstractPageStore.serializePage(AbstractPageStore.java:203) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.protocol.http.pagestore.DiskPageStore.storePage(DiskPageStore.java:840) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.protocol.http.SecondLevelCacheSessionStore$SecondLevelCachePageMap.put(SecondLevelCacheSessionStore.java:332) > >> >> >> at > >> org.apache.wicket.Session.requestDetached(Session.java:1404) > >> >> >> at > >> org.apache.wicket.RequestCycle.detach(RequestCycle.java:1176) > >> >> >> at > >> org.apache.wicket.RequestCycle.steps(RequestCycle.java:1454) > >> >> >> at > >> org.apache.wicket.RequestCycle.request(RequestCycle.java:545) > >> >> >> at > >> >> >> > >> >> > >> > org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:456) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:289) > >> >> >> 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:272) > >> >> >> 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:341) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) > >> >> >> at > >> >> >> > >> >> >> > >> >> > >> > com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) > >> >> >> 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 > >> >> >> > >> >> >> > >> >> > >> > org.apache.wicket.util.io.IObjectStreamFactory$DefaultObjectStreamFactory$2.writeObjectOverride(IObjectStreamFactory.java:121) > >> >> >> ... 38 more > >> >> >> > >> >> > > >> >> > > >> >> > > >> >> > -- > >> >> > Pieter Degraeuwe > >> >> > Systemworks bvba > >> >> > Belgiƫlaan 61 > >> >> > 9070 Destelbergen > >> >> > GSM: +32 (0)485/68.60.85 > >> >> > Email: pieter.degrae...@systemworks.be > >> >> > visit us at http://www.systemworks.be > >> >> > > >> >> > >> >> --------------------------------------------------------------------- > >> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> >> For additional commands, e-mail: users-h...@wicket.apache.org > >> >> > >> >> > >> > > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> For additional commands, e-mail: users-h...@wicket.apache.org > >> > >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >