JPA..validar como banco está fora do ar....java.lang.IllegalStateException: Transaction not active

2 respostas
P

Olá,

uma duvida como verificar se o banco está fora do ar pois montei rotina abaixo mas me deu o

erro :

Erro no acesso ao Banco java.lang.IllegalStateException: Transaction not active

como deveria verificar se está certo dessa forma ou existe outra forma

se alguém puder me ajudar gradeceria …abs

public class TestaConexao {
	
	 public static void main(String[] args){
		 try{
		    PersistenceService service = PersistenceService.getInstance();
		    service.testaConexao();
		 }catch(Exception e){
			 System.out.println("Erro no acesso ao Banco "+e);
		 }
	 }

}

--------------------
public class PersistenceService {
	 //Attributes
    private EntityManager em;
    
    
    public static  PersistenceService instance = new PersistenceService();
    
    /**
     * Constructor
     */
   
    private PersistenceService(){
    	
    }
    
    
    public static PersistenceService getInstance() {
		return instance;
	}

	public  void testaConexao(){
    	try{
    		em = PersistenceServiceFactory.create();
    		em.getTransaction().begin();
    		System.out.println("Abriu Conexao .....");
    		em.getTransaction().commit();
    		em.close();
    	}catch(IllegalStateException i){
    		em.getTransaction().rollback();
    		System.out.println("Não abriu Conexao ...");
    	}catch(Exception e){
    		em.getTransaction().rollback();
    		System.out.println("Não abriu Conexao ...");
    	}
    	
    }
}
-------------------------------

public class PersistenceServiceFactory {
	static EntityManagerFactory emf = null;
	static EntityManager em = null;
	
    public static EntityManager create() {
    	try{
    		emf = Persistence.createEntityManagerFactory("pu2");
            System.out.println("Factory = "+emf);
            em = emf.createEntityManager();
            System.out.println("Manager = "+em);
            
    	}catch(Exception e){
    		System.out.println("Não conseguiu acesar o Banco ");
    	}
    	return em;	
    }
}

2 Respostas

D

Eu acredito que em cada acesso ao banco o ideal seria colocar no DAO (ter um DAO para cada entidade do banco que acabe por gerar uma classe também é uma boa prática) e no main da classe que está chamando um throws SQLException, assim ao entrar no método de teste ou de mexer com o banco a conexão é testada.
Exemplo:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

//esta é a nossa classe que será chamada sempre que necessário uma conexão ao DB
public class ConnectionFactory {

/*note que ao chamar o método de conexão a banco já colocamos o SQLException, caso não consiga conexão, o método retornará uma mensagem padrão*/
		public static Connection getConnection() throws SQLException {
			try {
				Class.forName("com.mysql.jdbc.Driver");
				System.out.println("Conectando ao banco");
				return DriverManager.getConnection ("jdbc:mysql://localhost/teste", "root", "");
			} catch (ClassNotFoundException e) {
				throw new SQLException (e.getMessage());
			}
		}
}
import java.sql.Connection;
import java.sql.SQLException;

//Esta é a classe que podemos testar a conexão ao banco
public class TestaConexao {

	public static void main(String[] args) throws SQLException {
		
		Connection con = ConnectionFactory.getConnection();
		
		con.close();
	}

}

Me corrijam se eu estiver errado por favor.

[]'s

romuloff

olá. conseguiu resolver este problema do thread “Transaction not active” ?

Estou tendo um problema assim

<blockquote>     Exception in thread “Thread-5” java.lang.IllegalStateException: Transaction not active

at org.hibernate.ejb.TransactionImpl.getRollbackOnly(TransactionImpl.java:110)

at org.springframework.orm.jpa.JpaTransactionManager$JpaTransactionObject.isRollbackOnly(JpaTransactionManager.java:598)

at org.springframework.transaction.support.DefaultTransactionStatus.isGlobalRollbackOnly(DefaultTransactionStatus.java:154)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:720)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)

at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)

at $Proxy122.processarRemetida(Unknown Source)</blockquote>
Criado 11 de janeiro de 2009
Ultima resposta 23 de jul. de 2010
Respostas 2
Participantes 3