class constructor is not called after deserialization...
-igor
On Sun, Aug 31, 2008 at 12:31 PM, Sasha Ovsankin
<[EMAIL PROTECTED]> wrote:
>> what happens after your page is serialized and deserialized, then dao > is
>> null...
>
> The dao field is supposed to be initialized again in the class constructor.
>
> Igor Vaynberg wrote:
>>
>> what happens after your page is serialized and deserialized, then dao is
>> null...
>>
>> -igor
>>
>> On Sun, Aug 31, 2008 at 12:09 PM, Sasha Ovsankin
>> <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>> The problem is keeping a reference to the service.
>>>
>>> Right, actually I skipped the "transient" keyword I use in my code:
>>>
>>> class MyPage {
>>> ...
>>> transient MyDAO dao= Locator.find("myDAO", MyDAO.class);
>>> ...
>>> }
>>>
>>> "transient" prevents the field from being serialized.
>>>
>>>>> You might be good
>>>>> enough to understand that, but how good do you trust your co-workers,
>>>>> and even new members joining your team?
>>>
>>> So, I will have to tell them to use the above pattern, just like telling
>>> them to use @SpringBean?
>>>
>>> Regardless, it seems that every engineer working with Wicket have to hit
>>> their "serialization bump" one day, as you hint in your book. We'll find
>>> out
>>> :-)
>>>
>>> Thanks for the book by the way. It made me go much faster.
>>>
>>> Martijn Dashorst wrote:
>>>>
>>>> Did you read http://cwiki.apache.org/WICKET/spring.html and see why
>>>> @SpringBean is important?
>>>>
>>>> The problem is keeping a reference to the service. You might be good
>>>> enough to understand that, but how good do you trust your co-workers,
>>>> and even new members joining your team?
>>>>
>>>> Martijn
>>>>
>>>> On Sun, Aug 31, 2008 at 8:23 PM, Sasha Ovsankin
>>>> <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>> Dear All --
>>>>>
>>>>> I was having an issue with @SpringBean injection -- my dao class was
>>>>> not
>>>>> initialized properly with the dependent beans. I spent some time
>>>>> exploring
>>>>> internals of CGLib and Spring Injections and then a thought struck me:
>>>>> how
>>>>> really helpful is this injection?
>>>>>
>>>>> Consider this code:
>>>>>
>>>>> class MyPage extends Page {
>>>>> ...
>>>>> @SpringBean
>>>>> MyDAO dao;
>>>>> ...
>>>>> }
>>>>>
>>>>> vs. this code:
>>>>>
>>>>> class MyPage {
>>>>> ...
>>>>> MyDAO dao= Locator.find("myDAO", MyDAO.class);
>>>>> ...
>>>>> }
>>>>>
>>>>> The Locator is a pretty straightforward guy who pulls
>>>>> ApplicationContext
>>>>> out of thin air^^^^^ThreadLocal variable and looks up on it, see the
>>>>> example
>>>>> code below.
>>>>>
>>>>> The former uses annotations, CGLIB and delicate injection. The latter
>>>>> uses
>>>>> nothing and is a lot simpler and robust. Aside from marginal savings in
>>>>> typing I couldn't find any advantages of the former approach. Can you?
>>>>>
>>>>> Unless convinced otherwise, I am going to skip the @SpringBean
>>>>> altogether
>>>>> and use the Locator thing in my application.
>>>>>
>>>>> Thanks,
>>>>> -- Sasha
>>>>>
>>>>> -----------------------------------------------------------------------
>>>>> public abstract class Locator {
>>>>>
>>>>> abstract Object find(String name);
>>>>>
>>>>> static Locator locator= null;
>>>>>
>>>>> public static Locator register(Locator inLocator) {
>>>>> Locator result= locator;
>>>>> locator= inLocator;
>>>>> return result;
>>>>> }
>>>>>
>>>>> public static class SpringLocator extends Locator {
>>>>> ApplicationContext context=
>>>>> WebApplicationContextUtils.getRequiredWebApplicationContext(
>>>>> WebApplication.get().getServletContext());
>>>>> Object find(String name) {
>>>>> return context.getBean(name);
>>>>> }
>>>>> }
>>>>>
>>>>> /** To be called in the application initialization */
>>>>> public static void registerSpringLocator() {
>>>>> register(new SpringLocator());
>>>>> }
>>>>>
>>>>> /** Use for unit tests */
>>>>> public static class MockLocator extends Locator {
>>>>> @Override
>>>>> Object find(String name) {
>>>>> // TODO implement
>>>>> return null;
>>>>> }
>>>>> }
>>>>>
>>>>> public static<T> T find(String name, Class<T> clazz) {
>>>>> Object found= locator.find(name);
>>>>> if (found==null)
>>>>> return null;
>>>>> return clazz.cast(found);
>>>>> }
>>>>> }
>>>>> -----------------------------------------------------------------------
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]