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.