[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 メーリングリストの案内