But the nice thing about Guice/Wicket is that you don't have to concern yourself with the serialization problem. And for my non-page components, injection works perfectly. (This is because Guice injects a *serializable* proxy not an actual instance of the service itself. On detach/serialization, the proxy is serialized and on deserializaiton/rehydration, Guice/Wicket will inject the proxy/service again.)
So, to reiterate, my problem is that all of this works perfectly for me for any non-page components, but when I @Inject on a Page, the service that is injected is not a proxy and therefore not serializable... and therefore I get the serialization exceptions. Technically Guice IS injecting my service at the page level, it's just injecting the instance itself and not wrapping it a proxy, whereas it IS injecting serializable proxies for non-page components. Why? On Thu, Jun 25, 2009 at 2:04 PM, Mauro Ciancio<[email protected]> wrote: > On Wed, Jun 24, 2009 at 1:38 PM, Aaron Dixon <[email protected]> wrote: > >> >> org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException: >> Unable to serialize class: >> com.mycompany.dao.MyDao$$EnhancerByGuice$$3e6e9f94 >> Field hierarchy is: >> 2 [class=com.mycompany.pages.MyPage, path=2] >> private com.mycompany.dao.MyDao >> >> com.mycompany.pages.MyPage.myDao[class=com.mycompany.dao.MyDao$$EnhancerByGuice$$3e6e9f94] >> <----- field that is not serializable >> at >> >> org.apache.wicket.util.io.SerializableChecker.check(SerializableChecker.java:342) >> at >> >> org.apache.wicket.util.io.SerializableChecker.checkFields(SerializableChecker.java:610) >> ... >> ==== >> >> Has anyone else noticed this? >> > > Yes, it happens because the injected class isn't Serializable and when > your page > is serialized the exception is thrown. > You could use for example a > LoadableDetachableModel<http://wicket.apache.org/docs/wicket-1.3.2/wicket/apidocs/org/apache/wicket/model/LoadableDetachableModel.html>to > detach your DAO when > your page is serialized. > Guice also comes with an interface named Provider<T>. This could helps > because it > dont hold a reference to your un-serializable object. > > Example: > > class MyPage extends Page { > LoadableDetachableModel daoModel = new loadable() { > object get() { > return new dao(); > } > }; > > void something() { > mydao = daoModel.getObject(); > //stuff > } > > void ondetach() { > super.ondetach() > daomodel.detach(); > } > } > > HTH > Cheers! > -- > Mauro Ciancio > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
