2013-04-02 3 views
1

Я разрабатываю приложение JSF с Netbeans и Glassfish. Когда я что-то меняю, а Netbeans перераспределяет в Glassfish, тогда ClassCastException выбрасывается на класс сущности.ClassCastException на себе после повторного развертывания того же приложения

Caused by: java.lang.ClassCastException: com.twibu.entity.Tipper cannot be cast to com.twibu.entity.Tipper 
    at com.twibu.service.TipperService.findByUseridPwd(TipperService.java:22) 

Как это обусловлено и как его решить?


Для справки, вот полный трассировки стека:

WARNING: EJB5184:A system exception occurred during an invocation on EJB TipperService, method: public com.twibu.entity.Tipper com.twibu.service.TipperService.findByUseridPwd(java.lang.String,java.lang.String) 
WARNING: javax.ejb.EJBException 
    at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215) 
    at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113) 
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901) 
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045) 
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89) 
    at com.sun.proxy.$Proxy141.findByUseridPwd(Unknown Source) 
    at com.twibu.service.__EJB31_Generated__TipperService__Intf____Bean__.findByUseridPwd(Unknown Source) 
    at com.twibu.bean.AuthBean.login(AuthBean.java:122) 
    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:601) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:254) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    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:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    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:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.ClassCastException: com.twibu.entity.Tipper cannot be cast to com.twibu.entity.Tipper 
    at com.twibu.service.TipperService.findByUseridPwd(TipperService.java:22) 
    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:601) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052) 
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124) 
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388) 
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144) 
    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:601) 
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800) 
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370) 
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360) 
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214) 
    ... 44 more 

Вот сущность:

@Entity 
@Table(name = "tipper") 
@XmlRootElement 
@NamedQueries({ 
@NamedQuery(name = "Tipper.findAll", query = "SELECT t FROM Tipper t"), 
@NamedQuery(name = "Tipper.findById", query = "SELECT t FROM Tipper t WHERE t.id = :id"), 
@NamedQuery(name = "Tipper.findByName", query = "SELECT t FROM Tipper t WHERE t.name = :name"), 
@NamedQuery(name = "Tipper.findByUserid", query = "SELECT t FROM Tipper t WHERE t.userid = :userid"), 
@NamedQuery(name = "Tipper.findByPwd", query = "SELECT t FROM Tipper t WHERE t.pwd = :pwd"), 
@NamedQuery(name = "Tipper.findByEmail", query = "SELECT t FROM Tipper t WHERE t.email = :email")}) 

@NamedNativeQueries({ 
@NamedNativeQuery(name = "Tipper.findByUseridPwd", query = "" + 
     "SELECT a.id AS id, " + 
     "  a.idgruppe AS idgruppe, " + 
     "  a.name AS name, " + 
     "  a.userid AS userid, " + 
     "  a.pwd AS pwd, " + 
     "  a.email AS email " + 
     "FROM tipper AS a " + 
     "WHERE  a.userid = ? " + 
     "  AND a.pwd = MD5(?)", 
      resultClass=Tipper.class)}) 

public class Tipper implements Serializable { 
    private static final long serialVersionUID = 20130311L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 50) 
    @Column(name = "name") 
    private String name; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 20) 
    @Column(name = "userid") 
    private String userid; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 32) 
    @Column(name = "pwd") 
    private String pwd; 
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 50) 
    @Column(name = "email") 
    private String email; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "tipper") 
    private Collection<Zulassung> zulassungCollection; 
    @JoinColumn(name = "idgruppe", referencedColumnName = "id") 
    @ManyToOne(optional = false) 
    private Gruppe idgruppe; 

    public Tipper() { 
    } 

    public Tipper(Integer id) { 
     this.id = id; 
    } 

    public Tipper(Integer id, String name, String userid, String pwd, String email) { 
     this.id = id; 
     this.name = name; 
     this.userid = userid; 
     this.pwd = pwd; 
     this.email = email; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getUserid() { 
     return userid; 
    } 

    public void setUserid(String userid) { 
     this.userid = userid; 
    } 

    public String getPwd() { 
     return pwd; 
    } 

    public void setPwd(String pwd) { 
     this.pwd = pwd; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    @XmlTransient 
    public Collection<Zulassung> getZulassungCollection() { 
     return zulassungCollection; 
    } 

    public void setZulassungCollection(Collection<Zulassung> zulassungCollection) { 
     this.zulassungCollection = zulassungCollection; 
    } 

    public Gruppe getIdgruppe() { 
     return idgruppe; 
    } 

    public void setIdgruppe(Gruppe idgruppe) { 
     this.idgruppe = idgruppe; 
    } 

    public boolean isUser() { 
     return idgruppe.getName().equals("user") || idgruppe.getName().equals("admin"); 
    } 

    public boolean isAdmin() { 
     return idgruppe.getName().equals("admin"); 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Tipper)) { 
      return false; 
     } 
     Tipper other = (Tipper) object; 
     if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "com.twibu.entity.Tipper[ id=" + id + " ]"; 
    } 

} 

А вот класс обслуживания:

@Singleton 
public class TipperService extends AbstractService { 

    public Tipper findByUseridPwd(String userid, String pwd) { 
     Query nq = getTwibuManager().createNamedQuery("Tipper.findByUseridPwd"); 
     nq.setParameter(1, userid); 
     nq.setParameter(2, pwd); 
     return (Tipper)nq.getSingleResult(); 
    } 

} 
+1

Было бы лучше опубликовать соответствующий код, т. Е. 'TipperService' (который не входит в ваш пост), а не почти ваш код JSF/PrimeFaces и управляемый компонент, который напрямую не связан с проблемой (что вводит в заблуждение, чтобы найти проблема). –

+0

Ты определенно прав. Я извиняюсь. Я забыл этот код. Я отправлю его, когда вернусь домой. Но, к сожалению, это может быть завтра вечером мое время. Между тем я вкратце описываю вызванный метод. Он принимает Namedquery и делает выбор. Поскольку пользователь уже зарегистрирован в результате, определенно ровно одна строка. И возвращается экземпляр класса Tipper. –

+0

Я добавил класс –

ответ

1

Похоже, что старое приложение не gett нераскрытых.

Если вы не используете контейнер управляемой единицы сохранения, то необходимо закрыть EntityManagerFactory когда отмены развертывания.

+0

@james У меня такая же проблема, как я могу гарантировать, что мой EntityManagerFactory закрывается перед перераспределением? –

Смежные вопросы