Datasource TOMCAT 7

16 respostas
caiomacedor

Bom dia pessoal, estou com uma dúvida, estou criando um Datasource no tomcat 7, e gostaria de saber se é possivel eu criar esse Datasource direto no tomcat, sem ter que criar um arquivo context.xml no META-INF da minha aplicação. Lembrando que é uma aplicação web e estou usando o Tomcat: apache-tomcat-7.0.26

desde já agradeço.

16 Respostas

magnocosta

caiomacedor,

Se conseguir posta a sua solução ai, pesquisei a documentação do Tomcat 7, Vi algumas pessoas comentando que é possível fazer. Mas não encontrei nenhum conteúdo explicando o passo a passo, então eu desisti e migrei de servidor, não só por causa desse detalhe claro !

ps: Migrei para o Jboss 7 que por sinal é muito bom

Att,

lele_vader

Acredito que sim, caso você use um datasource e descreva no web.xml o nome jndi.

caiomacedor

magnocosta, Eu também já pensei em mudar para o JBoss, até coloquei ele por duas semanas, mas ví que ele consome bem mas memoria que o tomcat, e a aplicação que estou usando não requer quase nada que tenho a disposição no Jboss.
Segue trechos do meu codigo:
web.xml:

<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/oracledb</res-ref-name> <res-type>oracle.jdbc.pool.OracleDataSource</res-type> <res-auth>Container</res-auth> </resource-ref>

context.xml que esta no META-INF da aplicação:

<Context reloadable="true">
	<Resource 
		name="jdbc/oracledb" 
		type="javax.sql.DataSource"
		driverClassName="oracle.jdbc.OracleDriver" 
		url="jdbc:oracle:thin:@ip-server:ORADES"
		username="USER" 
		password="PASS" 
		maxActive="20" 
		maxIdle="10" 
		maxWait="-1"
	/>
</Context>

Esse arquivo é que eu não gostaria que ele ficasse na minha aplicação e sim no tomcat.

lele_vader

Você criou o datasource na pasta do tomcat ?

Senão acho que não precisa desse context.xml e deixe o seu web.xml do jeito que está.

Se não criou no tomcat aqui diz onde tem que colocar a configuração

http://www.coderanch.com/t/362966/Servlets/java/Datasource-web-xml

lele_vader

Só acho o teu res-type do web.xml diferente.

Geralmente se coloca assim

javax.sql.DataSource

mas não sei se precisa referenciar essa classe do oracle mesmo.

caiomacedor

lele_vader, Eu acho que deve ter feito algo errado, na doc do tomcat não esta muito claro. Tem no tomcat esses arquivos: apache-tomcat-7.0.26\conf\context.xml e também apache-tomcat-7.0.26\conf\server.xml. Ai é que vem minha dúvida. Em qual dos arquivos devo fazer a declaração do Datasource? E se for no server.xml, entre quais tags tenho que colocar? Já tentei nos dois arquivos mas nenhum funfou… Só funcionou quando criei o context.xml no META-INF da aplicação.

lele_vader

Dá uma olhada no link que te passei

http://www.coderanch.com/t/362966/Servlets/java/Datasource-web-xml

lele_vader

Dá uma olhada nesse tbm.

http://www.java-samples.com/showtutorial.php?tutorialid=943

caiomacedor

Ta osso, rsrsrs tentei das duas formas como esta nos links que você passou, mas sempre da esse exception na hora de criar a conexão:

public Connection getConnection() throws SQLException { try { Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource dataSource = (DataSource)envContext.lookup("jdbc/hsql"); if (this.connection == null || this.connection.isClosed()) { this.connection = dataSource.getConnection(); } } catch (Exception e) { throw new SQLException(e.getMessage()); } return connection; }

lele_vader

Mostra o seu arquivo do datasource.

Uma coisa estranha é que no seu arquivo você colocou o datasource como jdbc/oracledb e no lookup está o jndi como jdbc/hsql

Outra coisa é a sua classe no web.xml

geralmente se coloca javax.sql.DataSource

Dá uma olhada nisso.

caiomacedor

É cara, nas alterações aqui agente acaba passando uma coisa que na verdade esta outra. Segue meus arquivos como esta agora.

web.xml

<resource-ref> <res-ref-name>jdbc/oracle11g</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>

server.xml do tomcat

<Resource 
		name="jdbc/oracle11g" 
		type="javax.sql.DataSource"
		driverClassName="oracle.jdbc.OracleDriver" 
		url="jdbc:oracle:thin:@ip-da-maquina:1521:ORADES"
		username="user-do-db" 
		password="senha-do-db" 
		maxActive="20" 
		maxIdle="10" 
		maxWait="-1"
	/>

esses erros que vc notou é que estava tentando com o HQSLDB pra ver se funcionava, mas não foi.

lele_vader

Beleza.

Agora deixa eu ver como você chama o jndi.

Colocou o jndi para jdbc/oracle11g não é ?

lele_vader

Dá uma olhada depois no tomcat se o datasource está nos diretórios jndi, para ver se está subindo a configuração

caiomacedor

lele_vader:
Beleza.

Agora deixa eu ver como você chama o jndi.

Colocou o jndi para jdbc/oracle11g não é ?

Esta assim:

public Connection getConnection() throws SysHomeException {
		try {		
			Context initContext = new InitialContext();
			Context envContext  = (Context)initContext.lookup("java:/comp/env");
			DataSource dataSource = (DataSource)envContext.lookup("jdbc/oracle11g");
			if (this.connection == null || this.connection.isClosed()) {
				this.connection = dataSource.getConnection();
			}
		} catch (Exception e) {
			throw new SysHomeException(e.getMessage());
		}
		return connection;
	}
caiomacedor

Eu não entendi essa parte: Onde fica esses diretórios jndi no tomcat? Seria alguma diretorio que eu tenho que criar?

lele_vader

Não.
Falei para ver na arvore jndi para ver se aparece esse seu datasource.
Talvez para entrar na interface administrativa do tomcat terá que descomentar uma parte de um arquivo.xml

E a parte de realms eu acho.

Criado 6 de fevereiro de 2013
Ultima resposta 6 de fev. de 2013
Respostas 16
Participantes 3