Duvida com Spring

8 respostas
J

O Spring não ta injetando os meus managers…

tenho eles declarados da seguinte forma:

@Bean(name = "usuarioAgendaManager") @Transactional public class UsuarioAgendaManagerImpl extends ManagerImpl<UsuarioAgenda, Long> implements UsuarioAgendaManager {

Porem quando acesso o view, eles vem nulo…

xml:

<context:annotation-config />
	<context:component-scan base-package="br.com.romulo" />

	<mvc:annotation-driven />

	<tx:annotation-driven />

e

<tx:annotation-driven transaction-manager="transactionManager" />
	
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:datasource.properties</value>
		</property>
	</bean>


	<!-- Data Source config -->

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	    <property name="defaultTransactionIsolation" value="2" />
		<property name="url" value="${jdbc.url}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		
		<property name="maxActive" value="50" />
		<property name="logAbandoned" value="true" />
		<property name="validationQuery" value="SELECT * FROM USUARIOS" />
		<property name="testOnBorrow" value="true" />
	</bean>
	
	<bean id="sessionFactory"
        class="net.sourceforge.sannotations.hibernate.AutomaticAnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="schemaUpdate" value="false" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                   ${hibernate.dialect}
                </prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.transaction.flush_before_completion">false</prop>
                <!-- <prop key="hibernate.current_session_context_class">thread</prop> -->
                <prop key="hibernate.bytecode.use_reflection_optimizer">false</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <sa:annotation-autoload />

Será q eesqueci de algo?

8 Respostas

von.juliano

Supondo que você esteja usando Struts 2 (por exemplo), você pode injetar seu manager pelo construtor ou pelo set, usando @Autowired

@Autowired public AlgumaCoisaAction(UsuarioAgendaManager manager) { this.manager = manager; }Você fez algo do tipo? Não sei se entendi bem sua dúvida, mas vê se ajuda!

Flw! :thumbup:

J

To usando ZK.

von.juliano

Não sei como funciona, mas não deve ser muito diferente disso, na sua classe tem algo assim?

J

Não tem… Hj a noite eu vou verificar… e testar dessa forma…

J

Outra pergunta, no JSF eu coloco os beans no Faces Config. Será por isso que eu não preciso colocar nada alem da declaração da variavel?

fantomas

ZK, JPA / Hibernate, ActiveMq, Spring, OSGi.

Olhei o PrimeFaces e fiquei impressionado, muito bonito, a quantidade de componentes é enorme. Só achei a demo um pouco lenta.

Qualquer momento vou estuda-lo para verificar a produtividade e a flexibilidade.

flws

J

Segue abaixo como estão as declarações das classes:

UsuarioAgendaManagerImpl:
package br.com.romulo.agenda.service;

import java.util.List;

import net.sourceforge.sannotations.annotation.Bean;
import net.sourceforge.sannotations.annotation.ConstructorArgs;
import net.sourceforge.sannotations.annotation.Property;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.springframework.transaction.annotation.Transactional;

import br.com.romulo.agenda.model.UsuarioAgenda;


@Bean(name = "usuarioAgendaManager")
@Transactional
public class UsuarioAgendaManagerImpl extends ManagerImpl<UsuarioAgenda, Long> implements UsuarioAgendaManager {
    @ConstructorArgs(@Property(bean = "sessionFactory"))

    public UsuarioAgendaManagerImpl(SessionFactory sessionFactory){
        super(sessionFactory);
    }
 
  ....  

}
Controller:
package br.com.romulo.agenda.controllers;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.ForwardEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zkplus.spring.SpringUtil;

import br.com.romulo.agenda.bean.DadosSistemaBean;
import br.com.romulo.agenda.model.UsuarioAgenda;
import br.com.romulo.agenda.service.UsuarioAgendaManager;

@Controller("cadastrarAgenda")
@Scope("session")
public class CadastrarAgenda extends GenericForwardComposer {
    private static final long serialVersionUID = 1L;
    DadosSistemaBean dsb;
    UsuarioAgendaManager uam;
    UsuarioAgenda usuarioAgenda;

    public CadastrarAgenda() {       
    }
   
    public UsuarioAgendaManager getUam() {
        return uam;
    }

    public void setUam(UsuarioAgendaManager uam) {
        this.uam = uam;
    }

   ......

}

O que aparece no debug:
DEBUG [main] (DefaultSingletonBeanRegistry.java:214) - Creating shared instance of singleton bean 'usuarioAgendaManager'
DEBUG [main] (AbstractAutowireCapableBeanFactory.java:430) - Creating instance of bean 'usuarioAgendaManager'
DEBUG [main] (AbstractAutowireCapableBeanFactory.java:504) - Eagerly caching bean 'usuarioAgendaManager' to allow for resolving potential circular references
DEBUG [main] (AbstractAutowireCapableBeanFactory.java:1098) - Added autowiring by name from bean name 'usuarioAgendaManager' via property 'messageSource' to bean named 'messageSource'
DEBUG [main] (JdkDynamicAopProxy.java:113) - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [br.com.romulo.agenda.service.UsuarioAgendaManagerImpl@47042c25]
DEBUG [main] (AbstractAutowireCapableBeanFactory.java:458) - Finished creating instance of bean 'usuarioAgendaManager'

J

Aao ler essa frase “Finished creating instance of bean ‘usuarioAgendaManager’” me dei conta que o nome da variavel deveria ser ‘usuarioAgendaManager’ e nao uam como estava usando… Na verdade eu imaginava que ele fizesse a injeção pela declaração UsuarioAgendaManager e não nome da variavel… Agora está funcionando tudo corretamente,…

Criado 30 de setembro de 2010
Ultima resposta 30 de set. de 2010
Respostas 8
Participantes 3