2010-03-02 5 views
6
내가하는 Liferay에 가능한 가장 기본적인 포틀릿을 배포하고있어

: 배포에을 Liferay에 대한 간단한 포틀릿을 배포 - ClassCastException이

public class FirstPortlet extends GenericPortlet 
{ 
    @RenderMode(name="VIEW") 
    public void welcomeWelcome(RenderRequest request, 
      RenderResponse response) throws 
      PortletException, IOException 
    {  
     PrintWriter out = response.getWriter(); 
     out.println ("This is a portlet, <em>within a Portal</em>"); 
    } 
} 

, 내가는 ClassCastException 받고 있어요 : 인터넷 검색 후

Caused by: java.lang.ClassCastException: FirstPortlet cannot be cast to javax.po 
rtlet.Portlet 

을, portlet.jar을 배포하는 것은 실수입니다. 실수로이 작업을 수행하지 않도록했습니다.

javax.portlet.Portlet은 GenericPortlet에 의해 구현되며, 모든 포틀릿 예제는 GenericPortlet을 확장하는 것처럼 보이므로 괜찮습니다.

아무도 도와 줄 수 있습니까?

답변

8

javax.portlet.Portlet은의 GenericPortlet에 의해 을 구현, 모든 포틀릿 예 그래서 그 괜찮아 가정의 GenericPortlet 을 확장 할 것으로 보인다. GenericPortletPortlet를 구현하는 경우

은, 내 생각 엔 당신이 클래스 로더 문제를 가지고있다. 클래스는 두 개의 다른 클래스 로더에서 두 번로드되고 결과에 따라 다르게 간주됩니다.

인터넷 검색을 한 후에는 배포 portlet.jar 실수 않은 것 같습니다 - 나는 확실히했습니다 실수로 아니에요 이렇게.

은 여전히를 나는 당신이 한 번 확인 당신이 portlet.jar (또는 Portlet 포함 된 다른 항아리)이없는 경우 제안 두 번 어딘가에로드 된 것입니다. 가능한 위치는 사용중인 컨테이너에 따라 다릅니다 (Tomcat? Glassfish?).

+0

우수, 감사 - 지금 떠나야하지만 난 즉시이를 확인할 수 있습니다 양철통. 참으로 여분의 포틀렛이라고 확신합니다. 병. 그것은 확실히 내 WAR 파일에 없습니다. –

+0

예, Tomcat이었습니다 - Jaromir에 대한 내 회신을보십시오. portlet.jar은 tomcat/webapps 디렉토리에 남겨졌습니다. –

6

이것은 확실히 클래스 로딩 문제입니다. WAR 아카이브에 portlet.jar이 없으면 자세한 클래스로드를 활성화하고로드 된 javax.portlet.Portlet을 감시 할 수 있습니다.

는 자세한 JVM에 매개 변수를 다음 패스 클래스로드 해제하려면 :

-verbose : 클래스

+1

아참. 예, 답장에 대한 정보를 주셔서 감사합니다. 즉, 답을 찾을 수있게 해준 수업입니다. 이것이 내 어리 석음이라고 생각합니다! portlet.jar 파일을 포함하여 포틀릿을 한 번 배포했습니다. 그렇다면 내 실수를 깨닫고 모든 향후 배포에서 제거했습니다. 그러나 나는 jar 파일이 여전히 tomcat/webapps 디렉토리에 남아 있다는 것을 깨닫지 못했습니다. 수정 : webapps 디렉토리에서 해당 폴더를 삭제하고 다시 배포하십시오. –

관련 문제