2011-12-14 78 views
3

我是新來的portlet,我試圖從我的JSF 2.0應用程序構建一個。我正在使用liferay-portal-tomcat-6.1.0-ce-b4,JSF 2.1.3和PortletFaces bridge 2.0.1。Liferay Portlet部署 - 類拋出異常

當我嘗試安裝portlet到Liferay的,我永諾出現以下情況例外,我真的不知道爲什麼,因爲根據文件,該org.portletfaces.bridge.GenericFacesPortlet shoult實現門戶界面...

09:31:31709 ERROR [HotDeployUtil:114] com.liferay.portal.kernel.deploy.hot.HotD eployException:用於MondisVisualizer-1.3-SNAPSHOT com.liferay.portal.kernel錯誤 註冊的portlet。 deploy.hot.HotDeployException:錯誤 在com.liferay.porta註冊MondisVisualizer-1.3-SNAPSHOT 的portl ets l.kernel.deploy.hot.BaseHotDeployListener.throwHotDe ployException(BaseHotDeployListener.java:46) 在com.liferay.portal.deploy.hot.PortletHotDeployListener.invokeDeploy(P ortletHotDeployListener.java:117) 在com.liferay。 portal.kernel.deploy.hot.HotDeployUtil._doFireDeployEvent (HotDeployUtil.java:111) 在com.liferay.portal.kernel.deploy.hot.HotDeployUtil._fireDeployEvent在com.liferay(H otDeployUtil.java:188) .portal.kernel.deploy.hot.HotDeployUtil.fireDeployEvent(何 tDeployUtil.java:40) 在com.liferay.portal.kernel.servlet.PortletContextListener.doPortalInit (PortletContextListener.java:101) 中C om.liferay.portal.kernel.util.BasePortalLifecycle.portalInit(BasePor talLifecycle.java:42) 在com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLif ecycleUtil.java:61) 在融爲一體。 liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLif ecycleUtil.java:53) 在com.liferay.portal.kernel.util.BasePortalLifecycle.registerPortalLife 週期(BasePortalLifecycle.java:50) 在com.liferay。 portal.kernel.servlet.PortletContextListener.contextIniti alized(PortletContextListener.java:55) 在org.apache.catalina.core.StandardContext.listenerStart(StandardContex t.java:4723) 在org.apache.catalin a.core.StandardContext $ 1.call(StandardContext.java: 5226) at org.apache.catalina.core.StandardContext $ 1.call(StandardContext.java: 5221) at java.util.concurrent.FutureTask $ Sync。 innerRun(FutureTask.java:303) 在java.util.concurrent.FutureTask.run(FutureTask.java:138) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExec utor.java:886) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor .java:908) at java.lang.Thread.run(Thread.java:619)引起:java.lang.ClassCastException:org.portletfaces.bridge .GenericFacesPor tlet無法轉換爲javax.portlet.Portl等 在com.liferay.portlet.PortletBagFactory.create(PortletBagFactory.java:1 31) 在com.liferay.portal.deploy.hot.PortletHotDeployListener.initPortlet(寶 rtletHotDeployListener.java:603) 在融爲一體。 liferay.portal.deploy.hot.PortletHotDeployListener.doInvokeDeploy (PortletHotDeployListener.java:385) at com.liferay.portal.deploy.hot.PortletHotDeployListener.invokeDeploy(P ortletHotDeployListener。的java:114) ... 17更

portlet.xml中:

<?xml version="1.0" encoding="UTF-8"?> 

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"> 
    <portlet> 
     <portlet-name>Visualizer</portlet-name> 
     <portlet-class>org.portletfaces.bridge.GenericFacesPortlet</portlet-class> 
     <init-param> 
      <name>javax.portlet.faces.defaultViewId.view</name> 
      <value>/index.xhtml</value> 
     </init-param> 
     <supports> 
      <mime-type>text/html</mime-type> 
      <portlet-mode>view</portlet-mode> 
     </supports> 
     <portlet-info> 
      <title>Mondis Visualizer</title> 
     </portlet-info> 
    </portlet> 
</portlet-app> 

的liferay-portlet.xml中:

<liferay-portlet-app> 
    <portlet> 
     <portlet-name>Visualizer</portlet-name> 
     <instanceable>true</instanceable> 
     <remoteable>false</remoteable> 
     <ajaxable>false</ajaxable> 
     <!-- <header-portlet-css>/resources/styles/bookCatalog.css</header-portlet-css> 
     <header-portlet-javascript>/resources/scripts/jsf.js</header-portlet-javascript> --> 
    </portlet> 
</liferay-portlet-app> 

的liferay-display.xml:

<?xml version="1.0"?> 
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.0.0//EN" "http://www.liferay.com/dtd/liferay-display_6_0_0.dtd"> 

<display> 
    <category name="category.mondis.visualizer"> 
     <portlet id="Visualizer" /> 
    </category> 
</display> 

在此先感謝。

回答

2

我發現了這個問題,它殺死了我的portlet。

捆綁liferay的porlet.jar可能以某種方式被黑/修改。解決方法是在maven中將portlet.jar依賴項設置爲「提供」 - 並且java將在運行時將代碼鏈接到tomcat中的(可能已修改的)庫。它會工作...

<dependency> 
     <groupId>javax.portlet</groupId> 
     <artifactId>portlet-api</artifactId> 
     <version>2.0</version> 
     <scope>provided</scope> 
    </dependency> 
+3

如果文件你使用的是Tomcat(也可能是其他的),這實際上是因爲完全相同的類由不同的Cla加載ssLoader的。 Tomcat在tomcat的lib/ext文件夾中使用了ClassLoader和Liferay的層次結構portlet.jar,這意味着Liferay將在那裏找到portlet接口。但是,當您在自己的類路徑中也有portlet.jar時,您的應用程序會在那裏找到它。當完全相同的類由不同的ClassLoader加載時,它們是真正不同的類對象,因此您將最終得到此ClassCastException。 – Lucas

0

轉到 Liferay的門戶-6.1.1-CE-GA2 \ Tomcat的7.0.27 \ web應用

那裏你會找到這些文件,你需要刪除 另外:

d ...... \ Liferay的門戶-6.1.1-CE-GA2 \ Tomcat的7.0.27 \ TEMP 你可以刪除你想

+0

去 Liferay的門戶-6.1.1-CE-GA2 \ Tomcat的7.0.27 \ web應用, ,你會發現這些文件,你需要將其刪除,所以刪除它們,票數也 d ...... \ liferay-portal-6.1.1-ce-ga2 \ tomcat-7.0.27 \ temp。 ,你可以刪除你想要的文件。 啓動Server agein,並嘗試:它已與我合作。 – Ibo