[RESOLVIDO] Aplicativo Web acusando java.lang.NoClassDefFoundError

5 respostas
D

Olá amigos do GUJ,

Estou desenvolvendo uma aplicação corporativa onde tenho um módulo EJB e um módulo web por enquanto, estou tentando consumir os serviços dos meus beans de sessão na minha aplicação web pra persistir um objeto, quando eu chamo o serviço ele lança essa exceção pra mim:

javax.ejb.EJBException: java.rmi.ServerError: Error occurred in server thread; nested exception is: java.lang.NoClassDefFoundError: org/postgresql/jdbc4/Jdbc4PreparedStatement

Aparentemente seria o driver do PostgreSQL que estaria faltando, mas não está! Já nem sei o que fazer... o que deveria ser "solução" pra esse tipo de problema não resolve!
Estou usando o Glassfish 3.1 como servidor de aplicação

Meu managedbean
package com.loocaliza.web.mbeans.cadastros;

import com.loocaliza.logic.entities.Cliente;
import com.loocaliza.logic.services.cliente.ClienteService;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Diogo
 */
@Named(value = "clienteBean")
@SessionScoped
public class ClienteBean implements Serializable {

    @EJB
    private ClienteService service;
    private Cliente cliente;
    private boolean flagLogin;

    /** Creates a new instance of ClienteBean */
    public ClienteBean() {
        this.cliente = new Cliente();
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public boolean isFlagLogin() {
        return flagLogin;
    }

    public void setFlagLogin(boolean flagLogin) {
        this.flagLogin = flagLogin;
    }

    public String cadastrar() {
        service.cadastrar(cliente);
        flagLogin = true;
        return "faces/index.xhtml";
    }
}
Meu bean de sessão
package com.loocaliza.logic.services.cliente;

import com.loocaliza.logic.entities.Cliente;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;

/**
 *
 * @author Diogo
 */
@Stateful(mappedName = "com.loocaliza.clienteservice")
public class ClienteServiceImpl implements ClienteService {

    @PersistenceContext(unitName = "LoocalizaPU", type = PersistenceContextType.EXTENDED)
    private EntityManager em;
    private Cliente cliente;

    @Override
    public boolean cadastrar(Cliente c) {
        try {
            em.persist(c);
            this.cliente = c;
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    @Remove
    public void logout() {
    }
}
Stacktrace
javax.faces.el.EvaluationException: javax.ejb.EJBException: java.rmi.ServerError: Error occurred in server thread; nested exception is: 
	java.lang.NoClassDefFoundError: org/postgresql/jdbc4/Jdbc4PreparedStatement
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	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:409)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
	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 com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
	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:662)
Caused by: javax.ejb.EJBException: java.rmi.ServerError: Error occurred in server thread; nested exception is: 
	java.lang.NoClassDefFoundError: org/postgresql/jdbc4/Jdbc4PreparedStatement
	at com.loocaliza.logic.services.cliente._ClienteService_Wrapper.cadastrar(com/loocaliza/logic/services/cliente/_ClienteService_Wrapper.java)
	at com.loocaliza.web.mbeans.cadastros.ClienteBean.cadastrar(ClienteBean.java:52)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:43)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:56)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 33 more
Caused by: java.rmi.ServerError: Error occurred in server thread; nested exception is: 
	java.lang.NoClassDefFoundError: org/postgresql/jdbc4/Jdbc4PreparedStatement
	at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.wrapException(Util.java:700)
	at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:251)
	at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
	at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227)
	at com.loocaliza.logic.services.cliente.__ClienteService_Remote_DynamicStub.cadastrar(com/loocaliza/logic/services/cliente/__ClienteService_Remote_DynamicStub.java)
	... 45 more
Caused by: java.lang.NoClassDefFoundError: org/postgresql/jdbc4/Jdbc4PreparedStatement
Desde já agradeço a ajuda!

5 Respostas

M

tem certeza que não está?

pelo erro…aparentemente não se encontra no mesmo class loader que o ejb, como você tem essa certeza? como adicionou no seu path?

D

Importei a biblioteca pelo Netbeans,

Do mesmo modo que ele encontra outras bibliotecas (como a do Hibernate) ele deveria encontrar essa, não é?

D

Se for usuário antigo do netbeans desconsidere o que vou dizer: tente limpar e construir o projeto.
Veja onde o netbeans ( se estiver usando ele como lançador do glassfish ) está fazendo o deploy e abra esse .war e veja se dentro da pasta lib há esse driver.

D

Resolvi o problema, apenas joguei a biblioteca do JDBC para a pasta do servidor e funcionou (???).

Porém, ainda estou na dúvida, isso é o correto a se fazer?

D

diogozero:
Resolvi o problema, apenas joguei a biblioteca do JDBC para a pasta do servidor e funcionou (???).

Porém, ainda estou na dúvida, isso é o correto a se fazer?

O que é certo ou errado?!

Isso depende do ponto de vista de cada um, mas por exemplo eu já trabalhei e deu certo ter o driver (do sqlserver) no servidor, mas lembre que essa lib vai estar disponível para todos projetos daquele perfil… então poderá ocorer problemas.

Criado 17 de julho de 2011
Ultima resposta 19 de jul. de 2011
Respostas 5
Participantes 3