ok, I am not even 100% sure this is a GWT issue. The more I mess with it the
more I am convinced that it is somehow gwt related. Anyway I am in the
process of adding memcache to the application I am working on. In hosted
mode it worked exactly as expected. Huge speed improvement, and the
memcached log shows my objects going in and out as expected. The problem is
that when i publish the application to tomcat the cache doesn't work. I can
still add items to the cache, but when i pull items out of the cache I get a
class not found exception.
Initially I thought that the problem may be because the object being cached
lives in the client package. (com.sagus.client.Report) I createdd a shared
package as discribed here
http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/51a8a9bb3f141ab4/c43fcc7dad3f7fde?lnk=gst&q=foo.bar.shared#c43fcc7dad3f7fde
however this didnt' solve the problem. I could still set and get the Report
object in Hosted Mode but in production on tomcat I got the same message.
Here is the stacktrace:
java.lang.ClassNotFoundException: com.sagus.Shared.Report
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
......
Well, clearly it can find com.sagus.Shared.Report because is putting it into
memcache just fine. In a last act of desperation, i exported the contents of
src into a jar file using eclipse export feature, and dumped that into
Tomcat's lib directory. Now I am getting a ClassCastException:
2008-11-22 12:33:57,425 : ERROR :
com.sagus.server.DataCache.getWidget(DataCache.java:27) : get widget 18:
java.lang.ClassCastException: com.sagus.Shared.Report cannot be cast to
com.sagus.Shared.Report
at com.sagus.server.DataCache.getWidget(DataCache.java:25)
at com.sagus.server.SagusDashImpl.getReportById(SagusDashImpl.java:244)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:164)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86)
......
This is the class I am using to do the memcache sets and gets:
package com.sagus.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;
import org.apache.log4j.Logger;
import com.sagus.Shared.Report;
public class DataCache {
private static final Logger logger =
SagusDashImpl.getLogger();
private static String WIDGET_PREFIX = "PROD_WIDGET_";
private static MemcachedClient c = null;
public DataCache() {
try {
c = new MemcachedClient(new InetSocketAddress("localhost",
11211));
} catch (IOException ioe) {
logger.error("init DataCache ", ioe);
}
}
public Report getWidget(int id) {
Report r = null;
try {
r = (Report) c.get(WIDGET_PREFIX + id);
} catch (Exception e) {
logger.error("get widget " + id + ": ", e);
}
return r;
}
public void cacheWidget(Report report) {
try {
c.set(WIDGET_PREFIX + report.getWidgetId(), 360000, report);
} catch (Exception e) {
logger.error("cacheWidget ", e);
}
}
Here is the object being cached, its just a pojo:
package com.sagus.Shared;
import java.util.ArrayList;
import java.util.Date;
import com.google.gwt.user.client.rpc.IsSerializable;
public class Report implements IsSerializable, java.io.Serializable {
....
}
On one hand I wonder if its because it is implementing two different
serializable interfaces, but when i build this same object from the database
it works just fine.
At this point I am totally out of ideas. Any pointers would be helpful.
-Jeremiah
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---