2013-02-28 2 views
2

lifletay에서 포틀릿간에 공유 사용자 지정 개체를 보내려고 할 때 심각한 문제가 있습니다. 필자는 Type MyCustomClass의 객체를로드하고 요청 객체에 매개 변수로 삽입하는 서블릿 필터가있는 Hook Plugin을 가지고 있습니다.liferay의 포틀릿에서 사용자 지정 개체 보내기

포틀릿의 render()에서이 객체를 읽으려고하면 객체를 같은 클래스로 캐스팅하고 있지만 ClassCastException이 발생합니다.

내가하는 Liferay 플러그인 다른 컨텍스트를 이해하고, 내가 이미이 같은 콩과 포틀릿에서 객체를로드하기 전에 클래스 로더를 변경하려고 : 그러나

ClassLoader portalcl = PortalClassLoaderUtil.getClassLoader(); 
ClassLoader currentcl = Thread.currentThread().getContextClassLoader(); 
Thread.currentThread().setContextClassLoader(portalcl); 

//do my stuff 

Thread.currentThread().setContextClassLoader(currentcl); 

, 그것은 문제를 해결하고,하지 않았다 내가 문제를 해결하기 위해 찾은 유일한 방법은 json 문자열로 객체를 직렬화하고 필요할 때마다 비 직렬화하는 것입니다.

이 다소 불충분하지 않습니까? 누구든지 더 나은 해결책을 알고 있습니까?

감사합니다, DS

답변

4

그것은 당신이보고있는 주요 문제 두 개의 서로 다른 클래스 로더가 techncally (이미 결정했습니다 것처럼 보인다) 그들에게 다른 클래스를 만드는 클래스를로드하는 것입니다 같은 소리.

필자는 LifeRay를 많이 사용하지 않았지만 다른 플랫폼에서도이 문제가 발생했습니다. 우리는 WebSphere를 사용하여 일반적인 MyCustomClass를 서버 클래스 경로에있는 공유 라이브러리에 넣음으로써이 문제를 해결했습니다. 이렇게하면 서버가 클래스를로드하여 서버의 단일 클래스 로더를 통해 서버의 모든 응용 프로그램에서 사용할 수 있도록합니다. 각 응용 프로그램에 클래스를로드하게하면이 예외가 계속 표시됩니다.

+0

글쎄, 네가 옳은 것 같아, 가장 합법적 인 접근 방법 인 것 같지만, 우리 시스템 개발자가 초기 단계에 있기 때문에 약간의 배포 과정을 복잡하게 만들고, 그 클래스들을 제비. 그래서 json을 사용하여 하나의 포틀릿에서 다른 포틀릿으로 객체를 전송했습니다.보다 견고한 상태에 도달하거나 생명주기가 끝날 때까지 객체를 전송했습니다. 귀하의 의견에 감사드립니다! – madoke

+0

이 스레드는 약간 오래된 것이지만 우리는 모든 콩을 항아리로 옮기고 당신이 제안한 것처럼 tomcat의 lib 디렉토리에 그 항아리를 놓는 방법으로 끝냈습니다. – madoke

관련 문제