Problemas com Spring

3 respostas
J

Pessoal estou tentando fazer um Projeto Java para WEB com JSF 2, Hibernate, Spring e Primefaces. Mas estou com dificuldade na configuração do Spring.
Alguém sabe me dizer que erro é esse?

Erro do Console:

Informações: columns: [id, usuariosy, usuariosx, transy, transx, acessox, data, acessoy, valory, valorx]
Nov 19, 2012 4:51:35 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
Informações: foreign keys: []
Nov 19, 2012 4:51:35 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
Informações: indexes: [primary]
Nov 19, 2012 4:51:35 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
Informações: schema update complete
[b]org.springframework.orm.hibernate3.HibernateSystemException: Unable to locate UserTransaction to check status; nested exception is org.hibernate.TransactionException: Unable to locate UserTransaction to check status[/b]
	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)
	at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
	at org.springframework.orm.hibernate3.HibernateTemplate.loadAll(HibernateTemplate.java:584)

Minha configuração do Spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <!-- habilita a configuração por annotations -->
    <context:annotation-config />
	
    <!-- define os pacotes/subpacotes que onde serão procurados beans do spring -->
    <context:component-scan base-package="br.com.codigosfontes" />
	
    <!-- Parâmetros de conexão com o banco de dados -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/infocanais" />
        <property name="username" value="root" />
        <property name="password" value="equipeinfo" />
    </bean>
    
    <!-- Propriedades do hibernate -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
            
        <property name="dataSource" ref="dataSource" />
        <property name="exposeTransactionAwareSessionFactory"><value>true</value></property>
        
        <property name="annotatedClasses">
            <list>
                <value>br.com.codigosfontes.domain.Apf</value>
            </list>
        </property>
        
        <property name="hibernateProperties">
            <props>
                <!--<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> -->
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>
                <prop key="current_session_context_class">thread</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="connection.pool_size">5</prop>
                <prop key="hibernate.use_outer_join">true</prop>
                <prop key="hibernate.max_fetch_depth">1</prop>
                <prop key="hibernate.jdbc.batch_size">0</prop>          
                <prop key="hibernate.hbm2ddl.auto">update</prop>                              
            </props>
        </property>
        
    </bean>
    
    <!-- Injeta uma sessão do hibernate -->   
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>  
    
    <!-- DAOs -->
    <bean id="apfDAO" 
          class="br.com.codigosfontes.dao.imp.ApfDAO">
    	<property name="hibernateTemplate" ref="hibernateTemplate" />
    </bean>
    
</beans>

Meu bean factory

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanFactory {

	private static ClassPathXmlApplicationContext ctx;

    static {
        ctx = new ClassPathXmlApplicationContext("br/com/codigosfontes/config/spring.xml");
    }

    private BeanFactory() {
    }

    public static Object getBean(String beanName) {
        return ctx.getBean(beanName);
    }
 
	public static Object getBean(String beanName, Class classe) {
        return ctx.getBean(beanName, classe);
    }
	
}
@ManagedBean
@RequestScoped
public class IndexMbean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ApfBO apfbo;
	private List<Apf> listarDados;

	private PieChartModel graficoPizza;
	private CartesianChartModel graficoBarra;

	// construtor
	public IndexMbean() {
		apfbo = new ApfBO();
		listar();
	}

	public void gerarGraficoBarra() {
		graficoBarra = new CartesianChartModel();

		for (Apf apf : listarDados) {
			ChartSeries dados = new ChartSeries();
			dados.setLabel(apf.getData());
			dados.set("APF", apf.getTransx());
			dados.set("APF", apf.getTransy());
			graficoBarra.addSeries(dados);
		}
	}

	@SuppressWarnings("unused")
	private void gerarGraficoPizza() {
		graficoPizza = new PieChartModel();

		for (Apf apf : listarDados) {
			graficoPizza.set(apf.getData(), apf.getTransx());
			graficoPizza.set(apf.getData(), apf.getTransy());
		}
	}

	public void listar() {

		try {

			// recuperar todos os candidatos do banco
			listarDados = apfbo.buscaTodos();

		} catch (Exception x) {
			x.printStackTrace();
		}
	}

	public List<Apf> getListarDados() {
		return listarDados;
	}

	public void setListarDados(List<Apf> listarDados) {
		this.listarDados = listarDados;
	}

	public PieChartModel getGraficoPizza() {
		return graficoPizza;
	}

	public CartesianChartModel getGraficoBarra() {
		return graficoBarra;
	}

	public void setGraficoPizza(PieChartModel graficoPizza) {
		this.graficoPizza = graficoPizza;
	}

	public void setGraficoBarra(CartesianChartModel graficoBarra) {
		this.graficoBarra = graficoBarra;
	}

}

Se alguém já passou por esse erro. Desde já agradeço a ajuda.

3 Respostas

L

Acredito que o problema esteja no parâmetro Hibernate.transaction.factory_class, comente ele e teste novamente.

JeffersonFelix

falta configurar o bean txManager para hibernate.

Adicione isto na sua configuração do Spring:

<bean id="txManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
		<property name="dataSource" ref="dataSource" />
</bean>

E também isto para o Spring encontrar métodos transacionais automaticamente:

<tx:annotation-driven />

Nos métodos que você precisar de transação, anote-os com @Transactional.

É isso.

JeffersonFelix

JTATransactionFactory só funciona em AS. Pode ser que ele esteja usando Tomcat, que não dá suporte para JTA.
Deve ser isso.

Criado 19 de novembro de 2012
Ultima resposta 20 de nov. de 2012
Respostas 3
Participantes 3