Erro JPA JTDS SQLSERVER 2008

6 respostas
R

Boa tarde.
Seguinte, fiz uma configuraçãozinha persistence XML, cirei as classes e fiz um main para inserir um registro no sqlserver 2008.
Não acontece nenhum erro, e o netbeans me diz que o objeto foi construído com sucesso, porém ao logar no sqlserver2008 ( com o banco de dados já criado no próprio sql), a tabela que montei não é criada e obviamente o registro que persisti também não é gerado.

Eu (iniciante), e mais uns amigos que trabalham com java demos uma olhada, debugamos, porém eles me disseram que está tudo ok.

Abaixo o source do persistence, que é onde penso que deve haver algum erro.

[i]<?xml version="1.0" encoding="UTF-8"?>


org.hibernate.ejb.HibernatePersistence

jpateste.entity.Pessoa

<properties>
<!-- Define o tipo de Dialeto a ser considerado no BD -->
  <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<!-- Define que, qualquer alteração na minha tabela o JPA atualizará minha entidade -->  
  <property name="hibernate.hbm2ddl.auto" value="update"/>
<!-- Permite a visualização do SQL no console -->  
  <property name="hibernate.show_sql" value="true"/>
  <property name="hibernate.format_sql" value="true"/>
  
<!-- Dados de acesso ao BD -->  
  <property name="javax.persistence.jdbc.driver" value="net.sourceforge.jtds.jdbc.Driver"/>
  <property name="javax.persistence.jdbc.url" value="jdbc:jtds:sqlserver://localhost:1433/JPAteste"/>
  <property name="javax.persistence.jdbc.user" value="sa"/>
  <property name="javax.persistence.jdbc.password" value="sa"/>

</properties>
[/i]

Alguma alma caridosa poderia me ajudar?

6 Respostas

D

Só com o persistence.xml é impossível saber, né meu caro.
Qual a estrutura da classe?
Posta os códigos das classes envolvidas na questão

R

//Classe Pessoa

[i]import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

import javax.persistence.Table;

@Entity
@Table(name=“TB_Pessoa”)

public class Pessoa implements Serializable {

@Id

@GeneratedValue(strategy= GenerationType.IDENTITY)

@Column(name=ID_Pessoa)

private Long id;

@Column(name=Idade_Pessoa)

private byte idade;

@Column(name=Nome_Pessoa)

private String nome;
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public byte getIdade() {
    return idade;
}

public void setIdade(byte idade) {
    this.idade = idade;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

}

[/i]

//Classe Onde crio as conexões

[i]

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import jpateste.entity.Pessoa;

public class TesteInsere {

public static void main(String args[]) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("sistemaSQLServer");
    EntityManager em = emf.createEntityManager();

    Pessoa teste = new Pessoa();
    teste.setIdade((byte) 4);
    teste.setNome("Poca gente");

    em.getTransaction().begin();
    em.persist(teste);
    em.getTransaction().commit();
    em.close();
}

}
[/i]

Valeu!

R

Segue abaixo a Exceprion lançada pelo NetBenas:

debug:

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

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See <a href="http://logging.apache.org/log4j/1.2/faq.html#noconfig">http://logging.apache.org/log4j/1.2/faq.html#noconfig</a> for more info.

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

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

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

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

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

at jpateste.teste.TesteInsere.main(TesteInsere.java:19)

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)

… 1 more

Caused by: java.sql.SQLException: Network error IOException: Connection refused: connect

at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:410)

at net.sourceforge.jtds.jdbc.ConnectionJDBC3.(ConnectionJDBC3.java:50)

at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)

at java.sql.DriverManager.getConnection(DriverManager.java:582)

at java.sql.DriverManager.getConnection(DriverManager.java:154)

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

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

… 6 more

Caused by: java.net.ConnectException: Connection refused: connect

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)

at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:529)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:307)

at net.sourceforge.jtds.jdbc.SharedSocket.(SharedSocket.java:257)

at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:311)

… 12 more

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 2 minutos 33 segundos)

Apesar de no final ele aparecer construído com sucesso, ele não insere o registro no banco.

D

Camarada, siga estas dicas http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

A parte do warning é do jar do log4j que não está no projeto.
Agora, o que chama a atenção e, provavelmente, seja o motivo do teu problema, é isto

Caused by: java.sql.SQLException: Network error IOException: Connection refused: connect
Ou seja, parece que o teu banco de dados não está aceitando conexões ou está offline ou a instância não é a que está rodando ou está errado o nome ou o firewall está impedindo a conexão

R

Certo.
Eu já tinha tentado desativar o firewall, mas nada adiantou.
Vou dar mais uma olhada na instância, mas pelo que vi está tudo ok.

De qualquer forma agradeço a ajuda, assim que resolver eu posto.

R

Bom dia.

Resolvido!

No configuration Manager reparei que na aba Protocols for MSSQLServer do SQLSERVER Network configuration, o TCP/IP estava desativado.
Habilitei ele e restartei o serviço , ai a aplicação rodou sem problemas.
Caso alguém tenha problemas parecidos segue abaixo um link de um tópico que me ajudou:

http://www.guj.com.br/java/228640-resolvido-conexao-jdbc-sql-server-2008

Grato pela ajuda drsmachado.

Criado 9 de outubro de 2011
Ultima resposta 10 de out. de 2011
Respostas 6
Participantes 2