Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Martin Grigorov
On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.orgwrote:

 Hi,

 To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
 introduce ServletContextListener in Wicket.
 In comment
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166I
  described a proposal how we can change web.xml configuration to make it
 working. The proposal is based on a discussion between me and Igor in IRC.

 This is a rather big change and we need more opinions, so please share if
 you have ideas.


By big here I mean conceptually, not code wise. Technically it doesn't
seem to be big or complex.


 --martin-g

 P.S. I'm interested to understand why there is no such problem with Wicket
 1.4?
 I guess sessions in 1.4 are cleared earlier and never persisted between web
 container restarts.

 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/




-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com http://jweekend.com/


Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Igor Vaynberg
i would say that the lack of response shows that people dont care
about a couple more xml lines they have to add to web.xml once and
forget about.

-igor

On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org wrote:
 On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.orgwrote:

 Hi,

 To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
 introduce ServletContextListener in Wicket.
 In comment
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166I
  described a proposal how we can change web.xml configuration to make it
 working. The proposal is based on a discussion between me and Igor in IRC.

 This is a rather big change and we need more opinions, so please share if
 you have ideas.


 By big here I mean conceptually, not code wise. Technically it doesn't
 seem to be big or complex.


 --martin-g

 P.S. I'm interested to understand why there is no such problem with Wicket
 1.4?
 I guess sessions in 1.4 are cleared earlier and never persisted between web
 container restarts.

 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/




 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/



Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread tetsuo
Well, I was trying to understand the problem before posting random thoghts :)

SegFault commented the issue with this question:

  the only problem I see is that there is no one to clean the static
 org.apache.wicket.page.PersistentPageManager.managers = maybe a stupid 
 question,
 but how does this behave in case of many context reloading (for example in 
 developpement
 mode), is this cleaned up by container ? or this will end up with a PermGen 
 space error ?

I think that, unless you hold references to webapp-specific classes in
server-loaded classes' static fields, or leave zombie threads, PermGen
shouldn't occur, and all classes should be gc'ed. Does the page
manager do anything that prevents it to be gc'ed? Does it need any
extra clean-up, besides being unloaded with the webapp classloader?



On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com wrote:
 i would say that the lack of response shows that people dont care
 about a couple more xml lines they have to add to web.xml once and
 forget about.

 -igor

 On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org wrote:
 On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov 
 mgrigo...@apache.orgwrote:

 Hi,

 To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
 introduce ServletContextListener in Wicket.
 In comment
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166I
  described a proposal how we can change web.xml configuration to make it
 working. The proposal is based on a discussion between me and Igor in IRC.

 This is a rather big change and we need more opinions, so please share if
 you have ideas.


 By big here I mean conceptually, not code wise. Technically it doesn't
 seem to be big or complex.


 --martin-g

 P.S. I'm interested to understand why there is no such problem with Wicket
 1.4?
 I guess sessions in 1.4 are cleared earlier and never persisted between web
 container restarts.

 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/




 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/




Re: Removing Pagemap lock post 1.5?

2011-03-18 Thread James Carman
What about AJAX requests coming from multiple places for the same session?

On Fri, Mar 18, 2011 at 11:45 AM, Martijn Dashorst
martijn.dasho...@gmail.com wrote:
 I'm not sure if this is still happening in 1.5, but could it be
 possible to nix the pagemap lock (or severely shorten it to 1-2
 seconds) and abandon request processing at the first possible moment
 when a new request for the pagemap arrives at the server? It's not
 like the browser is expecting an answer for the original request
 AFAIK.

 Expected behavior:
  - request1: starts processing, locks pagemap
  - request2: comes in: tries to acquire lock
  - request2: waits for max N seconds (N being a small number, 1 or 2 seconds)
  - request2: sets kill switch for request1
  - request1: first time in wicket managed code: throws Abort
 exception, does not commit page hierarchy to pagemap
  - request2: starts processing its request

 Probably this will become quite complex and I have my friday afternoon
 goggles on, so just think of this as a thought experiment.

 Homework: think out what happens when request3 joins the party.

 Martijn



Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Martin Grigorov
On Fri, Mar 18, 2011 at 5:04 PM, tetsuo ronald.tet...@gmail.com wrote:

 Well, I was trying to understand the problem before posting random thoghts
 :)

 SegFault commented the issue with this question:

   the only problem I see is that there is no one to clean the static
  org.apache.wicket.page.PersistentPageManager.managers = maybe a stupid
 question,
  but how does this behave in case of many context reloading (for example
 in developpement
  mode), is this cleaned up by container ? or this will end up with a
 PermGen space error ?

 I think that, unless you hold references to webapp-specific classes in
 server-loaded classes' static fields, or leave zombie threads, PermGen
 shouldn't occur, and all classes should be gc'ed. Does the page
 manager do anything that prevents it to be gc'ed? Does it need any
 extra clean-up, besides being unloaded with the webapp classloader?

 The problem is that the web container first destroys WicketFilter and then
goes to serialize/persist the session.
Wicket puts Page instances in the session, but before serialization these
Page instances are transformed to SerializedPage which is a struct of
   int pageId;
   String sessionId;
   byte[] data;  // the page itself

and to be able to transform them Wicket needs the configured IPageManager.
With the destroy of WicketFilter all information is removed (null-ified)
including the PageManager and thus the serialization fails.

With the new ServletContextListener (SCL) we will move the application start
and stop from the Filter to SCL and solve this problem.

Additionally by Servlet specification the container may restart
servlets/filters at any time without completely stopping the application,
i.e. w/o
calling 
javax.servlet.ServletContextListener.contextDestroyed(ServletContextEvent).
So the new way will improve the current behavior.



 On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com
 wrote:
  i would say that the lack of response shows that people dont care
  about a couple more xml lines they have to add to web.xml once and
  forget about.
 
  -igor
 
  On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
  On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:
 
  Hi,
 
  To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
  introduce ServletContextListener in Wicket.
  In comment
 
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
  working. The proposal is based on a discussion between me and Igor in
 IRC.
 
  This is a rather big change and we need more opinions, so please share
 if
  you have ideas.
 
 
  By big here I mean conceptually, not code wise. Technically it doesn't
  seem to be big or complex.
 
 
  --martin-g
 
  P.S. I'm interested to understand why there is no such problem with
 Wicket
  1.4?
  I guess sessions in 1.4 are cleared earlier and never persisted between
 web
  container restarts.
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 
 
 
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 
 




-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com http://jweekend.com/


Re: Removing Pagemap lock post 1.5?

2011-03-18 Thread Martin Grigorov
Can you tell us what is the actual problem ? :-)

Recently I made some brave hacks experimenting with 1.5
PageAccessSynchronizer and I can say that everything is possible but then
Igor reminded me how bad is to remove this synchronization and what bad
things can start to happen.

On Fri, Mar 18, 2011 at 4:45 PM, Martijn Dashorst 
martijn.dasho...@gmail.com wrote:

 I'm not sure if this is still happening in 1.5, but could it be
 possible to nix the pagemap lock (or severely shorten it to 1-2
 seconds) and abandon request processing at the first possible moment
 when a new request for the pagemap arrives at the server? It's not
 like the browser is expecting an answer for the original request
 AFAIK.

 Expected behavior:
  - request1: starts processing, locks pagemap
  - request2: comes in: tries to acquire lock
  - request2: waits for max N seconds (N being a small number, 1 or 2
 seconds)
  - request2: sets kill switch for request1
  - request1: first time in wicket managed code: throws Abort
 exception, does not commit page hierarchy to pagemap
  - request2: starts processing its request

 Probably this will become quite complex and I have my friday afternoon
 goggles on, so just think of this as a thought experiment.

 Homework: think out what happens when request3 joins the party.

 Martijn




-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com http://jweekend.com/


Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Igor Vaynberg
another possible solution is to serialize the page into SerializedPage
before sticking it into session...this may introduce some overhead,
especially for non-clustered apps. however, we can have a special
pagemanager for non-clustered apps that does not change page instances
into SerializedPage...kind of like HttpSessionStore works in 1.4
compared to a store that uses DiskPageStore.

-igor


On Fri, Mar 18, 2011 at 9:35 AM, Martin Grigorov mgrigo...@apache.org wrote:
 On Fri, Mar 18, 2011 at 5:04 PM, tetsuo ronald.tet...@gmail.com wrote:

 Well, I was trying to understand the problem before posting random thoghts
 :)

 SegFault commented the issue with this question:

   the only problem I see is that there is no one to clean the static
  org.apache.wicket.page.PersistentPageManager.managers = maybe a stupid
 question,
  but how does this behave in case of many context reloading (for example
 in developpement
  mode), is this cleaned up by container ? or this will end up with a
 PermGen space error ?

 I think that, unless you hold references to webapp-specific classes in
 server-loaded classes' static fields, or leave zombie threads, PermGen
 shouldn't occur, and all classes should be gc'ed. Does the page
 manager do anything that prevents it to be gc'ed? Does it need any
 extra clean-up, besides being unloaded with the webapp classloader?

 The problem is that the web container first destroys WicketFilter and then
 goes to serialize/persist the session.
 Wicket puts Page instances in the session, but before serialization these
 Page instances are transformed to SerializedPage which is a struct of
   int pageId;
   String sessionId;
   byte[] data;  // the page itself

 and to be able to transform them Wicket needs the configured IPageManager.
 With the destroy of WicketFilter all information is removed (null-ified)
 including the PageManager and thus the serialization fails.

 With the new ServletContextListener (SCL) we will move the application start
 and stop from the Filter to SCL and solve this problem.

 Additionally by Servlet specification the container may restart
 servlets/filters at any time without completely stopping the application,
 i.e. w/o
 calling 
 javax.servlet.ServletContextListener.contextDestroyed(ServletContextEvent).
 So the new way will improve the current behavior.



 On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com
 wrote:
  i would say that the lack of response shows that people dont care
  about a couple more xml lines they have to add to web.xml once and
  forget about.
 
  -igor
 
  On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
  On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:
 
  Hi,
 
  To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
  introduce ServletContextListener in Wicket.
  In comment
 
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
  working. The proposal is based on a discussion between me and Igor in
 IRC.
 
  This is a rather big change and we need more opinions, so please share
 if
  you have ideas.
 
 
  By big here I mean conceptually, not code wise. Technically it doesn't
  seem to be big or complex.
 
 
  --martin-g
 
  P.S. I'm interested to understand why there is no such problem with
 Wicket
  1.4?
  I guess sessions in 1.4 are cleared earlier and never persisted between
 web
  container restarts.
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 
 
 
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 
 




 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/



Re: Removing Pagemap lock post 1.5?

2011-03-18 Thread Johan Compagner
 Expected behavior:
   - request1: starts processing, locks pagemap
   - request2: comes in: tries to acquire lock
   - request2: waits for max N seconds (N being a small number, 1 or 2
 seconds) - request2: sets kill switch for request1
   - request1: first time in wicket managed code: throws Abort
 exception, does not commit page hierarchy to pagemap

this step can be quite complex, because at what stage is that?
Also long request are very likely not touching any wicket code but those are in 
queries and so on 
besides that we must make sure that the object hiearchy and so on is not 
suddenly in a wrong state.

And there are cases that request 1 is still way more important then request 2 
and request 2 may never just kill 1. (Request 2 is just a background polling 
thread of are there any changes)

   - request2: starts processing its request


Re: Removing Pagemap lock post 1.5?

2011-03-18 Thread Martijn Dashorst
On Fri, Mar 18, 2011 at 6:01 PM, Johan Compagner jcompag...@gmail.com wrote:
 besides that we must make sure that the object hiearchy and so on is not 
 suddenly in a wrong state.

That is the idea: the object hierarchy should not be put into the page
store—essentially throwing away any changes made during that partially
processed request.

 And there are cases that request 1 is still way more important then request 2 
 and request 2 may never just kill 1. (Request 2 is just a background polling 
 thread of are there any changes)

Request 2 will only complete when request 1 is finished, so much for
polling :). In most if not all cases where request1 takes longer than
10 seconds, it should be done in a background thread. Unfortunately
JEE does not provide a good way to facilitate that.

A bigger issue is that when request 1 has finished processing the
listener phase, but rendering the response takes too long. What should
happen in that instance?

Martijn


Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Peter Ertl
in general I prefer correctness over convenience ... so if we need a context 
listener to do everything right so should it be (remember having the same kind 
of trouble with jetty)

+0

Am 18.03.2011 um 17:50 schrieb Igor Vaynberg:

 another possible solution is to serialize the page into SerializedPage
 before sticking it into session...this may introduce some overhead,
 especially for non-clustered apps. however, we can have a special
 pagemanager for non-clustered apps that does not change page instances
 into SerializedPage...kind of like HttpSessionStore works in 1.4
 compared to a store that uses DiskPageStore.
 
 -igor
 
 
 On Fri, Mar 18, 2011 at 9:35 AM, Martin Grigorov mgrigo...@apache.org wrote:
 On Fri, Mar 18, 2011 at 5:04 PM, tetsuo ronald.tet...@gmail.com wrote:
 
 Well, I was trying to understand the problem before posting random thoghts
 :)
 
 SegFault commented the issue with this question:
 
  the only problem I see is that there is no one to clean the static
 org.apache.wicket.page.PersistentPageManager.managers = maybe a stupid
 question,
 but how does this behave in case of many context reloading (for example
 in developpement
 mode), is this cleaned up by container ? or this will end up with a
 PermGen space error ?
 
 I think that, unless you hold references to webapp-specific classes in
 server-loaded classes' static fields, or leave zombie threads, PermGen
 shouldn't occur, and all classes should be gc'ed. Does the page
 manager do anything that prevents it to be gc'ed? Does it need any
 extra clean-up, besides being unloaded with the webapp classloader?
 
 The problem is that the web container first destroys WicketFilter and then
 goes to serialize/persist the session.
 Wicket puts Page instances in the session, but before serialization these
 Page instances are transformed to SerializedPage which is a struct of
   int pageId;
   String sessionId;
   byte[] data;  // the page itself
 
 and to be able to transform them Wicket needs the configured IPageManager.
 With the destroy of WicketFilter all information is removed (null-ified)
 including the PageManager and thus the serialization fails.
 
 With the new ServletContextListener (SCL) we will move the application start
 and stop from the Filter to SCL and solve this problem.
 
 Additionally by Servlet specification the container may restart
 servlets/filters at any time without completely stopping the application,
 i.e. w/o
 calling 
 javax.servlet.ServletContextListener.contextDestroyed(ServletContextEvent).
 So the new way will improve the current behavior.
 
 
 
 On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com
 wrote:
 i would say that the lack of response shows that people dont care
 about a couple more xml lines they have to add to web.xml once and
 forget about.
 
 -igor
 
 On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
 On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:
 
 Hi,
 
 To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
 introduce ServletContextListener in Wicket.
 In comment
 
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
 working. The proposal is based on a discussion between me and Igor in
 IRC.
 
 This is a rather big change and we need more opinions, so please share
 if
 you have ideas.
 
 
 By big here I mean conceptually, not code wise. Technically it doesn't
 seem to be big or complex.
 
 
 --martin-g
 
 P.S. I'm interested to understand why there is no such problem with
 Wicket
 1.4?
 I guess sessions in 1.4 are cleared earlier and never persisted between
 web
 container restarts.
 
 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/
 
 
 
 
 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/
 
 
 
 
 
 
 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/
 



Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread tetsuo
Why would it (Igor's proposal) be not correct?


On Fri, Mar 18, 2011 at 2:28 PM, Peter Ertl pe...@gmx.org wrote:
 in general I prefer correctness over convenience ... so if we need a context 
 listener to do everything right so should it be (remember having the same 
 kind of trouble with jetty)

 +0

 Am 18.03.2011 um 17:50 schrieb Igor Vaynberg:

 another possible solution is to serialize the page into SerializedPage
 before sticking it into session...this may introduce some overhead,
 especially for non-clustered apps. however, we can have a special
 pagemanager for non-clustered apps that does not change page instances
 into SerializedPage...kind of like HttpSessionStore works in 1.4
 compared to a store that uses DiskPageStore.

 -igor


 On Fri, Mar 18, 2011 at 9:35 AM, Martin Grigorov mgrigo...@apache.org 
 wrote:
 On Fri, Mar 18, 2011 at 5:04 PM, tetsuo ronald.tet...@gmail.com wrote:

 Well, I was trying to understand the problem before posting random thoghts
 :)

 SegFault commented the issue with this question:

  the only problem I see is that there is no one to clean the static
 org.apache.wicket.page.PersistentPageManager.managers = maybe a stupid
 question,
 but how does this behave in case of many context reloading (for example
 in developpement
 mode), is this cleaned up by container ? or this will end up with a
 PermGen space error ?

 I think that, unless you hold references to webapp-specific classes in
 server-loaded classes' static fields, or leave zombie threads, PermGen
 shouldn't occur, and all classes should be gc'ed. Does the page
 manager do anything that prevents it to be gc'ed? Does it need any
 extra clean-up, besides being unloaded with the webapp classloader?

 The problem is that the web container first destroys WicketFilter and then
 goes to serialize/persist the session.
 Wicket puts Page instances in the session, but before serialization these
 Page instances are transformed to SerializedPage which is a struct of
   int pageId;
   String sessionId;
   byte[] data;  // the page itself

 and to be able to transform them Wicket needs the configured IPageManager.
 With the destroy of WicketFilter all information is removed (null-ified)
 including the PageManager and thus the serialization fails.

 With the new ServletContextListener (SCL) we will move the application start
 and stop from the Filter to SCL and solve this problem.

 Additionally by Servlet specification the container may restart
 servlets/filters at any time without completely stopping the application,
 i.e. w/o
 calling 
 javax.servlet.ServletContextListener.contextDestroyed(ServletContextEvent).
 So the new way will improve the current behavior.



 On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com
 wrote:
 i would say that the lack of response shows that people dont care
 about a couple more xml lines they have to add to web.xml once and
 forget about.

 -igor

 On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
 On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:

 Hi,

 To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
 introduce ServletContextListener in Wicket.
 In comment

 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
 working. The proposal is based on a discussion between me and Igor in
 IRC.

 This is a rather big change and we need more opinions, so please share
 if
 you have ideas.


 By big here I mean conceptually, not code wise. Technically it doesn't
 seem to be big or complex.


 --martin-g

 P.S. I'm interested to understand why there is no such problem with
 Wicket
 1.4?
 I guess sessions in 1.4 are cleared earlier and never persisted between
 web
 container restarts.

 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/




 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/






 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/





Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread James Carman
I don't think he was saying it was incorrect.  He was saying that he's
okay with the added inconvenience if it makes everything work
correctly.

On Fri, Mar 18, 2011 at 1:51 PM, tetsuo ronald.tet...@gmail.com wrote:
 Why would it (Igor's proposal) be not correct?


 On Fri, Mar 18, 2011 at 2:28 PM, Peter Ertl pe...@gmx.org wrote:
 in general I prefer correctness over convenience ... so if we need a context 
 listener to do everything right so should it be (remember having the same 
 kind of trouble with jetty)

 +0

 Am 18.03.2011 um 17:50 schrieb Igor Vaynberg:

 another possible solution is to serialize the page into SerializedPage
 before sticking it into session...this may introduce some overhead,
 especially for non-clustered apps. however, we can have a special
 pagemanager for non-clustered apps that does not change page instances
 into SerializedPage...kind of like HttpSessionStore works in 1.4
 compared to a store that uses DiskPageStore.

 -igor


 On Fri, Mar 18, 2011 at 9:35 AM, Martin Grigorov mgrigo...@apache.org 
 wrote:
 On Fri, Mar 18, 2011 at 5:04 PM, tetsuo ronald.tet...@gmail.com wrote:

 Well, I was trying to understand the problem before posting random thoghts
 :)

 SegFault commented the issue with this question:

  the only problem I see is that there is no one to clean the static
 org.apache.wicket.page.PersistentPageManager.managers = maybe a stupid
 question,
 but how does this behave in case of many context reloading (for example
 in developpement
 mode), is this cleaned up by container ? or this will end up with a
 PermGen space error ?

 I think that, unless you hold references to webapp-specific classes in
 server-loaded classes' static fields, or leave zombie threads, PermGen
 shouldn't occur, and all classes should be gc'ed. Does the page
 manager do anything that prevents it to be gc'ed? Does it need any
 extra clean-up, besides being unloaded with the webapp classloader?

 The problem is that the web container first destroys WicketFilter and then
 goes to serialize/persist the session.
 Wicket puts Page instances in the session, but before serialization these
 Page instances are transformed to SerializedPage which is a struct of
   int pageId;
   String sessionId;
   byte[] data;  // the page itself

 and to be able to transform them Wicket needs the configured IPageManager.
 With the destroy of WicketFilter all information is removed (null-ified)
 including the PageManager and thus the serialization fails.

 With the new ServletContextListener (SCL) we will move the application 
 start
 and stop from the Filter to SCL and solve this problem.

 Additionally by Servlet specification the container may restart
 servlets/filters at any time without completely stopping the application,
 i.e. w/o
 calling 
 javax.servlet.ServletContextListener.contextDestroyed(ServletContextEvent).
 So the new way will improve the current behavior.



 On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com
 wrote:
 i would say that the lack of response shows that people dont care
 about a couple more xml lines they have to add to web.xml once and
 forget about.

 -igor

 On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
 On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:

 Hi,

 To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
 introduce ServletContextListener in Wicket.
 In comment

 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
 working. The proposal is based on a discussion between me and Igor in
 IRC.

 This is a rather big change and we need more opinions, so please share
 if
 you have ideas.


 By big here I mean conceptually, not code wise. Technically it doesn't
 seem to be big or complex.


 --martin-g

 P.S. I'm interested to understand why there is no such problem with
 Wicket
 1.4?
 I guess sessions in 1.4 are cleared earlier and never persisted between
 web
 container restarts.

 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/




 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/






 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/






Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread tetsuo
Thus the +0, not -1. Duh, sorry...


On Fri, Mar 18, 2011 at 3:01 PM, James Carman
ja...@carmanconsulting.com wrote:
 I don't think he was saying it was incorrect.  He was saying that he's
 okay with the added inconvenience if it makes everything work
 correctly.

 On Fri, Mar 18, 2011 at 1:51 PM, tetsuo ronald.tet...@gmail.com wrote:
 Why would it (Igor's proposal) be not correct?


 On Fri, Mar 18, 2011 at 2:28 PM, Peter Ertl pe...@gmx.org wrote:
 in general I prefer correctness over convenience ... so if we need a 
 context listener to do everything right so should it be (remember having 
 the same kind of trouble with jetty)

 +0

 Am 18.03.2011 um 17:50 schrieb Igor Vaynberg:

 another possible solution is to serialize the page into SerializedPage
 before sticking it into session...this may introduce some overhead,
 especially for non-clustered apps. however, we can have a special
 pagemanager for non-clustered apps that does not change page instances
 into SerializedPage...kind of like HttpSessionStore works in 1.4
 compared to a store that uses DiskPageStore.

 -igor


 On Fri, Mar 18, 2011 at 9:35 AM, Martin Grigorov mgrigo...@apache.org 
 wrote:
 On Fri, Mar 18, 2011 at 5:04 PM, tetsuo ronald.tet...@gmail.com wrote:

 Well, I was trying to understand the problem before posting random 
 thoghts
 :)

 SegFault commented the issue with this question:

  the only problem I see is that there is no one to clean the static
 org.apache.wicket.page.PersistentPageManager.managers = maybe a stupid
 question,
 but how does this behave in case of many context reloading (for example
 in developpement
 mode), is this cleaned up by container ? or this will end up with a
 PermGen space error ?

 I think that, unless you hold references to webapp-specific classes in
 server-loaded classes' static fields, or leave zombie threads, PermGen
 shouldn't occur, and all classes should be gc'ed. Does the page
 manager do anything that prevents it to be gc'ed? Does it need any
 extra clean-up, besides being unloaded with the webapp classloader?

 The problem is that the web container first destroys WicketFilter and 
 then
 goes to serialize/persist the session.
 Wicket puts Page instances in the session, but before serialization these
 Page instances are transformed to SerializedPage which is a struct of
   int pageId;
   String sessionId;
   byte[] data;  // the page itself

 and to be able to transform them Wicket needs the configured IPageManager.
 With the destroy of WicketFilter all information is removed (null-ified)
 including the PageManager and thus the serialization fails.

 With the new ServletContextListener (SCL) we will move the application 
 start
 and stop from the Filter to SCL and solve this problem.

 Additionally by Servlet specification the container may restart
 servlets/filters at any time without completely stopping the application,
 i.e. w/o
 calling 
 javax.servlet.ServletContextListener.contextDestroyed(ServletContextEvent).
 So the new way will improve the current behavior.



 On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com
 wrote:
 i would say that the lack of response shows that people dont care
 about a couple more xml lines they have to add to web.xml once and
 forget about.

 -igor

 On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
 On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:

 Hi,

 To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
 introduce ServletContextListener in Wicket.
 In comment

 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
 working. The proposal is based on a discussion between me and Igor in
 IRC.

 This is a rather big change and we need more opinions, so please share
 if
 you have ideas.


 By big here I mean conceptually, not code wise. Technically it 
 doesn't
 seem to be big or complex.


 --martin-g

 P.S. I'm interested to understand why there is no such problem with
 Wicket
 1.4?
 I guess sessions in 1.4 are cleared earlier and never persisted 
 between
 web
 container restarts.

 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/




 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/






 --
 Martin Grigorov
 jWeekend
 Training, Consulting, Development
 http://jWeekend.com http://jweekend.com/







Re: Removing Pagemap lock post 1.5?

2011-03-18 Thread Martin Grigorov
In 1.5 I think it is improved because now the synchronization is on page
instance (version) not on pagemap. So it is more fine grained.

On Fri, Mar 18, 2011 at 6:07 PM, Martijn Dashorst 
martijn.dasho...@gmail.com wrote:

 On Fri, Mar 18, 2011 at 6:01 PM, Johan Compagner jcompag...@gmail.com
 wrote:
  besides that we must make sure that the object hiearchy and so on is not
 suddenly in a wrong state.

 That is the idea: the object hierarchy should not be put into the page
 store—essentially throwing away any changes made during that partially
 processed request.

  And there are cases that request 1 is still way more important then
 request 2 and request 2 may never just kill 1. (Request 2 is just a
 background polling thread of are there any changes)

 Request 2 will only complete when request 1 is finished, so much for
 polling :). In most if not all cases where request1 takes longer than
 10 seconds, it should be done in a background thread. Unfortunately
 JEE does not provide a good way to facilitate that.


Actually it does - Servlet 3's AsyncContext (aka Jetty Continuations) but I
think this way it will be very hard for the application programmer.
Context can switch at any time and someone has to take care to synchronize
access to page/session/application structures.
Currently requests are serialized (executed one after another) and each
request depends on the fact that when has fired the page state was X.
There is even Wicket.ChannelManager in wicket-ajax.js who cares to queue the
requests as they arrived.


 A bigger issue is that when request 1 has finished processing the
 listener phase, but rendering the response takes too long. What should
 happen in that instance?

 How do you imagine to control one thread from another ?
Currently the web container worker thread does the whole processing. To be
able to interrupt the hanging thread we will need to start our own threads
and manage them.


 Martijn




-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com http://jweekend.com/


Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Pedro Santos
PersistentPageManager$SessionEntry is the serializable piece of Wicket
inside the servlet session, IMO it should serialize/deserialize regardless
of the Wicket lifecycle. Can the DefaultPageStore be changed to be a
singleton an not a per application instance?

On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.comwrote:

 i would say that the lack of response shows that people dont care
 about a couple more xml lines they have to add to web.xml once and
 forget about.

 -igor

 On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
  On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:
 
  Hi,
 
  To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
  introduce ServletContextListener in Wicket.
  In comment
 
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
  working. The proposal is based on a discussion between me and Igor in
 IRC.
 
  This is a rather big change and we need more opinions, so please share
 if
  you have ideas.
 
 
  By big here I mean conceptually, not code wise. Technically it doesn't
  seem to be big or complex.
 
 
  --martin-g
 
  P.S. I'm interested to understand why there is no such problem with
 Wicket
  1.4?
  I guess sessions in 1.4 are cleared earlier and never persisted between
 web
  container restarts.
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 
 
 
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 




-- 
Pedro Henrique Oliveira dos Santos


Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Igor Vaynberg
even if it were a singleton, some containers will load spooled
sessions on startup before the filter is initialized, thus even the
singleton would be not yet there.

-igor

On Fri, Mar 18, 2011 at 11:17 AM, Pedro Santos pedros...@gmail.com wrote:
 PersistentPageManager$SessionEntry is the serializable piece of Wicket
 inside the servlet session, IMO it should serialize/deserialize regardless
 of the Wicket lifecycle. Can the DefaultPageStore be changed to be a
 singleton an not a per application instance?

 On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg 
 igor.vaynb...@gmail.comwrote:

 i would say that the lack of response shows that people dont care
 about a couple more xml lines they have to add to web.xml once and
 forget about.

 -igor

 On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 wrote:
  On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov mgrigo...@apache.org
 wrote:
 
  Hi,
 
  To solve https://issues.apache.org/jira/browse/WICKET-3470 we need to
  introduce ServletContextListener in Wicket.
  In comment
 
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribed
  a proposal how we can change web.xml configuration to make it
  working. The proposal is based on a discussion between me and Igor in
 IRC.
 
  This is a rather big change and we need more opinions, so please share
 if
  you have ideas.
 
 
  By big here I mean conceptually, not code wise. Technically it doesn't
  seem to be big or complex.
 
 
  --martin-g
 
  P.S. I'm interested to understand why there is no such problem with
 Wicket
  1.4?
  I guess sessions in 1.4 are cleared earlier and never persisted between
 web
  container restarts.
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 
 
 
 
  --
  Martin Grigorov
  jWeekend
  Training, Consulting, Development
  http://jWeekend.com http://jweekend.com/
 




 --
 Pedro Henrique Oliveira dos Santos



Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Martin Grigorov
Heads down :-)

Together with Pedro we made another brainstorm session in IRC and we
realised how 1.4 works.
I'll write it down here for the generations. If Matej still reads here I'd
love to hear his confirmation.

In short: there is no need to change anything!

In details:
Wicket stores the page instances in the session in
org.apache.wicket.page.PersistentPageManager.SessionEntry object. When the
http session has to be replicated or there are more pages in the memory than
the configured (see
org.apache.wicket.pageStore.DefaultPageStore.SerializedPagesCache.size) then
those pages has to be serialized.

Case 1) Here if there is Application available (worker thread) then a
SerializedPage is created from a Page instance. A SerializedPage is as I
said earlier:
   int pageId;
   String sessionId;
   byte[] data;  // the page itself

pageId and sessionId are used to be able to be able to find later the page
in the IDataStore (e.g. DiskDataStore) and cleaned if the session expires
from this store.

Case 2) There is no Application (WicketFilter#destroy() thread) then the
http session is being serialized by the web container so that after restart
of the application/container the application can reload its sessions. In
this case we don't need the session id for our needs in IDataStore (because
it is not used in this case) and we can serialize just the Page instance
without the two additional slots.

Later when
org.apache.wicket.page.PersistentPageManager.SessionEntry.readObject(ObjectInputStream)
is called we load just Serializable in an List
(org.apache.wicket.page.PersistentPageManager.SessionEntry.afterReadObject).
This Serializable can be either Page or SerializedPage.
Even later when the first
org.apache.wicket.page.PersistentPageManager.SessionEntry.getPage(int) comes
(this is always a worker thread, so there is Application available) the
entries from this List are passed to
org.apache.wicket.pageStore.IPageStore.convertToPage(Object) where they are
potentially converted from SerializedPage to Page.

That's it.
This is how it works in 1.4 too. Just in 1.5 the related classes are either
renamed or completely rewritten.

The fix is removal of two lines. I tested it with Tomcat7 and
wicket-examples - compref - TabbedPanel.
Scenario:
- start the app.
- click randomly on the tabs.
- stop the app
- start the app
- click on any tab

Without the fix I get PageExpiredException at the last step and the reported
exception in the ticket when stopping the app
With the fix there are no exceptions at all and clicking on any tab works
just like there was no restart.

On Fri, Mar 18, 2011 at 7:19 PM, Igor Vaynberg igor.vaynb...@gmail.comwrote:

 even if it were a singleton, some containers will load spooled
 sessions on startup before the filter is initialized, thus even the
 singleton would be not yet there.

 -igor

 On Fri, Mar 18, 2011 at 11:17 AM, Pedro Santos pedros...@gmail.com
 wrote:
  PersistentPageManager$SessionEntry is the serializable piece of Wicket
  inside the servlet session, IMO it should serialize/deserialize
 regardless
  of the Wicket lifecycle. Can the DefaultPageStore be changed to be a
  singleton an not a per application instance?
 
  On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg igor.vaynb...@gmail.com
 wrote:
 
  i would say that the lack of response shows that people dont care
  about a couple more xml lines they have to add to web.xml once and
  forget about.
 
  -igor
 
  On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
  wrote:
   On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov 
 mgrigo...@apache.org
  wrote:
  
   Hi,
  
   To solve https://issues.apache.org/jira/browse/WICKET-3470 we need
 to
   introduce ServletContextListener in Wicket.
   In comment
  
 
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribeda
  proposal how we can change web.xml configuration to make it
   working. The proposal is based on a discussion between me and Igor in
  IRC.
  
   This is a rather big change and we need more opinions, so please
 share
  if
   you have ideas.
  
  
   By big here I mean conceptually, not code wise. Technically it
 doesn't
   seem to be big or complex.
  
  
   --martin-g
  
   P.S. I'm interested to understand why there is no such problem with
  Wicket
   1.4?
   I guess sessions in 1.4 are cleared earlier and never persisted
 between
  web
   container restarts.
  
   --
   Martin Grigorov
   jWeekend
   Training, Consulting, Development
   http://jWeekend.com http://jweekend.com/
  
  
  
  
   --
   Martin Grigorov
   jWeekend
   Training, Consulting, Development
   http://jWeekend.com http://jweekend.com/
  
 
 
 
 
  --
  Pedro Henrique Oliveira dos Santos
 




-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com http://jweekend.com/


Re: HEADS UP: A change in web.xml setup is required

2011-03-18 Thread Martin Grigorov
r1083061

On Fri, Mar 18, 2011 at 9:49 PM, Martin Grigorov mgrigo...@apache.orgwrote:

 Heads down :-)

 Together with Pedro we made another brainstorm session in IRC and we
 realised how 1.4 works.
 I'll write it down here for the generations. If Matej still reads here I'd
 love to hear his confirmation.

 In short: there is no need to change anything!

 In details:
 Wicket stores the page instances in the session in
 org.apache.wicket.page.PersistentPageManager.SessionEntry object. When the
 http session has to be replicated or there are more pages in the memory than
 the configured (see
 org.apache.wicket.pageStore.DefaultPageStore.SerializedPagesCache.size) then
 those pages has to be serialized.

 Case 1) Here if there is Application available (worker thread) then a
 SerializedPage is created from a Page instance. A SerializedPage is as I
 said earlier:
int pageId;
String sessionId;
byte[] data;  // the page itself

 pageId and sessionId are used to be able to be able to find later the page
 in the IDataStore (e.g. DiskDataStore) and cleaned if the session expires
 from this store.

 Case 2) There is no Application (WicketFilter#destroy() thread) then the
 http session is being serialized by the web container so that after restart
 of the application/container the application can reload its sessions. In
 this case we don't need the session id for our needs in IDataStore (because
 it is not used in this case) and we can serialize just the Page instance
 without the two additional slots.

 Later when
 org.apache.wicket.page.PersistentPageManager.SessionEntry.readObject(ObjectInputStream)
 is called we load just Serializable in an List
 (org.apache.wicket.page.PersistentPageManager.SessionEntry.afterReadObject).
 This Serializable can be either Page or SerializedPage.
 Even later when the first
 org.apache.wicket.page.PersistentPageManager.SessionEntry.getPage(int) comes
 (this is always a worker thread, so there is Application available) the
 entries from this List are passed to
 org.apache.wicket.pageStore.IPageStore.convertToPage(Object) where they are
 potentially converted from SerializedPage to Page.

 That's it.
 This is how it works in 1.4 too. Just in 1.5 the related classes are either
 renamed or completely rewritten.

 The fix is removal of two lines. I tested it with Tomcat7 and
 wicket-examples - compref - TabbedPanel.
 Scenario:
 - start the app.
 - click randomly on the tabs.
 - stop the app
 - start the app
 - click on any tab

 Without the fix I get PageExpiredException at the last step and the
 reported exception in the ticket when stopping the app
 With the fix there are no exceptions at all and clicking on any tab works
 just like there was no restart.


 On Fri, Mar 18, 2011 at 7:19 PM, Igor Vaynberg igor.vaynb...@gmail.comwrote:

 even if it were a singleton, some containers will load spooled
 sessions on startup before the filter is initialized, thus even the
 singleton would be not yet there.

 -igor

 On Fri, Mar 18, 2011 at 11:17 AM, Pedro Santos pedros...@gmail.com
 wrote:
  PersistentPageManager$SessionEntry is the serializable piece of Wicket
  inside the servlet session, IMO it should serialize/deserialize
 regardless
  of the Wicket lifecycle. Can the DefaultPageStore be changed to be a
  singleton an not a per application instance?
 
  On Fri, Mar 18, 2011 at 12:42 PM, Igor Vaynberg 
 igor.vaynb...@gmail.comwrote:
 
  i would say that the lack of response shows that people dont care
  about a couple more xml lines they have to add to web.xml once and
  forget about.
 
  -igor
 
  On Fri, Mar 18, 2011 at 7:47 AM, Martin Grigorov mgrigo...@apache.org
 
  wrote:
   On Thu, Mar 17, 2011 at 10:54 PM, Martin Grigorov 
 mgrigo...@apache.org
  wrote:
  
   Hi,
  
   To solve https://issues.apache.org/jira/browse/WICKET-3470 we need
 to
   introduce ServletContextListener in Wicket.
   In comment
  
 
 https://issues.apache.org/jira/browse/WICKET-3470?focusedCommentId=13008166page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13008166Idescribeda
  proposal how we can change web.xml configuration to make it
   working. The proposal is based on a discussion between me and Igor
 in
  IRC.
  
   This is a rather big change and we need more opinions, so please
 share
  if
   you have ideas.
  
  
   By big here I mean conceptually, not code wise. Technically it
 doesn't
   seem to be big or complex.
  
  
   --martin-g
  
   P.S. I'm interested to understand why there is no such problem with
  Wicket
   1.4?
   I guess sessions in 1.4 are cleared earlier and never persisted
 between
  web
   container restarts.
  
   --
   Martin Grigorov
   jWeekend
   Training, Consulting, Development
   http://jWeekend.com http://jweekend.com/
  
  
  
  
   --
   Martin Grigorov
   jWeekend
   Training, Consulting, Development
   http://jWeekend.com http://jweekend.com/
  
 
 
 
 
  --
  Pedro Henrique Oliveira dos Santos
 




 --
 Martin Grigorov
 jWeekend