Definir DataSource no Tomcat 7

5 respostas
L

Olá pessoal…

Não estou conseguindo definir o datasource(Mysql) pelo tomcat 7…quem puder ajudar agredeço desde já

Eis o meu Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>First</display-name>
//servlet, etc
  <resource-ref>
	<res-ref-name>jdbc/banco</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
  </resource-ref>
</web-app>

Meu context.xml

<Context>

	<Resource

	name="jdbc/banco"

	auth="Container"

	type="javax.sql.DataSource"

	username="root"

	password="minhasenha"

	driverClassName="com.mysql.jdbc.Driver"

	url="jdbc:mysql://localhost:3306/jsf" />

</Context>

Classe de conexão:

import java.sql.Connection;

import java.sql.SQLException;



import javax.annotation.Resource;

import javax.sql.DataSource;





public class Conexao{



	@Resource(name="jdbc/banco")

	private DataSource dataSource;

	

	public Connection conectarMysql() throws SQLException{

		

		if(dataSource == null){

			throw new SQLException("DataSource inexistente");

		}

		Connection connection = dataSource.getConnection();

		if(connection == null){

			throw new SQLException("Não há conexão com o banco");

		}		

		return connection;

	}

}

e adicionei o mysql-connector-java-5.1.17-bin.jar na lib do tomcat…

o método conectarMysql() me retorna DataSource inexistente…
está faltando algo e/ou tem algo errado?

Valeu!

5 Respostas

C

Boa tarde

O arquivo context.xml esta dentro do diretorio conf do tomcat, ou você esta usando no classpath da sua aplicação ???

Caso você esteja usando o context.xml dentro da aplicação, ele tem que estar dentro de um diretorio META-INF.

Flw.

L

Sim…ele está no META-INF…

C

Blz, o seu diretório META-INF esta localizado no mesmo diretorio do WEB-INF ???

Caso esteja pode ser que a injeção via @Resource não esteja funcionando, tenta fazer a busca através do InitialContext, ficaria dessa forma:

InitialContext contexto = new InitialContext();
	        
  DataSource ds = (DataSource)contexto.lookup("java:comp/env/"+JNDINAME);

   conn = ds.getConnection();

Onde JNDINAME seria o nome que esta registrado no JNDI.

Flw.

L

Valeu vinicius…resolveu meu problema…

alguma idéia de porque a anotação não está funcionando?

M

Fiz do mesmo jeito mas dá o seguinte erro:

Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344) at javax.naming.InitialContext.lookup(InitialContext.java:411) at br.com.gti.locus.util.Teste.main(Teste.java:38)

Alguém pode ajudar?

Criado 10 de agosto de 2011
Ultima resposta 18 de out. de 2012
Respostas 5
Participantes 3