いや、まだ、方法があるな。今まで、ポートレット的な立場から、あれこれしようとしていたけど、JSF 的な立場で考えると、新しいライフサイクルを作って、レンダーのところでResponseWriterを差し替えて、そこに一時的にはき出したあとで、AddResourceから先に出力すべきものを出してしまって、そのあとに差し替えたResponseWriterからはき出せばいけるかもしれない。この方法がうまくいくなら、各ポータル用に用意する必要もないと思われる。あとで、試してみるかな・・・。
MyFacesブリッジ
うーん、Liferayで試したら、ポートレットの段階で対象のクラスローダーがとれないらしく、com.liferay.portlet.RenderResponseImplがとれない・・・。これは、手のつけようがない気が・・・。となると、やっぱり、すべてのポータルをサポートするためには、コンポーネントを作るしかないのか・・・。うむむ、せっかくここまでやったのに、この結論になり、ちょっとショック・・・。まぁ、LiferayとJBoss Portalの使い方が何となくわかったから、よしとしておくか・・・。
JBoss Portal用ポートレットの開発チップ
- log4j-*.jar を含めてはならない。
以下のような Exception をくらいます。
12:52:44,571 ERROR [STDERR] log4j:ERROR A "org.jboss.logging.util.OnlyOnceErrorHandler" object is not assignable to a "org.apache.log4j.spi.ErrorHandler" variable. 12:52:44,571 ERROR [STDERR] log4j:ERROR The class "org.apache.log4j.spi.ErrorHandler" was loaded by 12:52:44,571 ERROR [STDERR] log4j:ERROR [WebappClassLoader delegate: false repositories: /WEB-INF/classes/ ----------> Parent Classloader: java.net.FactoryURLClassLoader@43f9c9e3 ] whereas object of type 12:52:44,572 ERROR [STDERR] log4j:ERROR "org.jboss.logging.util.OnlyOnceErrorHandler" was loaded by [org.jboss.system.server.NoAnnotationURLClassLoader@13aaa14a]. 12:52:44,634 ERROR [STDERR] log4j:ERROR Could not create an Appender. Reported error follows. 12:52:44,634 ERROR [STDERR] java.lang.ClassCastException: org.jboss.logging.appender.DailyRollingFileAppender 12:52:44,635 ERROR [STDERR] at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:175)