GWTとSlim3JDOの連携をとりあえず動かしてみたいのでやったんだが

http://groups.google.co.jp/group/slim3-user-japan/browse_thread/thread/24fba8e92bbbd81e

どうやらできるみたいなんで、やってみた。前はどうしてもうまくいかなかったのだけれど、今回はできそうです。前回が再現できないので何でできなかったのかが今のところわからないのが憎いとこ。


で、とりあえず、EclipseGWTプラグインを使ってGWTプロジェクトを作ると、いきなりRemoteServiceServletでサーバサイドと連携するちょっとしたアプリケーションができますね。ちなみにGWT1.7のGAE1.2.2で作成しました。


まずこんな感じでしょ


で、もうすでにこの状態でサンプルアプリケーションができるわけですね。


で、作ったプロジェクトフォルダのweb.xmlを編集する。
じゃなかった、その前に、ここからslim3itプロジェクトをチェックアウトして、そのなかのjarファイルをGWTサンプルアプリにコピーした。具体的に言いますと、

これのlibの中身とwar/WEB-INF/libのなかのslim3-EA1-SNAPSHOT.jarですね。


それでこれらをクラスパスに通す。


web.xmlを編集する。

ちなみにslim3itのweb.xmlはServlet2.5仕様でしたが、とりあえず無視してやってみる。


これで上げてもやっぱりエラーでた。

2009-07-31 08:25:06.680::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2009-07-31 08:25:07.742::INFO:  jetty-6.1.x
2009-07-31 08:25:07.08::WARN:  failed jdoFilter
java.lang.UnsupportedClassVersionError: Bad version number in .class file
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:142)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at org.mortbay.util.Loader.loadClass(Loader.java:91)
	at org.mortbay.util.Loader.loadClass(Loader.java:71)
	at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
	at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:83)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:589)
	at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.jetty.Server.doStart(Server.java:217)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
	at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
	at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
	at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86)
	at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:365)
	at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590)
	at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
	at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)
2009-07-31 08:25:07.08::WARN:  failed com.google.apphosting.utils.jetty.DevAppEngineWebAppContext@120ba9{/,C:\eclipse3.4\workspace3.4\GWTAndSlilm3\war}
java.lang.UnsupportedClassVersionError: Bad version number in .class file
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:142)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at org.mortbay.util.Loader.loadClass(Loader.java:91)
	at org.mortbay.util.Loader.loadClass(Loader.java:71)
	at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
	at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:83)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:589)
	at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.jetty.Server.doStart(Server.java:217)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
	at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
	at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
	at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86)
	at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:365)
	at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590)
	at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
	at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)
2009-07-31 08:25:07.08::WARN:  failed JettyContainerService$ApiProxyHandler@bba415
java.lang.UnsupportedClassVersionError: Bad version number in .class file
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:142)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at org.mortbay.util.Loader.loadClass(Loader.java:91)
	at org.mortbay.util.Loader.loadClass(Loader.java:71)
	at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
	at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:83)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:589)
	at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.jetty.Server.doStart(Server.java:217)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
	at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
	at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
	at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86)
	at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:365)
	at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590)
	at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
	at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)
2009-07-31 08:25:07.08::WARN:  Error starting handlers
java.lang.UnsupportedClassVersionError: Bad version number in .class file
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:142)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
	at org.mortbay.util.Loader.loadClass(Loader.java:91)
	at org.mortbay.util.Loader.loadClass(Loader.java:71)
	at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
	at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:83)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:589)
	at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
	at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
	at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
	at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
	at org.mortbay.jetty.Server.doStart(Server.java:217)
	at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
	at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:152)
	at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:116)
	at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:218)
	at com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:86)
	at com.google.gwt.dev.HostedMode.doStartUpServer(HostedMode.java:365)
	at com.google.gwt.dev.HostedModeBase.startUp(HostedModeBase.java:590)
	at com.google.gwt.dev.HostedModeBase.run(HostedModeBase.java:397)
	at com.google.gwt.dev.HostedMode.main(HostedMode.java:232)
2009-07-31 08:25:07.024::INFO:  Started SelectChannelConnector@0.0.0.0:8080
The server is running at http://localhost:8080/

JDKのバージョンを1.6にしたら、大丈夫になった。GWTってJava1.6いけるんですか?GWT1.7だから?知らない。


それでサンプルアプリのsendボタンを押したら、JDOFilter.doFilter()に入ってきたのは分かったんだけれど、


落ちましたー。

2009-07-31 08:28:30.273::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2009-07-31 08:28:30.382::INFO:  jetty-6.1.x
2009-07-31 08:28:30.648::INFO:  Started SelectChannelConnector@0.0.0.0:8080
The server is running at http://localhost:8080/
2009-07-31 08:30:19.728::WARN:  Error for /gwtandslilm3/greet
java.lang.ExceptionInInitializerError
	at org.slim3.jdo.JDOFilter.doFilter(JDOFilter.java:58)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:124)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:313)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:313)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
Caused by: javax.jdo.JDOFatalUserException: No PersistenceManagerFactory configurable via properties resource "" or no named PMF or persistence unit named "" found.
	at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1096)
	at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:668)
	at org.slim3.jdo.PMF.initialize(PMF.java:43)
	at org.slim3.jdo.PMF.<clinit>(PMF.java:36)
	... 23 more
2009-07-31 08:30:19.743::WARN:  Nested in java.lang.ExceptionInInitializerError:
javax.jdo.JDOFatalUserException: No PersistenceManagerFactory configurable via properties resource "" or no named PMF or persistence unit named "" found.
	at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1096)
	at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:668)
	at org.slim3.jdo.PMF.initialize(PMF.java:43)
	at org.slim3.jdo.PMF.<clinit>(PMF.java:36)
	at org.slim3.jdo.JDOFilter.doFilter(JDOFilter.java:58)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:124)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:313)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:313)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

JDOHelper.getPersistenceManagerFactory()のあたりですかな。もう少し見てみないと分からない。何も知らない。少しずついきます。


追記:

PersistenceManager pm = CurrentPersistenceManager.get();

で、pmがnullだな。他のFilterとの絡みかな?少しずつ行きます。とりあえず時間がないので、あとでじっくりみてみようと思う俺。