Persistence.xml para conexão Oracle 11.2.0.2.0

7 respostas
N

Boa Noite, estou já há um bom tempo apanhando com as pilhas de exceção. Se algúem puder dar uma luz… Seguem os arquivos:

persistence.xml

<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence">
	<persistence-unit name="notas" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>

		<class>br.com.caelum.notasfiscais.modelo.Item</class>
		<class>br.com.caelum.notasfiscais.modelo.NotaFiscal</class>
		<class>br.com.caelum.notasfiscais.modelo.Produto</class>
		<class>br.com.caelum.notasfiscais.modelo.Usuario</class>

		<properties>
			<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" />
			<property name="hibernate.connection.url"
				value="jdbc:oracle:thin:@localhost:1521:notasfiscais" />
			<property name="hibernate.connection.username" value="system" />
			<property name="hibernate.connection.password" value="admin" />

			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
		</properties>
	</persistence-unit>
</persistence>

Teste.java

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DAO<Produto> dao = new DAO<Produto>(Produto.class);
		Produto produto = new Produto();
		produto.setDescricao("Descricao do Produto");
		produto.setNome("Nome do Produto");
		produto.setPreco(14.3);
		dao.adiciona(produto);

	}

}

Produto.java

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

@Entity
public class Produto {
	@Id @GeneratedValue
	private Long id;

	private String nome;

	private String descricao;

	private Double preco;
        //getters and setters

Método adiciona da classe DAO

public void adiciona(T t) {
		//consegue a entity manager
		EntityManager em = new JPAUtil().getEntityManager();
		//abre transacao
		em.getTransaction().begin();

		//persiste o objeto
		em.persist(t);

		//commita a transacao
		em.getTransaction().commit();

		//fecha a entity manager
		em.close();
	}

JPAUtil.java

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class JPAUtil {
	private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("notas");

	public EntityManager getEntityManager() {
		return emf.createEntityManager();
	}
}

e, por fim, a exceção:

log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry).

log4j:WARN Please initialize the log4j system properly.

Exception in thread main javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Cannot open connection

at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215)

at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148)

at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1225)

at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:63)

at br.com.caelum.notasfiscais.dao.DAO.adiciona(DAO.java:19)

at br.com.caelum.notasfiscais.teste.Teste.main(Teste.java:18)

Caused by: org.hibernate.exception.JDBCConnectionException: Cannot open connection

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)

at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)

at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)

at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)

at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81)

at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)

at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60)

 2 more

Caused by: java.sql.SQLRecoverableException: IO Error: Got minus one from a read call

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419)

at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:536)

at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:228)

at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)

at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)

at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)

 7 more

Caused by: oracle.net.ns.NetException: Got minus one from a read call

at oracle.net.ns.Packet.receive(Packet.java:286)

at oracle.net.ns.NSProtocol.connect(NSProtocol.java:287)

at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1054)

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308)

 15 more

Desculpem pelo excesso de linhas, mas já “googlei” bastante e os erros só estão mudando, alguém pode dar um help, depois desse abuso de linhas??

Vlw!!!

7 Respostas

I

Tente

e não se esqueça de pegar a versão mais recente do jar ojdbc.

Para o Oracle 11g use o ojdbc6.jar

N

Opa!! Outra exceção:

Eu cheguei a descompactar o ojdbc6.jar e no MANIFEST.MF:

anifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_24-rev-b08 (Sun Microsystems Inc.)
Implementation-Vendor: Oracle Corporation
Implementation-Title: JDBC
Implementation-Version: 11.2.0.2.0
Repository-Id: JAVAVM_11.2.0.2.0_LINUX_100812.1
Specification-Vendor: Sun Microsystems Inc.
Specification-Title: JDBC
Specification-Version: 4.0
Main-Class: oracle.jdbc.OracleDriver
sealed: true

Name: oracle/sql/converter/
Sealed: false

Faz um bom tempo que estou apanhando com isso!!!

Brigadão, se tiver outra sacada… manda, por favor!!!

Name: oracle/sql/
Sealed: false

Name: oracle/sql/converter_xcharset/
Sealed: false

Aleksandro

Faça assim:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="notasfiscais"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" /> <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:notasfiscais" /> <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" /> <property name="hibernate.connection.username" value="system" /> <property name="hibernate.connection.password" value="admin" /> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> </properties> </persistence-unit> </persistence>

1 - Procure deixar os nomes iguais unit name = notasfiscais e o seu bd notasfiscais , outra coisa, seu mapeamento das sua entidades esta errado, primeiro faça os testes de conexão …retire seus class do seu persistence…

Tire fora isto aqui …

<class>br.com.caelum.notasfiscais.modelo.Item</class> <class>br.com.caelum.notasfiscais.modelo.NotaFiscal</class> <class>br.com.caelum.notasfiscais.modelo.Produto</class> <class>br.com.caelum.notasfiscais.modelo.Usuario</class>

I

Se estiver usando jpa 2.0 use esse cabeçalho

Se for a 1.0

N

Muito obrigado pela ajuda!!

Vlw Ismael e Aleksandro!!!

Abs

Aleksandro

Newbe Tech:
Muito obrigado pela ajuda!!

Vlw Ismael e Aleksandro!!!

Abs

Deu certo ? se sim, encerre-o colocando como “Resolvido”

Estamos aqui para ajudar …bons códigos …

I

Aleksandro:
Newbe Tech:
Muito obrigado pela ajuda!!

Vlw Ismael e Aleksandro!!!

Abs

Deu certo ? se sim, encerre-o colocando como “Resolvido”

Estamos aqui para ajudar …bons códigos …

É como o Aleksandro disse, estamos aqui para isso :smiley: , bons estudos

Criado 2 de outubro de 2012
Ultima resposta 3 de out. de 2012
Respostas 7
Participantes 3