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.
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,
Acredito que sim, caso você use um datasource e descreva no web.xml o nome jndi.
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.
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
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.
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.
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;
}
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.
É 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.
Beleza.
Agora deixa eu ver como você chama o jndi.
Colocou o jndi para jdbc/oracle11g não é ?
Dá uma olhada depois no tomcat se o datasource está nos diretórios jndi, para ver se está subindo a configuração
[quote=lele_vader]Beleza.
Agora deixa eu ver como você chama o jndi.
Colocou o jndi para jdbc/oracle11g não é ?[/quote]
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;
}
Eu não entendi essa parte: Onde fica esses diretórios jndi no tomcat? Seria alguma diretorio que eu tenho que criar?
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.