[mayaa-user:843] Guice2.0 AOPとの連携
Susumu ISHIGAMI
[E-MAIL ADDRESS DELETED]
2009年 8月 30日 (日) 14:38:42 JST
初めまして。
石上と申します。
Guicw2.0-AOPAllianceにて、アスペクトをインスペクトしたJavaBeanを、
Mayaaで扱おうとしたところ、下記のエラーが発生してしまいました。
※長いですので、一番下に書きます。
Mayaa自体の問題ではなく、Rhinoの問題ではないかと
思っているのですが、MayaaとGuiceを組み合わせようとすると、
発生する問題ですので、こちらに報告させていただきます。
なにかわかる方がいらっしゃいましたら、よろしくお願いいたします。
以下詳細です。
■構成、
・自社の独自フレームワーク(MVC)
・Guice 2.0
・Eclipse 3.5 付属のCompiler (コンパイルレベルは1.5)
・Java 1.5.0_15
・Tomcat 5.5.27
■処理の概要
1.自社フレームワークのコントローラ層(StrutsのActionに相当)にて、
Injector injector = Guice.createInjector(new MyModule());
MyBean bean = injector.getInstance(targetClass);
request.setAttribute("MyBean", bean);
このようにビーンのインスタンスを生成し、リクエストアトリビュートに格納
2.処理結果をMayaaに転送
3.Mayaaにて、
var bean = request['MyBean']
のように、リクエストアトリビュートからbeanを取得
すると直後に以下のようなエラーが発生してしまいます。
■補足情報
インスタンス生成の部分をinjector経由ではなく、通常のコンストラクタで
生成した場合は問題なく動きました。
Mayaaにフォワードする前の段階では、AOPが働いていることがログ出力から確認しました。
■質問者の予想
以下スタックトレースから、
JavaScriptモジュール内部の実装に原因があると思います。
net.sf.retrotranslatorのソースコードも読んでみたのですが、
コンストラクタのパラメータを取得しようとしている最中methodオブジェクトがnull
になっている気がします。
AOPの影響で、org.mozilla.javascript.JavaMembers.lookupClass
が、間違ったクラスを解決しているのかもしれません。
■■ 問題のエラーログ
[INFO] MayaaServlet - init start
[INFO] MayaaServlet - prepareLibraries start
[INFO] FactoryFactoryImpl - marshall factory: /org.seasar.mayaa.provider.ProviderFactory
[INFO] LibraryManagerImpl - loaded library - /mayaa.mld - http://mayaa.seasar.org
[INFO] MayaaServlet - prepareLibraries end
[INFO] MayaaServlet - init end
[INFO] FactoryFactoryImpl - marshall factory: /org.seasar.mayaa.cycle.CycleFactory
[INFO] FactoryFactoryImpl - marshall factory: /org.seasar.mayaa.source.PageSourceFactory
[INFO] PageSourceFactoryImpl - folder: /WEB-INF/page
[INFO] TemplateErrorHandler - error template not found, /java.lang.NullPointerException
[INFO] TemplateErrorHandler - error template not found, /java.lang.RuntimeException
[INFO] TemplateErrorHandler - error template not found, /java.lang.Exception
java.lang.NullPointerException
at org.mozilla.javascript.net.sf.retrotranslator.runtime.impl.MethodDescriptor.getInstance(MethodDescriptor.java:137)
at org.mozilla.javascript.net.sf.retrotranslator.runtime.java.lang.reflect._Constructor.isVarArgs(_Constructor.java:83)
at org.mozilla.javascript.jdk15.VMBridge_jdk15.isVarArgs(VMBridge_jdk15.java:66)
at org.mozilla.javascript.MemberBox.init(MemberBox.java:86)
at org.mozilla.javascript.MemberBox.<init>(MemberBox.java:72)
at org.mozilla.javascript.JavaMembers.reflect(JavaMembers.java:667)
at org.mozilla.javascript.JavaMembers.<init>(JavaMembers.java:76)
at org.mozilla.javascript.JavaMembers.lookupClass(JavaMembers.java:838)
at org.mozilla.javascript.NativeJavaObject.initMembers(NativeJavaObject.java:90)
at org.mozilla.javascript.NativeJavaObject.<init>(NativeJavaObject.java:80)
at org.mozilla.javascript.NativeJavaObject.<init>(NativeJavaObject.java:70)
at org.mozilla.javascript.WrapFactory.wrapAsJavaObject(WrapFactory.java:149)
at org.seasar.mayaa.impl.cycle.script.rhino.WrapFactoryImpl.wrapAsJavaObject(WrapFactoryImpl.java:53)
at org.mozilla.javascript.WrapFactory.wrap(WrapFactory.java:105)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:258)
at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66)
at org.mozilla.javascript.gen.c2._c1(/mayaa/util.mjs:23)
at org.mozilla.javascript.gen.c2.call(/mayaa/util.mjs)
at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
at org.mozilla.javascript.gen.c1._c0(/default.mayaa#beforeRender:9)
at org.mozilla.javascript.gen.c1.call(/default.mayaa#beforeRender)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:398)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3065)
at org.mozilla.javascript.gen.c1.call(/default.mayaa#beforeRender)
at org.mozilla.javascript.gen.c1.exec(/default.mayaa#beforeRender)
at org.seasar.mayaa.impl.cycle.script.rhino.TextCompiledScriptImpl.normalExecute(TextCompiledScriptImpl.java:126)
at org.seasar.mayaa.impl.cycle.script.rhino.TextCompiledScriptImpl.execute(TextCompiledScriptImpl.java:166)
at org.seasar.mayaa.impl.engine.specification.SpecificationUtil$EventScriptEnvironment.execEventScript(SpecificationUtil.java:352)
at org.seasar.mayaa.impl.engine.specification.SpecificationUtil.execEvent(SpecificationUtil.java:215)
at org.seasar.mayaa.impl.engine.EngineImpl.doPageService(EngineImpl.java:362)
at org.seasar.mayaa.impl.engine.EngineImpl.doService(EngineImpl.java:493)
at org.seasar.mayaa.impl.MayaaServlet.doService(MayaaServlet.java:97)
at org.seasar.mayaa.impl.MayaaServlet.doPost(MayaaServlet.java:85)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:380)
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:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:334)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at my.company.XXXXXXXXServlet.doPost(XXXXXXXXServlet.java:XXX)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1148)
at my.company.XXXXXXXXFilter.doFilter(XXXXXXXXFilter.java:XXX)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:378)
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:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
at org.mortbay.jetty.handler.HandlerList.handle(HandlerList.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:880)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:748)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:213)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)
--
Susumu ISHIGAMI <[E-MAIL ADDRESS DELETED]>
mayaa-user メーリングリストの案内