我正在运行一个jetspeed门户网站,其中包含各种portlet应用程序,并在最近重新安装后遇到一些问题,其中一些portlet将返回
无法传递null PortletDefinition 到PortletEntity
知道造成这个问题的原因是什么吗?我调查了一下,似乎jetspeed在添加新的portlet时运行一个进程,它在DB中创建映射(在我的情况下是derby)。如果这没有完成,它似乎导致了这个问题。我的假设是否正确?如果是,我该如何重新启动此流程?
非常感谢
答案 0 :(得分:1)
此异常可能是由于页面上的portlet名称不匹配所致。当使用一个名称部署portlet应用程序时,通常会发生这种情况,但页面片段会引用另一个名称,例如,在您的页面上:
<fragment id="1234" type="portlet" name="myApp::myPortlet">
当您部署war文件时,它的名称为myApp-1.0-SNAPSHOT.war
片段的name属性应该具有值“$ {portlet.war.name} :: $ {portlet.name}。”第一部分($ {portlet.war.name})是portlet war文件的名称减去.war。第二部分来自portlet.xml文件中标记的值。
您可以重命名war文件,也可以更改页面定义以包含版本。我不建议将版本号放在片段中,因为它可以改变。
第三种解决方案是通过在Jetspeed Container servlet上设置名为contextName的init参数来实际更改web.xml中portlet应用程序的名称。在下面的示例中,它设置为“myApp”:
<servlet>
<description>MVC Servlet for Jetspeed Portlet Applications</description>
<display-name>Jetspeed Container</display-name>
<servlet-name>JetspeedContainer</servlet-name>
<servlet-class>
org.apache.jetspeed.container.JetspeedContainerServlet</servlet-class>
<init-param>
<param-name>contextName</param-name>
<param-value>myApp</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>