一、准备:
我本机的环境是liferay-portal-tomcat-6 RC2
使用liferay-plugins-sdk开发了一个测试portlet:LiuYiTest
将此portlet部署到portal中之后,能够正常显示,没有任何错误信息。页面显示如下:
二、portal启动状态时undeploy portlet 的操作步骤:
在liferay-portal服务器启动状态下(在liferay-portal服务器启动状态下,这个很重要,后文会讲portal关闭状态下删除文件夹之后的状况),
undeploy这个portlet需要做的事情共有以下几步:
1. 在这个portlet右上角点击关闭按钮,关闭这个portlet,这样在卸载了这个portlet之后,再次访问这个页面的时候,不会报portlet找不到的异常
2. 在$LIFERAY_HOME(代表portal的安装路径)中,进入tomcat-$version\webapps,找到我们刚才关闭的LiuYiTest-portlet。
我本机的路径截图如下:
直接移除此portlet文件夹。
删除此文件夹之后,在控制台会输出如下提示:
14:39:11,343 INFO [ExtHotDeployListener:207] Extension environment for LiuYiTest-portlet will not be undeployed
14:39:11,343 INFO [PortletHotDeployListener:403] Unregistering portlets for LiuYiTest-portlet
14:39:11,343 INFO [PortletHotDeployListener:439] 2 portlets for LiuYiTest-portlet was unregistered
14:39:11,406 WARN [PortletContextListener:86] Unable to dynamically unbind the Liferay data source: Name java_liferay:jdbc is not bound in this Context
以上信息的意思总共有以下几点:
1) 当前卸载的这个portlet的扩展环境将不会被删除,例如当前卸载的portlet用到的全局图片资源,js资源,css资源,其他不在当前portlet文件夹中的
相关资源都不会被卸载(删除)。%大概是这个意思,可能还有其他更深的意思%
2) 这个portlet在portal中的注册信息已经被卸载掉了
3) 2个portlet被卸载了 %由于我的这个portlet工程(LiuYiTest-portlet)中包含两个具体的portlet,所以是2个portlet被卸载%
4) 最后这句的意思是无法动态的解除绑定的liferay数据资源,冒号后面的信息是提示在卸载的这个portlet内容中没有绑定的数据库内容。
%liferay-portal会自动删除存在于\tomcat-6.0.26\work\Catalina\localhost目录下以及\tomcat-6.0.26\temp\下的与当前
portlet有关的一些_jsp.class和资源文件%
如果你在删除之前没有首先关闭掉portal页面上的portlet的话,刷心页面之后,控制台会报类似如下错误:
java.lang.NullPointerExceptionat com.liferay.portlet.PortletInstanceFactoryImpl.create(PortletInstanceFactoryImpl.java:122)at com.liferay.portlet.PortletInstanceFactoryUtil.create(PortletInstanceFactoryUtil.java:38)at org.apache.jsp.html.portal.render_005fportlet_jsp._jspService(Unknown Source)
portlet页面内容中也会有相应提示,这时候只需要在portal中关闭报错的portlet就可以了。
3. 如果你的portlet中用到了数据库中的信息,那么需要手动清除一下无用的数据
至此为止,部署在liferay-portal中的某个portlet就被成功删除掉了,注意,以上是在liferay-portal启动的情况下的undeploy操作。
三、portal没有启动状态,undeploy portlet的操作:
下文是另一种情况:当liferay-portal没有启动的时候,如果直接删除掉了tomcat\webapps下的portlet工程,启动portal的时候会有
如下类似异常报出:
2010-7-7 16:21:41 org.apache.catalina.startup.HostConfig deployDescriptor信息: Deploying configuration descriptor 123-portlet.xml2010-7-7 16:21:41 org.apache.catalina.startup.ExpandWar copy严重: Error copying D:\worksoft\liferay-portal-6.0.2\tomcat-6.0.26\webapps\123-portlet to D:\worksoft\liferay-portal-6.0.2\tomcat-6.0.26\temp\0-123-portletjava.io.FileNotFoundException: D:\worksoft\liferay-portal-6.0.2\tomcat-6.0.26\webapps\123-portlet (系统找不到指定的文件。)at java.io.FileInputStream.open(Native Method)at java.io.FileInputStream.<init>(FileInputStream.java:106)at org.apache.catalina.startup.ExpandWar.copy(ExpandWar.java:308)at org.apache.catalina.startup.ContextConfig.antiLocking(ContextConfig.java:984)at org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:1032)at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:263)at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)at org.apache.catalina.core.StandardContext.start(StandardContext.java:4234)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)at org.apache.catalina.core.StandardService.start(StandardService.java:519)at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)at org.apache.catalina.startup.Catalina.start(Catalina.java:581)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)2010-7-7 16:21:41 org.apache.catalina.core.StandardContext resourcesStart严重: Error starting static Resources
java.lang.IllegalArgumentException: Document base D:\worksoft\liferay-portal-6.0.2\tomcat-6.0.26\webapps\123-portlet does not exist or is not a readable directoryat org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:142)at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4086)at org.apache.catalina.core.StandardContext.start(StandardContext.java:4255)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)at org.apache.catalina.core.StandardService.start(StandardService.java:519)at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)at org.apache.catalina.startup.Catalina.start(Catalina.java:581)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)2010-7-7 16:21:41 org.apache.catalina.core.StandardContext start严重: Error in resourceStart()2010-7-7 16:21:41 org.apache.catalina.core.StandardContext start严重: Error getConfigured2010-7-7 16:21:41 org.apache.catalina.core.StandardContext start严重: Context [/123-portlet] startup failed due to previous errors
异常是由于没有清理干净当前portlet相关信息导致的。这个时候需要手动清理。
加上最开始删除的webapps下的portlet这一步(也就是以下的第一步),在portal没有启动的状态下,undeploy一个portlet的操作步骤如下:
1) tomcat-$version\webapps\$portlet_name文件夹(如果)
2) tomcat-$version\temp\$portlet_name文件夹
3) tomcat-$version\conf\Catalina\localhost\$portlet_name.xml
4) 此portlet相关数据库中信息
其中$version等代表具体的版本和portlet名称。
重新启动portal。至此,没有启动portal的情况下,undeploy portlet的所有操作执行完毕。
四、最后:
以上演示的实例是在liferay-portal-tomcat-6.0.2的liferay portal版本环境下。绑定的tomcat是6.0.26。通过网上资料我了解到似乎不能
在liferay+jboss的绑定环境下复制以上同样的操作。具体的环境情况下可能有不同的操作方法。