TomCat + JNDI + Hibernate

0 respostas
insuportavel

Boa noite a todos.

Estou tentando aprender sobre JNDI, como tinha duvidas precisei perguntar para uma galera e a resposta que eu tive foi a de montar a seguinte estrutura:

No TomCat -->

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/pcp">
  <Resource
      auth="Container"
      driverClassName="oracle.jdbc.driver.OracleDriver"
      maxActive="20"
      maxIdle="10"
      maxWait="-1"
      name="jdbc/oracleHome"
      type="javax.sql.DataSource"
      url="jdbc:oracle:thin:@127.0.0.1:1521:XE"
      username="marcelo"
      password="marcelo"   />
</Context>

Ai com o o Hibernate fiz o seguinte criei um arquivo hibernate.cfg.xml e o coloquei dentro de src -->

ORACLE HOME JNDI -->
		<property name = "hibernate.connection.datasource">java:comp/env/jdbc/oracleHome</property>
		<property name = "hibernate.transaction.factory_class">net.sf.hibernate.transaction.JTATransactionFactory</property>  
		<property name = "hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>		
		<property name = "hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
		<property name = "hibernate.connection.username">marcelo</property>
		<property name = "hibernate.connection.password">marcelo</property>

Criei um arquivo context-desenv.xml e o coloquei no WEB-INF -->

<Context docBase="pcp" path="/pcp" reloadable="true">
  <Resource name="jdbc/oracleHome"
  		auth="Container"
  		type="javax.sql.DataSource"
  		driverClassName="oracle.jdbc.driver.OracleDriver"
  		url="jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SID = XE)))"
  		username="marcelo"
  		password="marcelo"/>
</Context>

e no web.xml escrevi assim -->

<resource-ref>          
        <description>Oracle Datasource </description>
        <res-ref-name>jdbc/oracleHome</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Criei um bean simples para gerar uma tabela no banco de dados -->

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Fabrica {
	@Id
	private Long id;
	private String nome;
	private String codigo;
	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
}

e uma classe para criar esta tabela atraves deste bean -->

public class GeraBanco {
	public static void main(String[] args) {
		Configuration configuration = new AnnotationConfiguration();
		configuration.configure();
		SchemaExport schemaExport = new SchemaExport(configuration);
		schemaExport.create(true, true);
	}
}

Só que qdo. executo o método desta classe, obtenho o seguinte erro/exception—>

19:39:42,000  INFO SchemaExport:152 - Running hbm2ddl schema export
19:39:42,000 DEBUG SchemaExport:168 - import file not found: /import.sql
19:39:42,000  INFO SchemaExport:177 - exporting generated schema to database
19:39:42,031 FATAL DatasourceConnectionProvider:55 - Could not find datasource: java:comp/env/jdbc/oracleHome
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(Unknown Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
	at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:27)
	at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:178)
	at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:131)
	at br.com.pcp.executavel.GeraBanco.main(GeraBanco.java:12)
19:39:42,046 ERROR SchemaExport:200 - schema export unsuccessful
org.hibernate.HibernateException: Could not find datasource
	at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:56)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
	at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:27)
	at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:178)
	at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:131)
	at br.com.pcp.executavel.GeraBanco.main(GeraBanco.java:12)
Caused by: 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(Unknown Source)
	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)
	... 6 more

Ja li as mensagens aqui mesmo no forum sobre Hibernate e JNDI com o TomCat e algumas com o JBoss, mas não consegui entender muito e sim fiquei com mais duvidas!!! :oops:

Por favor algém poderia me ajudar a enteder JNDI de forma que eu possa corrigir este erro e fazer a conexão funcionar.

Muito obrigado a todos.

Criado 24 de março de 2007
Respostas 0
Participantes 1