Javax.persistence.TransactionRequiredException: no transaction is in progress

Ola pessoal estou com um problema muito estranho seguente:

o persistence.xml

[code]<?xml version=“1.0” encoding=“UTF-8”?>
<persistence version="1.0"
xmlns=“http://java.sun.com/xml/ns/persistence”>
<persistence-unit name=“JIMAGE” transaction-type=“RESOURCE_LOCAL”>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.uninove.jimage.to.MetodosDeClassificacaoTO</class>
<properties>
<property name=“hibernate.dialect” value=“org.hibernate.dialect.MySQLDialect” />
<property name=“hibernate.connection.driver_class” value=“com.mysql.jdbc.Driver” />

		&lt;property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jimage" /&gt;
		&lt;property name="hibernate.connection.password" value="******" /&gt;
		&lt;property name="hibernate.connection.username" value="root" /&gt;
		&lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt;

		&lt;property name="hibernate.show_sql" value="true" /&gt;
		&lt;property name="hibernate.format_sql" value="true" /&gt;

		&lt;property name="hibernate.transaction.auto_close_session" value="true" /&gt;
		&lt;property name="hibernate.transaction.flush_before_completion" value="true" /&gt;
	&lt;/properties&gt;
&lt;/persistence-unit&gt;

</persistence>[/code]

classe MetodosDeClassificaoTO.java

@Entity
@Table(name = "METODOS_DE_CLASSIFICAO")
@NamedQueries({
    @NamedQuery(name = "MetodosDeClassificacaoTO.findAll", query = "SELECT m FROM MetodosDeClassificacaoTO m"),
    @NamedQuery(name = "MetodosDeClassificacaoTO.findById", query = "SELECT m FROM MetodosDeClassificacaoTO m WHERE m.id = :id"),
    @NamedQuery(name = "MetodosDeClassificacaoTO.findByNome", query = "SELECT m FROM MetodosDeClassificacaoTO m WHERE m.nome = :nome")})
public class MetodosDeClassificacaoTO implements Serializable {

	
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    @Basic(optional = false)
    @Column(name = "NOME")
    private String nome;

gets sets...

ai estou tentando fazer o seguinte… na minha classe dao…

[code]package br.uninove.jimage.dao;

import java.util.List;

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

import br.uninove.jimage.to.MetodosDeClassificacaoTO;

public class JImageDao {

private EntityManager em;

public JImageDao(){
	if ( em == null ) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("JIMAGE");
		em = emf.createEntityManager();
	}
}
....

public void saveMetodosDeClassificacao(MetodosDeClassificacaoTO to){
	em.persist(to);  
	em.flush();
}


public static void main(String[] args) {
	JImageDao dao = new JImageDao();

	MetodosDeClassificacaoTO to1 = new MetodosDeClassificacaoTO();
	MetodosDeClassificacaoTO to2 = new MetodosDeClassificacaoTO();
	MetodosDeClassificacaoTO to3 = new MetodosDeClassificacaoTO();
	MetodosDeClassificacaoTO to4 = new MetodosDeClassificacaoTO();
	MetodosDeClassificacaoTO to5 = new MetodosDeClassificacaoTO();
	
	to1.setNome("Matriz de Co-ocorrência");
	to2.setNome("Matriz de Comprimento");
	to3.setNome("Matriz de Diferença de Níveis de Cinza");
	to4.setNome("Matriz de Soma e Diferença do Histograma");
	to5.setNome("Matriz do Momento do Histograma");
	
	dao.saveMetodosDeClassificacao(to1);
	dao.saveMetodosDeClassificacao(to2);
	dao.saveMetodosDeClassificacao(to3);
	dao.saveMetodosDeClassificacao(to4);
	dao.saveMetodosDeClassificacao(to5);
}

}
[/code]

que dar o error…

23:26:07,536 DEBUG QueryTranslatorImpl:239 - HQL: SELECT m FROM br.uninove.jimage.to.MetodosDeClassificacaoTO m WHERE m.nome = :nome 23:26:07,536 DEBUG QueryTranslatorImpl:240 - SQL: select metodosdec0_.ID as ID2_, metodosdec0_.NOME as NOME2_ from METODOS_DE_CLASSIFICAO metodosdec0_ where metodosdec0_.NOME=? 23:26:07,536 DEBUG ErrorCounter:91 - throwQueryException() : no errors 23:26:07,537 DEBUG SessionFactoryImpl:446 - Checking 0 named SQL queries 23:26:07,566 DEBUG SessionImpl:247 - opened session at timestamp: 12728535675 23:26:07,578 DEBUG AbstractSaveEventListener:330 - delaying identity-insert due to no transaction in progress Exception in thread "main" javax.persistence.TransactionRequiredException: no transaction is in progress at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:301) at br.uninove.jimage.dao.JImageDao.saveMetodosDeClassificacao(JImageDao.java:33) at br.uninove.jimage.dao.JImageDao.main(JImageDao.java:53)

Alguém poderia me ajudar?

jc.thalys,

Como voce esta trabalhando com tipo de transacao RESOURCE_LOCAL, voce necessitara em controlar transacao toda vez que executar DML no banco.

Em seus testes, tente abrir uma transacao. Ao final do processo, dispare o commit. Segue:

em.getTransaction().begin();

dao.saveMetodosDeClassificacao(to1);
dao.saveMetodosDeClassificacao(to2);
dao.saveMetodosDeClassificacao(to3);
dao.saveMetodosDeClassificacao(to4);
dao.saveMetodosDeClassificacao(to5);

em.getTransaction().commit();

Abracos

Ola, tentei

public void saveMetodosDeClassificacao(MetodosDeClassificacaoTO to){
		em.getTransaction().begin();
		em.persist(to);  
		em.flush();
		em.getTransaction().commit();
	}
[/code] so que na linha [code]em.getTransaction().begin();[/code] ele da [code]22:15:15,061 DEBUG AbstractBatcher:418 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
22:15:15,065 DEBUG AbstractFlushingEventListener:134 - processing flush-time cascades
22:15:15,066 DEBUG AbstractFlushingEventListener:177 - dirty checking collections
22:15:15,067 DEBUG AbstractFlushingEventListener:108 - Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
22:15:15,067 DEBUG AbstractFlushingEventListener:114 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
22:15:15,068 DEBUG Printer:106 - listing entities:
22:15:15,069 DEBUG Printer:113 - br.uninove.jimage.to.MetodosDeClassificacaoTO{id=2, nome=Matriz de Co-ocorrência}
22:15:15,069 DEBUG JDBCTransaction:134 - commit
22:15:15,069 DEBUG AbstractFlushingEventListener:134 - processing flush-time cascades
22:15:15,069 DEBUG AbstractFlushingEventListener:177 - dirty checking collections
22:15:15,069 DEBUG AbstractFlushingEventListener:108 - Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
22:15:15,069 DEBUG AbstractFlushingEventListener:114 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
22:15:15,070 DEBUG Printer:106 - listing entities:
22:15:15,070 DEBUG Printer:113 - br.uninove.jimage.to.MetodosDeClassificacaoTO{id=2, nome=Matriz de Co-ocorrência}
22:15:15,070 DEBUG JDBCTransaction:227 - re-enabling autocommit
22:15:15,070 DEBUG JDBCTransaction:147 - committed JDBC Connection
22:15:15,071 DEBUG ConnectionManager:427 - aggressively releasing JDBC connection
22:15:15,071 DEBUG ConnectionManager:464 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
22:15:15,073 DEBUG AbstractEntityManagerImpl:406 - mark transaction for rollback
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.SessionException: Session is closed!
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
	at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:41)
	at br.uninove.jimage.dao.JImageDao.saveMetodosDeClassificacao(JImageDao.java:31)
	at br.uninove.jimage.dao.JImageDao.main(JImageDao.java:56)
Caused by: org.hibernate.SessionException: Session is closed!
	at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72)
	at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1346)
	at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
	... 2 more

alguem tem alguma dica?

deixando o begin e commit no em cada metodo funcionou…

só tirei as linhas do persistence.xml

<property name=“hibernate.transaction.auto_close_session” value=“true” />
<property name=“hibernate.transaction.flush_before_completion” value=“true” />