Olah pessoal,
Estou com um problema que não estou conseguindo resolver.
Estava usando o Tomcat 6 em uma aplicação onde eu tinha apenas um prototipo navegavel, ja com as Actions, os beans, DAOs, hibernate e Spring. Então como é por enquanto um sistema simples, resolvi mudar para o Tomcat 7. Porem não consigo fazer funcionar mais o JNDI data source. Verifiquei na documentação e me parece muito semelhante e não encontrei diferença na configuraçao.
Alguem ja conseguiu fazer funcionar?
o trecho do meu web.xml na pasta web-inf
<resource-ref>
<description>ACOL DataSource</description>
<res-ref-name>jdbc/ACOLDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
O trecho do meu server.xml
<GlobalNamingResources>
<Resource driverClassName="com.mysql.jdbc.Driver" maxActive="100" maxIdle="100" maxWait="10000" name="global/jdbc/acol" password="senha" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/meu_banco" username="usuario"/>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
</GlobalNamingResources>
Context.xml na pasta meta-inf
<Context>
<ResourceLink name="jdbc/ACOLDS" global="global/jdbc/acol" type="javax.sql.DataSource"/>
</Context>
O que mudou disso para o 7? O que preciso mudar para funcionar?
Muito Obrigado
jhieiy
Janeiro 24, 2011, 2:02pm
#2
Opa Vinicius, estou com o mesmo problema que você usando o TOMCAT 7 e levando uma surra pra funcionar também…
Você conseguiu resolver o problema ?
eu sei que seu post já é de 2009 e estamos em 2011 , não querendo exigir muito da sua memória.
Mas você optou pelo tomcat 6 ou conseguiu resolver a configuração ?
[]'s
Então…
Acabei optando pelo 6. Agora estou começando outro projeto com o 7 e fui ver se estava funcionando ja… Mas ao entrar no how-to da propria apache ele estava explicando para fazer no global e em baixo tinha uma anotação dizendo que o autor do how-to não tinha conseguido fazer funcionar, então em vez de deixar global estou usando no contexto da aplicação mesmo.
Espero ter ajudado, qualquer coisa só perguntar.
jhieiy
Janeiro 25, 2011, 9:50am
#4
Obrigado por responder Vinicius…
Eu já tentei de tudo :
No Server.xml do tomcat 7 dentro da Tag já coloquei direto o Resource assim
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Resource name="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
username="system"
password="******"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe" />
</Host>
</Engine>
</Service>
</Server>
Ou já tentei direto no projeto app/META-INF/context.xml , sem colocar no SERver.xml
<Context>
<Resource name="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
username="system"
password="******"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe" />
</Context>
e no persistence.xml
<persistence-unit name="myApps" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/MyDB</jta-data-source>
<class>br.com.myapps.entity.Files</class>
<class>......</class>
<properties>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
ou ainda no context.xml do Tomcat7/conf/
Com essa configuração o erro que sempre ocorre é :
org.hibernate.HibernateException: Could not find datasource
org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
...
..
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
org.apache.naming.NamingContext.lookup(NamingContext.java:803)
Se você pudesse me esclarecer como está o seu , ou deixar um exemplo de como o seu está funcionando …
Ia ser uma mão na roda… já estou uns 3 dias nisso quebrando a cara rsrsrsrs
[]'s
Não é nenhum desses lugares, vc vai adicionar o resource no server.xml dentro do context da sua aplicação e depois vc precisa mapea-lo no web.xml para então usar na sua aplicação.
da uma olhada aqui q vc vai entender melhor http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html
Abss
jhieiy
Janeiro 25, 2011, 3:27pm
#6
Ok fiz exatamente o que vc me passou no site:
CATALINA_HOME \lib - obdc14.jar ( do oracle )
no server.xml ( que tem que colocar o Context da minha aplicação esta exatamente assim ) , veja se é isso:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/myapp" docBase="myapp"
debug="1" reloadable="true" crossContext="true">
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
username="system" password="******" maxActive="20" maxIdle="10"
maxWait="-1"/>
</Context>
</Host>
</Engine>
</Service>
</Server>
na miinha aplicacao tenho o web.xml que coloquei a referencia do datasource:
<resource-ref>
<description>Web Database</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
e no meu persistence.xml faço o JNDI
org.hibernate.ejb.HibernatePersistence
jdbc/myoracle
quando acesso um Manager bean que faz a consulta ele dá erro no JNDI conforme abaixo:
javax.persistence.PersistenceException: [PersistenceUnit: myPersistence] Unable to build EntityManagerFactory
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
......
org.hibernate.HibernateException: Could not find datasource
org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79)
....
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
org.apache.naming.NamingContext.lookup(NamingContext.java:803)
Eu fiz um teste utilizando o abaixo que funcionou :
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
Porém quando é no persistence.xml ele não encontra…
Estou quase lá hehehe você pode me mostrar como está seu persistence.xml ?
tentei assim:
jdbc/myoracle
e assim
java:/myoracle
ambos ocorre o mesmo erro!
Então eu não uso JPA e tambem não cuido desse parte, deixei tudo com o spring =D.
Mas ve se isso te ajuda http://www.guj.com.br/java/87502-jpa–jndi–locaweb-resolvido
jhieiy
Janeiro 26, 2011, 9:03am
#8
Valeu Vinicius pela ajuda, Por fim consegui resolver ,
e claro vou deixar aqui para os que forem usar o Tomcat 7 futuramente …
No server.xml ( tomcat7/conf/server.xml ) deixei dentro da Tag :
<Context path="/myApp" docBase="myApp" debug="1" reloadable="true" crossContext="true">
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
username="system" password="*****" maxActive="20" maxIdle="10"
maxWait="-1"/>
</Context>
E no persistence.xml eu só acrescentei a linha :
Portanto por completo fica assim:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="initConexao" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:comp/env/jdbc/myoracle</jta-data-source>
<class>br.com.myApp.Objecto1</class>
<class>br.com.myApp.Objecto2</class>
...
...
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JDBCTransactionFactory" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Valeu pela força e ajuda!!!
Taí p/ o pessoal que tiver o mesmo problema!
vlw jhieiy, eu tava com o mesmo problema porcausa da linha 14 do persistence que estava com JTA
muktkd
Outubro 18, 2012, 11:47am
#10
Esse arquivo persistence.xml fica em qual diretório??
Posso usar o hibernate.cfg.xml mesmo?
Valeu.