2010-03-02 41 views
6

Tôi đang triển khai Portlet cơ bản nhất có thể để Liferay:Triển khai một Portlet đơn giản để 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>"); 
    } 
} 

On triển khai, tôi nhận được một ClassCastException:

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

Sau Googling, có vẻ như việc triển khai portlet.jar là một sai lầm - tôi đã đảm bảo rằng tôi không vô tình làm việc này.

javax.portlet.Portlet được thực hiện bởi GenericPortlet, và tất cả các ví dụ Portlet dường như mở rộng GenericPortlet vì vậy tôi giả sử đó là ok.

Có ai giúp được không?

Trả lời

8

javax.portlet.Portlet được thực hiện bởi GenericPortlet, và tất cả các Portlet ví dụ dường như kéo dài GenericPortlet vì vậy tôi cho rằng là ok.

Nếu GenericPortlet thực hiện Portlet, tôi đoán là bạn có vấn đề về trình tải lớp. Lớp được nạp hai lần, trong hai trình nạp lớp khác nhau và do hậu quả được xem là khác nhau.

Sau Googling, dường như triển khai portlet.jar là một sai lầm - Tôi đã thực hiện chắc chắn tôi không vô tình làm điều này.

Tôi vẫn khuyên bạn nên kiểm tra kỹ nếu bạn không có portlet.jar (hoặc một bình khác có chứa Portlet) được tải hai lần ở đâu đó. Các vị trí có thể phụ thuộc vào vùng chứa bạn đang sử dụng (Tomcat? Glassfish?).

+0

Tuyệt vời, cảm ơn - Tôi phải đi bây giờ nhưng tôi sẽ kiểm tra điều này càng sớm càng tôi có thể. Tôi chắc chắn nó thực sự là một portlet.jar thêm. Nó chắc chắn không có trong tệp WAR của tôi. –

+0

Vâng, đó là Tomcat - xem trả lời của tôi cho Jaromir, portlet.jar bị bỏ lại phía sau trong thư mục tomcat/webapps. –

6

Đây chắc chắn là vấn đề về tải lớp. Nếu bạn là chắc chắn bạn không có portlet.jar trong tệp lưu trữ WAR, bạn có thể bật tải lớp tiết kiệm và xem tệp javax.portlet.Portlet được tải từ đâu.

Để bật bạn tiết classloading qua sau tham số để JVM:

-verbose: class

+1

Ouch. Có, cảm ơn thông tin về tiết: lớp - cho phép tôi tìm câu trả lời. Tôi nghi ngờ đây là sự ngu ngốc của riêng tôi! Tôi đã triển khai portlet một lần bao gồm tệp portlet.jar. Sau đó, tôi nhận ra sai lầm của mình và xóa nó khỏi tất cả các triển khai trong tương lai. Tuy nhiên, tôi chưa nhận ra rằng tệp jar vẫn bị bỏ lại phía sau trong thư mục tomcat/webapps. Khắc phục: xóa thư mục thích hợp khỏi thư mục webapps và triển khai lại. –

Các vấn đề liên quan