2013-11-25 19 views
5

Tôi đang tạo một dự án JSF + JPA cho và GlassFish 4. Một vài lần tôi nhận được một ngoại lệ tại thời điểm này : lớpjava.lang.ClassCastException: com.example.Entity không thể được truyền tới com.example.Entity

javax.faces.el.EvaluationException: java.lang.ClassCastException: de.sep.ateam.sap.norris.model.User cannot be cast to de.sep.ateam.sap.norris.model.User 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.ClassCastException: de.sep.ateam.sap.norris.model.User cannot be cast to de.sep.ateam.sap.norris.model.User 
    at de.sep.ateam.sap.norris.controller.beans.LoginBean.doLogin(LoginBean.java:50) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at javax.el.ELUtil.invokeMethod(ELUtil.java:326) 
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:536) 
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:269) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304) 
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40) 
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 35 more 
+2

Vui lòng hiển thị dấu vết ngăn xếp Ngoại lệ của bạn. – Masudul

+0

@Rakesh: thư viện/khung/tên sản phẩm như "JSF" và "GlassFish" là ** không ** mã. Vui lòng ngừng định dạng chúng dưới dạng mã trong các chỉnh sửa được đề xuất. – BalusC

+0

Hãy thử (Object u: users) {User user = (Người dùng) u; ..... –

Trả lời

0

tôi đã có một vấn đề tương tự bởi vì tôi đã serializing và t:

List<User> users = connection.getUserList(); 

for (User u : users) { //exception 

...

public List<User> getUserList() { 

    EntityManager em = Persistence.createEntityManagerFactory("project").createEntityManager(); 
    List<User> users = em.createQuery("SELECT c FROM User c", User.class).getResultList(); 
    em.close(); 
    return users; 
} 

stacktrace các phiên bản được tuần tự hóa không thể được deserialized sau khi các lớp được cập nhật và ứng dụng được khởi động lại mà không cần khởi động lại vùng chứa.

+0

bạn đã khắc phục nó như thế nào? Tôi đang tuần tự hóa các lớp quá – Yakaryo

+0

Chúng tôi đã sử dụng những thứ như 'finalVersionUID = 1L;' và cập nhật uid khi chúng ta biết nó sẽ phá vỡ quá trình deserialization và đôi khi cũng phá hủy cache. Ngoài ra, chúng tôi có nhiều chiến lược lưu trong bộ nhớ cache, nhưng một trong số chúng được chạy bởi vùng chứa (Tomcat) mà chúng tôi đã tắt trên phiên bản dev (nơi chúng tôi cập nhật ứng dụng mà không cần khởi động lại vùng chứa) và có chính sách khởi động lại vùng chứa để triển khai cho sản xuất. Oh, cũng đôi khi các container khi khởi động lại một ứng dụng có một khó khăn để thay thế các lớp học bởi vì nó không thể dỡ bỏ một số lớp trên redeploy. – austin

0

Thông thường điều này xảy ra khi có nhiều hơn một thể hiện của cùng một lọ trong bộ tải lớp khác nhau. Hầu hết các máy chủ ứng dụng đều có trình tải lớp toàn cục và trình tải lớp cụ thể cho từng ứng dụng web (một số cũng có những người khác như contrib, v.v.). Nếu trình nạp lớp cao hơn trong chuỗi thức ăn có lớp được định nghĩa sẵn và nó được định nghĩa lại bởi trình nạp lớp mức thấp hơn thì kiểu tình huống này có thể xảy ra (cùng một lớp trong trình nạp lớp khác nhau được xem là khác nhau mặc dù định nghĩa của nó là giống nhau). Thứ tự như thế nào/khi bình được tải không được đảm bảo mà có thể giải thích tại sao đôi khi bạn thấy lỗi và đôi khi không. Dài câu chuyện ngắn, chắc chắn rằng bạn chưa triển khai các jar có chứa lớp này ở một nơi khác trong máy chủ có thể hiển thị cho ứng dụng web của bạn.

+0

im vẫn gặp lỗi ... – Yakaryo

3

Nếu bạn chắc chắn rằng bạn không có nhiều phiên bản của cùng một lớp được tải trong máy chủ ứng dụng, bạn có thể thử đặt lại bộ đệm máy chủ.

Thực hiện theo các bước này:

  1. undeploy ứng dụng;
  2. Dừng máy chủ ứng dụng;
  3. Xóa thư mục bộ nhớ cache osgi của máy chủ ứng dụng của bạn. I E. nếu bạn là sử dụng glassfish, đó là thư mục: E: \ glassfish-3.1.2.2 \ glassfish \ domains \ domain1 \ osgi-cache
  4. Khởi động lại máy chủ;
  5. Triển khai ứng dụng.
1

tôi đã cùng một vấn đề, và cuối cùng tôi tìm thấy một workaround trên java.net:

Sao chép tất cả org.eclipse.persistence jar filesglassfish4/glassfish/modules-WEB-INF/lib. Sau đó, hãy vào tệp glassfish-web.xml và đặt class-delegate thành false.

Làm việc cho tôi!

+0

Trong trường hợp của tôi, chỉ cần thêm org.eclipse.persistence.core.jar và org.eclipse.persistence.jpa.jar vào WEB-INF/lib –

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