うーん、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)
Liferay用ポートレットの開発チップ
- portlet.xml の portlet-class タグ内にスペースを入れない
たとえば、
<portlet-class>org.apache.portals.bridges.portletfilter.FilterPortlet</portlet-class>
と言う感じで、無駄なスペースを入れない。スペースがあると、それもクラス名の一部として処理される。
(補足:どうやら、portlet-classタグ以外のところも文字列として扱いたいところにスペースが前後とかにあると、それも文字列の一部として処理されるので、余計なものは入れない方が良いと思われる)