ERRO: java.lang.NoClassDefFoundError: br/com/caelum/jdbc/modelo/Contato [RESOLVIDO]  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
rafael.capretz
HelloWorld

Membro desde: 28/07/2010 12:37:22
Mensagens: 13
Offline

Pessoal, estou com um problema... Estava estudando a apostila da caelum FJ21 de desenvolvimento web.. aí qdo eu cheguei nos servlets eu comecei a apanhar um pouco, mas acho que fiz tudo certinho aqui... segui todos os passos da apostila.. Até aí estava tudo funcionando certo, porém agora surgiu este erro:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: br/com/caelum/jdbc/modelo/Contato
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:42)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.0 logs.

--------------------------

eu tinha feito um projeto jdbc tudo certinho, funcionando legal, aih depois na parte dos servlets ele manda criar um projeto fj21-agenda, eu criei no mesmo workspace que o jdbc. E pra nao refazer todas as classes de contato, eu apenas fiz os imports do projeto jdbc.. nao sei onde eu errei, vou colar os códigos aqui, pra quem puder me ajudar, dar uma olhada:

CÓDIGO da classe Contato do projeto jdbc:





CÓDIGO da classe ContatoDAO do projeto JDBC:





adiciona-contato.html :





web.xml :




e finalmente o arquivo que começou a dar pau no finalzinho, o último arquivo que eu fiz que nao deu certo:
AdicionaContatoServlet.java do projeto fj21-agenda:



This message was edited 1 time. Last update was at 02/08/2010 09:52:17

ellison'
Debugger
[Avatar]

Membro desde: 06/06/2008 11:21:28
Mensagens: 53
Localização: Rio de Janeiro
Offline

Opa cara...blz ?
Se liga...
esse erro abaixo sempre ocorre quando a classe em questão não é encontrada em tempo de execução.


java.lang.NoClassDefFoundError: br/com/caelum/jdbc/modelo/Contato


Assegure-se de que suas classes estão certinhas.
Da um clean e faz o rebuild da tua aplicação.
Verifica o diretório do teu servidor e vê se os arquivos estão lá corretamente.


Ellison Alves de Souza
[Email] [MSN]
rafael.capretz
HelloWorld

Membro desde: 28/07/2010 12:37:22
Mensagens: 13
Offline

Bom, fiz o clean, dei rebuild, reiniciei o server e continua dando o mesmo erro...

Será q esse erro está acontecendo por causa dos imports do jdbc? verifiquei o diretório certinho e nada.. :S tentei procurar esse erro em outros tópicos e nao achei nenhum com esse erro :S

o mapeamento eu fiz certinho, os diretórios estão certos, as conexoes com o banco de dados tbm estao certas. Aparace a página do adicionar contato certinho, mas aí qdo eu aperto Gravar ele da esse erro mesmo :S

tem outra alternativa? ja tentei refazer umas 5 vezes esse projeto, tinha feito no ubuntu, deu pau com algumas permissoes, aih eu refiz ... e mudou o erro que dava, depois eu mudei de pc e fiz no Fedora e parou os pau de permissão mas esse erro foi o menor erro que deu até agora.. não sei mais o que fazer.. :S
ellison'
Debugger
[Avatar]

Membro desde: 06/06/2008 11:21:28
Mensagens: 53
Localização: Rio de Janeiro
Offline

tenso,
mas o erro que ta aparecendo não é da tua servlet.
é a sua classe de modelo "Contato" que não está sendo encontrada ...
da uma olhada na pasta do teu server /WEB-INF/classes/ pra ver se essa tua classe está lá...no caso seria br.com.caelum.jdbc.modelo.Contato.class

Ellison Alves de Souza
[Email] [MSN]
Gabriel.Amaral
HelloWorld
[Avatar]

Membro desde: 29/07/2010 13:23:21
Mensagens: 10
Offline

Pelo oq eu entendi vc tem dois projetos. e a classe Contato esta em um projeto e vc esta executando outro projeto ?

Se for isso crie um pacote br.com.caelum.jdbc.modelo no projeto que vc esta executando e copie a classe Contato para esse pacote. Talvez isso resolva se for esse o caso.

This message was edited 1 time. Last update was at 01/08/2010 21:00:14

rafael.capretz
HelloWorld

Membro desde: 28/07/2010 12:37:22
Mensagens: 13
Offline

Wow, desculpa minha ignorancia, mas é que to começando a aprender isso ainda, e estou com algumas dificuldades...

vc falou pra eu olhar aqui, mas eu vi que eu nao tenho uma pasta classes no WEB-INF, aí eu tentei copiar do outro projeto o aquivo Contato.java que seria a classe Contato e colar na pasta WEB-INF mas ai o br.com.caleum. jdbc.modelo.Contato.java nao muda nada :S aí como ele tinha o pacote modelo... eu tentei colar o pacote modelo com o Contato.java no fj21-agenda/src

aí eu reinicio o servidor e faço atualizo e vem outro problema, ele diz que nao encontra o ContadoDAO... aí eu copio o contatoDAO e ele diz que nao encontra o connectionFactory... aí eu copio o conection factory e ele diz que nao tem o driver jdbc pro mysql.... aí eu copio o driver pra pasta fj21-agenda e adiciono no build-path... e aih aparece esses erros:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
java.sql.DriverManager.getConnection(DriverManager.java:602)
java.sql.DriverManager.getConnection(DriverManager.java:185)
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:11)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.0 logs.
Gabriel.Amaral
HelloWorld
[Avatar]

Membro desde: 29/07/2010 13:23:21
Mensagens: 10
Offline

A lib do mysql esta na pasta lib do seu WEB-INF ?
rafael.capretz
HelloWorld

Membro desde: 28/07/2010 12:37:22
Mensagens: 13
Offline

o mysql.jar? eu coloquei fora do WEB-INF tinha deixado no fj21-agenda... mas qdo eu coloco o arquivo no WEB-INF continua dando o mesmo ultimo erro
jakefrog
GUJ Expert
[Avatar]

Membro desde: 22/01/2007 22:00:53
Mensagens: 4181
Offline

Cara, eu vi esse erro acontecer quando eu tinha declarado o CLASSPATH no meu pc.

Tenta tirar e manda rodar. Sabe onde que fica? Variáveis de ambiente?

C ya

Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]

SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)

Vamos em frente que atrás vem gente!
rafael.capretz
HelloWorld

Membro desde: 28/07/2010 12:37:22
Mensagens: 13
Offline

Fiz uns testes aqui...

Com o CLASSPATH declarado certinho eu percebi que:

1º se eu colocar o mysql-connector-java-5.1.12.jar no WEB-INF ele nao muda nada ainda da o erro...
2º se eu colocar o mysql-connector-java-5.1.12.jar no WEB-INF E ADICIONAR NO BUILD PATH o Eclipse da um Warning falando:
"Classpath entry /fj21-agenda/WebContent/WEB-INF/mysql-connector-java-5.1.12.jar will not be exported or published. Runtime ClassNotFoundExceptions may result. "

Se eu remover do build path ele nao aparece mais o warning só que continua o erro..

E sem o CLASSPATH declaradao... pra variar, nao ocorre nenhuma diferença do que está escrito acima! como o .jar adicionado aparece o mesmo warning e sem ele no build path nao aparece o warning.

Porém de qualquer jeito aparece o erro :

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
java.sql.DriverManager.getConnection(DriverManager.java:602)
java.sql.DriverManager.getConnection(DriverManager.java:185)
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:11)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.0 logs.
rafael.capretz
HelloWorld

Membro desde: 28/07/2010 12:37:22
Mensagens: 13
Offline

galera, tava fazendo errado, descobri como faz pra sair o warning que tava dando qdo eu mandava adicionar no build PATH..era só ter colocar o mysql-connector-java-5.1.12.jar dentro de lib na WEB-INF mesmo....


Porém... aih fiz o que ele tinha falado, deixei sem o classpath declarado mas depois voltei pra testar se dava algo diferente declarando ou nao o CLASSPATH e apareceu o seguinte erro agora, tanto com ou sem declarar esse CLASSPATH:


Exception

java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
java.sql.DriverManager.getConnection(DriverManager.java:582)
java.sql.DriverManager.getConnection(DriverManager.java:185)
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:11)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2184)
com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
java.sql.DriverManager.getConnection(DriverManager.java:582)
java.sql.DriverManager.getConnection(DriverManager.java:185)
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:11)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.net.ConnectException: Connection refused
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
java.net.Socket.connect(Socket.java:529)
java.net.Socket.connect(Socket.java:47
java.net.Socket.<init>(Socket.java:375)
java.net.Socket.<init>(Socket.java:21
com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2184)
com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
java.sql.DriverManager.getConnection(DriverManager.java:582)
java.sql.DriverManager.getConnection(DriverManager.java:185)
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:11)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:4
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
rafael.capretz
HelloWorld

Membro desde: 28/07/2010 12:37:22
Mensagens: 13
Offline

Aew galera, valeu pela ajuda de todos xD

Eu tava fazendo o memos projeto seguindo todos os passos igualzinho aí agora que eu to tentando no outro pc.. que tem ubuntu deu certo.. =D tava dando o mesmo erro em todos, agora nao sei o que acontece que no Fedora nao deu certo, vou tentar baixar um novo driver de jdbc e colocar no lugar daquele, talvez seja isso...

Eu até queria falar o que eu fiz de diferente, mas eu realmente nao sei o que houve, só sei que deu certo aqui... uma das coisas que eu fiz foi mudar o mysql.jar pra lib do WEB-INF mesmo... E sobre o primeiro erro cujo era o nome do tópico, eu havia arrumei colocando os pacotes br.com.caelum.jdbc dentro do /src do projeto fj21-agenda...

vou tentar solucionar o problema do Fedora e se eu conseguir eu posto aqui como eu arrumei!

Agradeço à todos!

This message was edited 1 time. Last update was at 02/08/2010 09:55:07

enk0d3r
Smalltalk
[Avatar]

Membro desde: 08/03/2009 13:04:32
Mensagens: 2
Offline

Salve galera!
Também passei por esse problema hoje.
Eu criei um .jar do projeto JDBC e o adicionei juntamente com o driver do MySQL ao buildpath do projeto.
Achei legal essa forma pois a estrutura do DAO fica encapsulada no .jar ai não fica aquela avalanche de nomes de pacotes na cara do
usuário. Para ele saber como usar a nossa lib basta ele ler a documentação da mesma.
=)

 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team