Hi David,

Each web application is assigned its own classloader. Because you are
running two different applications that use two different classloaders
that each instantiate a separate version of UselessClass. Only one of
them (the non-GWT one) is updating its version of UselessClass.

I don't know what you are actually trying to do here but you should be
aware that sharing a resource like that between two different web
applications deployed on your server is not straight forward and
unless you know what you are doing you will get unexpected results (as
is the case here). A quick fix that might work is to put UselessClass
in a jar that lives in the app servers global lib directory and remove
it from your applications wars. Even if that did work, it is a dodgy
not-recommended approach.

Application servers have various mechanisms available for this sort of
thing, in JBoss for instance you might use an MBean, or if
UselessClass is just a marker for some substantial resource, you could
consider using a Resource Archive (RAR) for the real thing. I would
consult Jetty docs and forums about this.

regards
gregor



On Jan 2, 3:20 pm, hofmanndavid <[email protected]> wrote:
> I don't even know how to name this discusion,
> I am sorry if my english is not enough to explain this problem
>
> I have a gwt rpc service in one module that just return the size of a
> static final concurrenthashmap for showing it in the webpage.
> I have the same functional thing done in a manual servlet that I've
> configured in jetty.
> And in the console, from the mains end part, a while that also prints
> the value staticmap.keyset.size.
>
> Somehow, the value that the rcp serverside implementation thread can
> see is always zero. Behaves like if a fork have been done and no value
> updates can be seen from the other processes.
>
> Please, just see the code or execute the code I posted, you'll
> immediately see the problem
>
> Please help me to understand this problem, here are links of the
> eclipse project zipped, and the runnable jars that you can try out of
> the box.
>
> Thanks for your help in advance.
>
> --------------------------------
> Tested on jre 1.5u16 and 1.6u10
> 1.5.3 version of GWT
> 6.1.11 version of Jetty
> --------------------------------http://hofmanndavid.googlepages.com/TestProject.zip//
>  Eclipse 3.4
> generated projecthttp://hofmanndavid.googlepages.com/TestModule.war// 
> compiled war of
> the GWT modulehttp://hofmanndavid.googlepages.com/TestProject.jar // 
> runnableJar
> that deploys the war and exposes one sevlet and the other stuff showed
> in MainTest.main(...)
>
> put TestProject.jar and Module.war in the same directory and
> java -jar 
> TestProject.jarhttp://localhost:8081/ServletTest/http://localhost:8081/TestModule/TestModule.html
> -----------------
> Involved clases ...
> -----------------
> public class ServerSideImpl extends RemoteServiceServlet implements
> ServerSide {
>
>    public String getListSize() {
>       System.out.println("from servlet !! problematicMap.keySet().size
> () = "+ UselessClass.problematicMap.keySet().size());
>       return "problematicMap.keySet().size() = "+
> UselessClass.problematicMap.keySet().size();
>    }}
>
> ----------------
> public class ServletTest extends HttpServlet {
>       public ServletTest() {
>          super();
>       }
>       @Override
>       protected void doGet(HttpServletRequest req, HttpServletResponse
> resp) throws ServletException, IOException {
>          resp.setContentType("text/html");
>          resp.setStatus(HttpServletResponse.SC_OK);
>          resp.getWriter().println("<h1>Hello SimpleServlet</h1>");
>          resp.getWriter().println("session="+req.getSession(true).getId
> ());
>          resp.getWriter().println("problematicMap.keySet().size() = "
> + UselessClass.problematicMap.keySet().size());
>       }
>    }
> ---------------
> import java.util.Map;
> import java.util.concurrent.ConcurrentHashMap;
>
> public class UselessClass {
>
>    public static final Map<String, String> problematicMap = new
> ConcurrentHashMap<String, String>();
>
> }
>
> -------------
> public class MainTest {
>
>    public static void main(String[] args) throws Exception {
>
>       new Thread() {
>         �...@override
>          public void run() {
>             while (true) {
>                UselessClass.problematicMap.put(System.currentTimeMillis
> () + "", System.currentTimeMillis() + "");
>
>                try {
>                   Thread.sleep(3000L);
>                } catch (InterruptedException e) {
>                }
>             }
>          }
>       }.start();
>
>       Server server = new Server(8081);
>
>       WebAppContext webapp = new WebAppContext();
>       webapp.setContextPath("/TestModule");
>       webapp.setWar("TestModule.war");
>       server.addHandler(webapp);
>
>       Context context = new Context(Context.SESSIONS);
>       context.setContextPath("/ServletTest");
>       context.addServlet(new ServletHolder(new ServletTest()), "/*");
>       server.addHandler(context);
>
>       server.start();
>
>       while (true) {
>          Thread.sleep(2000L);
>          System.out.println("problematicMap.keySet().size() = " +
> UselessClass.problematicMap.keySet().size());
>       }
>
>    }}
>
> ------------------------
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to