I read on the wiki that serializing spring beans is a problem because of injected references. So what I want is something from spring which it probably cannot give me. But I will try to clear this up on the spring forum.
2007/6/7, Igor Vaynberg <[EMAIL PROTECTED]>: > hrm. you say you will have a serialization problem if you lookup the bean > directly and hold on to it. but isnt that exactly what you want? to pull out > a prototype bean and keep it inside the form's scope? the form is in > httpsession and so the bean will be serialized. so if that is what you want > to do you have to make sure the bean is serializable and do the lookup > yourself. > > we can probably add @SpringBean(transient=false) or something like that to > keep the reference instead of discarding it, but that wont solve your > serialization problem, it will just save you doing the lookup yourself. > > so what exactly do you want? > > -igor > > On 6/3/07, Rüdiger Schulz <[EMAIL PROTECTED]> wrote: > > > > I put a breakpoint in the constructor of my Form, which has the > > @SpringBean annotation on ia property named logic. > > > > Before the super() call, logic is null. > > > > After that, it is set to $Proxy39, with a h-attribute to a > > org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler. The target > > property of the handler is null. > > > > After the next line, where I call a method from logic, the target > > property is set to the bean instance. > > > > So it seems that the reference gets lost in the first call. > > > > > > But, as you said that the bean is transient anyway, I think that > > prototype beans could not be used that way for holding state of wicket > > components, because that state should certainly also be kept when > > using the back button. > > > > I'm not sure what is best then. I could get a reference to the spring > > bean directly from ApplicationContext, and just keep it. But then I > > would face the problem of serialization. > > > > The best thing would be IMHO if the proxy could somehow do an > > automatic re-lookup from Spring for prototype beans, so that not a new > > instance is fetched from the container, but the same as before. But I > > don't know enough about Spring to say if that is even possible. > > > > > > > > 2007/6/3, Eelco Hillenius <[EMAIL PROTECTED]>: > > > I'm not that familiar with the code, but the interesting thing is that > > > LazyInitProxyFactory$JdkHandler does cache the bean it located: > > > > > > if (target == null) > > > { > > > target = locator.locateProxyTarget(); > > > } > > > return proxy.invoke(target, args); > > > > > > The target is a transient member of JdkHandler and judging from the > > > code, once the bean is located it should just be reused until the page > > > is serialized/ deserialized (for backbutton support or when > > > clustered). > > > > > > Can you use you debugger to find out what exactly happens? > > > > > > Eelco > > > > > > On 6/1/07, Rüdiger Schulz <[EMAIL PROTECTED]> wrote: > > > > Right, forgot the Stacktraces: > > > > > > > > The first when calling super(): > > > > at KitManagementBean.<init>(KitManagementBean.java:34) > > > > at > sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > > Method) > > > > at sun.reflect.NativeConstructorAccessorImpl.newInstance( > > NativeConstructorAccessorImpl.java:39) > > > > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance( > > DelegatingConstructorAccessorImpl.java:27) > > > > at java.lang.reflect.Constructor.newInstance(Constructor.java > > :513) > > > > at org.springframework.beans.BeanUtils.instantiateClass( > > BeanUtils.java:85) > > > > at > > > org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate > > (SimpleInstantiationStrategy.java:61) > > > > at > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean > > (AbstractAutowireCapableBeanFactory.java:732) > > > > at > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance > > (AbstractAutowireCapableBeanFactory.java:720) > > > > at > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean > > (AbstractAutowireCapableBeanFactory.java:386) > > > > at > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean( > > AbstractBeanFactory.java:270) > > > > at > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean( > > AbstractBeanFactory.java:164) > > > > at > > org.springframework.context.support.AbstractApplicationContext.getBean( > > AbstractApplicationContext.java:707) > > > > at org.apache.wicket.spring.SpringBeanLocator.lookupSpringBean > > (SpringBeanLocator.java:240) > > > > at > > org.apache.wicket.spring.SpringBeanLocator.locateProxyTarget( > > SpringBeanLocator.java:163) > > > > at > > > org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory.testLocator > > (AnnotProxyFieldValueFactory.java:124) > > > > at > > > org.apache.wicket.spring.injection.annot.AnnotProxyFieldValueFactory.getFieldValue > > (AnnotProxyFieldValueFactory.java:99) > > > > at org.apache.wicket.injection.Injector.inject(Injector.java > > :109) > > > > at org.apache.wicket.injection.ConfigurableInjector.inject( > > ConfigurableInjector.java:40) > > > > at > > org.apache.wicket.injection.ComponentInjector.onInstantiation( > > ComponentInjector.java:54) > > > > at > > org.apache.wicket.Application.notifyComponentInstantiationListeners( > > Application.java:916) > > > > at org.apache.wicket.Component.<init>(Component.java:708) > > > > at org.apache.wicket.MarkupContainer.<init>( > > MarkupContainer.java:111) > > > > at org.apache.wicket.markup.html.WebMarkupContainer.<init>( > > WebMarkupContainer.java:39) > > > > at org.apache.wicket.markup.html.form.Form.<init>(Form.java > > :233) > > > > at KitForm.<init>(KitForm.java:50) > > > > at KitEditPage.<init>(KitEditPage.java:45) > > > > > > > > And from the next line, where I call a method on the bean: > > > > > > > > at KitManagementBean.<init>(KitManagementBean.java:34) > > > > at > sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > > Method) > > > > at sun.reflect.NativeConstructorAccessorImpl.newInstance( > > NativeConstructorAccessorImpl.java:39) > > > > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance( > > DelegatingConstructorAccessorImpl.java:27) > > > > at java.lang.reflect.Constructor.newInstance(Constructor.java > > :513) > > > > at org.springframework.beans.BeanUtils.instantiateClass( > > BeanUtils.java:85) > > > > at > > > org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate > > (SimpleInstantiationStrategy.java:61) > > > > at > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean > > (AbstractAutowireCapableBeanFactory.java:732) > > > > at > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance > > (AbstractAutowireCapableBeanFactory.java:720) > > > > at > > > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean > > (AbstractAutowireCapableBeanFactory.java:386) > > > > at > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean( > > AbstractBeanFactory.java:270) > > > > at > > org.springframework.beans.factory.support.AbstractBeanFactory.getBean( > > AbstractBeanFactory.java:164) > > > > at > > org.springframework.context.support.AbstractApplicationContext.getBean( > > AbstractApplicationContext.java:707) > > > > at org.apache.wicket.spring.SpringBeanLocator.lookupSpringBean > > (SpringBeanLocator.java:240) > > > > at > > org.apache.wicket.spring.SpringBeanLocator.locateProxyTarget( > > SpringBeanLocator.java:163) > > > > at > > org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke( > > LazyInitProxyFactory.java:389) > > > > at org.apache.wicket.proxy.$Proxy39.init(Unknown Source) > > > > at KitForm.<init>(KitForm.java:51) > > > > at KitEditPage.<init>(KitEditPage.java:45) > > > > > > > > > > > > 2007/6/1, Rüdiger Schulz <[EMAIL PROTECTED]>: > > > > > Hello everybody, > > > > > > > > > > I already tried to chat on ##wicket about this, but it's probably > > too > > > > > complex for IRC... > > > > > > > > > > I'm using Wicket 1.3.0 snapshot and Spring 2.0 on JDK6 / Jetty. For > > a > > > > > more complex form I wanted to use a "stateful" Springbean, to which > > I > > > > > applied scope="prototype". The idea is to have one bean instance for > > > > > every Form instance. I would access the bean with PropertyModels and > > > > > direct method calls during construction (i.e. setting initial state > > > > > from input parameters) and during events, which would alter the > > state. > > > > > I inject the bean into the Form with @SpringBean annotation. > > > > > > > > > > This works somehow, but sometimes, especially after using the > > > > > backbutton, I had the problem that the internal state was reset. So > > I > > > > > analyzed the stack in the constructor of the bean implementation, > > and > > > > > found out that it was called twice during construction of the Form. > > > > > First, during the super() call, and then again in the next line > > during > > > > > a method call on that bean. I appended both stacktraces below. The > > > > > proxy itself does not change. > > > > > > > > > > This happens again after going back and e.g. submitting again. This > > > > > results in a NPE, because the internal state is reset. > > > > > > > > > > I understand from reading the mailing list that the Wicket-Proxy > > does > > > > > nothing but a lookup in the Application context, and does not know > > or > > > > > care about spring scope. > > > > > > > > > > And here I'm a little stuck. I am already considering to put the > > state > > > > > into the Form, and make the Bean a singleton without any internal > > > > > state. As that would mean some heavy refactoring, I would prefer a > > way > > > > > where the Spring acces would work as I want. Or is this a wrong way > > > > > altogether? > > > > > > > > > > thanks in advance for any comments. > > > > > > > > > > -- > > > > > greetings from Berlin, > > > > > > > > > > Rüdiger Schulz > > > > > > > > > > www.2rue.de > > > > > > > > > > > > > > > > > -- > > > > greetings from Berlin, > > > > > > > > Rüdiger Schulz > > > > > > > > www.2rue.de > > > > > > > > > > ------------------------------------------------------------------------- > > > > This SF.net email is sponsored by DB2 Express > > > > Download DB2 Express C - the FREE version of DB2 express and take > > > > control of your XML. No limits. Just data. Click to get it now. > > > > http://sourceforge.net/powerbar/db2/ > > > > _______________________________________________ > > > > Wicket-user mailing list > > > > Wicket-user@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > > > > ------------------------------------------------------------------------- > > > This SF.net email is sponsored by DB2 Express > > > Download DB2 Express C - the FREE version of DB2 express and take > > > control of your XML. No limits. Just data. Click to get it now. > > > http://sourceforge.net/powerbar/db2/ > > > _______________________________________________ > > > Wicket-user mailing list > > > Wicket-user@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > > > > > > > -- > > greetings from Berlin, > > > > Rüdiger Schulz > > > > www.2rue.de > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by DB2 Express > > Download DB2 Express C - the FREE version of DB2 express and take > > control of your XML. No limits. Just data. Click to get it now. > > http://sourceforge.net/powerbar/db2/ > > _______________________________________________ > > Wicket-user mailing list > > Wicket-user@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/wicket-user > > > -- greetings from Berlin, Rüdiger Schulz www.2rue.de ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user