Jdbc not bound

12 respostas
Rage

Bom dia forum

Alguem pode me ajudar com o seguinte erro?
(estou fazendo uma aplicação com struts que manipula o mysql, a página que dá este erro é a página de listar os registros. ja coloquei o mysql connector no lib do tomcat e adicionei o jar dele tb na lib do projeto no eclipse )

exception

javax.servlet.ServletException: Name jdbc is not bound in this Context

:mrgreen:

12 Respostas

furutani

Eu axo que voce esqueçeu de configurar um datasource.
Veja aqui como criar um.

Rage

Olá, obrigado!

Este projeto é de um tutorial, dei uma olhada lá, e parece que ele configura um datasource...

Métodos que estou utilizando:

protected Connection getConnection() throws SQLException {
		Connection conn = null;
		try {
			conn = dataSource.getConnection();
		}
		catch (SQLException e) {
			throw e;
		}
		return conn;
	}
	

	protected void closeConnection(
		Connection conn,
		PreparedStatement stmt,
		ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
			}
		}
		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
			}
		}
	}
	
	public LinkedList getUserList() throws SQLException {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		LinkedList users  = new LinkedList();
		try {
			conn = getConnection();
			stmt = conn.prepareStatement("select * from usuario");
			rs = stmt.executeQuery();
			while (rs.next()) {
				UserData user = new UserData();
				user.setIdUsuario(rs.getInt("id_usuario"));
				user.setNome(rs.getString("nome"));
				user.setLogin(rs.getString("login"));
				user.setSenha(rs.getString("senha"));
				user.setSexo(rs.getString("sexo"));
				user.setAtivo(rs.getBoolean("ativo"));
				user.setFaixaIdade(rs.getInt("faixa_idade"));
				users.add(user);
			}
		}
		catch (SQLException e) {
			throw e;
		}
		finally {
			closeConnection(conn, stmt, rs);
		}
		return users;
	}

e parte do server.xml

<Context path="/cadastro" reloadable="true" docBase="D:\_Java\cadastro" workDir="D:\_Java\cadastro\work" />
	
		<DefaultContext>
     
	 	 <Resource name="jdbc/StrutsDemoDS" auth="Container" type="javax.sql.DataSource" scope="Shareable"/>
    
	    	 <ResourceParams name="jdbc/StrutsDemoDS">
			 	
				 <parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>
				 <parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter>
				 <parameter><name>url</name><value>jdbc:mysql://localhost/cadastro</value></parameter>
				 <parameter><name>username</name><value>root</value></parameter>
				 <parameter><name>password</name><value>fil</value></parameter>
				 <parameter><name>maxActive</name><value>20</value></parameter>
				 <parameter><name>maxIdle</name><value>10</value></parameter>
				 <parameter><name>maxWait</name><value>100</value></parameter>
    
	  		</ResourceParams>
  	 
	 	</DefaultContext>

Alguém?

furutani

De onde vem a variavel dataSource?

Rage

Desta parte do código…

parte inicial do código:

import javax.sql.DataSource;

public class AdminUsers {
	
	
	protected static DataSource dataSource;
	
	public AdminUsers() throws Exception {
		if (dataSource == null) {
			try {
				InitialContext ic = new InitialContext();
				dataSource = (DataSource) ic.lookup("java:comp/env/jdbc/StrutsDemoDS");
			} catch (NamingException ex) {
				System.out.println(ex.getMessage());
				throw ex;
			}
		}
	}

Logo depois, neste mesmo arquivo vem os métodos que citei anteriormente… :?

O que esta linha faz?

E este endereço no final desta linha?

:roll:

furutani

Esse endereço deve corresponder ao datasource que voce criou no tomcat.

Rage

Bom, olhando então o meu server.xml, este endereço está correto, acredito…

Tem um parametro la no server, na criação do DS

urljdbc:mysql://localhost/cadastro

que eu tentei mudar para

urljdbc:mysql://localhost/mysql

Pois quando abro o admin do mysql que vem no easyphp, ele mostra este endereço, mas mesmo assim não funcionou, e continua no mesmo erro.

O erro se dá neste método, que está em outra classe, que é instanciada nesta minha classe e chamado este método…é nele que dá o erro.

public LinkedList getUserList() throws SQLException {
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		LinkedList users  = new LinkedList();
		try {
			conn = getConnection();
			stmt = conn.prepareStatement("select * from usuario");
			rs = stmt.executeQuery();
			while (rs.next()) {
				UserData user = new UserData();
				user.setIdUsuario(rs.getInt("id_usuario"));
				user.setNome(rs.getString("nome"));
				user.setLogin(rs.getString("login"));
				user.setSenha(rs.getString("senha"));
				user.setSexo(rs.getString("sexo"));
				user.setAtivo(rs.getBoolean("ativo"));
				user.setFaixaIdade(rs.getInt("faixa_idade"));
				users.add(user);
			}
		}
		catch (SQLException e) {
			throw e;
		}
		finally {
			closeConnection(conn, stmt, rs);
		}
		return users;
	}

alguma noção de pq???

furutani

Vc está confundindo as coisas.
O endereço que eu citei no meu post anterior era o

java:comp/env/jdbc/StrutsDemoDS

Que é o endereço JNDI por onde sua aplicação vai procurar o data source.

Esse endereço é o de conexão JDBC com o banco

jdbc:mysql://localhost/cadastro
Rage

Ola amigo, obrigado por sua atenção!

Não estou confundindo não, apenas estou perguntando sobre outra coisa!

Eu entendí que a linha

dataSource = (DataSource) ic.lookup("java:comp/env/jdbc/StrutsDemoDS");
deve corresponder ao DS que criei no tomcat, no server.xml, conforme postei o código lá no início do tópico, e parece que essa parte esta legal, daí resolví perguntar outra coisa... Parte do server.xml
<Resource name="jdbc/StrutsDemoDS" auth="Container" type="javax.sql.DataSource" scope="Shareable"/>
     
 	    	 <ResourceParams name="jdbc/StrutsDemoDS">
etc etc...

Está correspondendo!!! Em todo caso estou lendo o tutorial da apache que vc indicou. Vou continuar batendo a cabecinha, até conseguir.
Se tiver alguma dica, postaí!
Abraço. Valeu!

Rage

Já melhorou um pouco.

Eu estava criando o DS da maneira errada no container.
O tuto no site da Apache ajudou um pouco… agora ele ainda não traz os dados do banco, mas também não dá erro no browser, e redireciona para o forward global de erros…

Definí o DS dentro do meu contexto, eu não estava fazendo isso, estava definindo fora, por isso o erro “jdbc not bound in this context”…
Agora pelo menos ele acha o DS, mas da esse outro erro no console do tomcat:

Feb 28, 2007 9:04:42 PM org.apache.catalina.core.ApplicationContext log SEVERE: action: Erro carregando a lista de usuários org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780) at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) at strutsdemo.bean.AdminUsers.getConnection(AdminUsers.java:32) at strutsdemo.bean.AdminUsers.getUserList(AdminUsers.java:71) at strutsdemo.action.ListUsersAction.execute(ListUsersAction.java:31) etc etc...
any suggestions :?: :?:

furutani

A configuração do DataSource no tomcat varia nas versão 5.0 e 5.5 verifique se você configurou de acordo.

Rage

Olá amigo, mais uma vez obrigado!

No tutorial, o autor devia estar usando um TomCat abaixo do 5.5, pois o modo como ele sugere criar e configurar o DS no server.xml não funciona, mas do modo que está no mini tuto da página da apache funciona!!!

Ainda bem, pois é um modo mais compacto!!
Funcionou, listou legal os dados do campo, agora estou me deparando com outro erro, em outra página: (hehe)

Se tiver algum ideia, postai!

Abraço!

Rage

Já descobrí o que era…simplesmente haviam tags de fechamento duplicadas
(</html:option></html:option> ), acho que o eclipse fez isso, ou eu msm, sei lá.

Enfim, o projeto tutorial struts+mysql funcionou…exibe, insere e edita numa boa.

Obrigado pela força Roberto!!

:slight_smile:

Criado 24 de fevereiro de 2007
Ultima resposta 3 de mar. de 2007
Respostas 12
Participantes 2