Arquitetura utilizando Spring 2.5

3 respostas
antoniopopete

Utilizando spring tenho algumas dúvidas em relação ao que devo fazer ou não.

*Devo declarar todas minhas classes de service como @Transactional? *Se eu preciso de um serviço de outro bean, devo declarar esse bean como atributo e gerenciar isso pelo application context? Por exemplo, eu tenho uma associação taxonomia x conceito, onde para salvar um conceito eu devo salvar todos cursos referentes aquele conceito, mas tenho que fazer algumas validações antes de salvar os conceitos. Eu fiz da seguinte forma.
<bean id="taxonomiaService" parent="txProxyTemplate">
		<property name="target">
			<bean
				class="br.ucsal.projeto.domain.services.impl.TaxonomiaServiceImpl">
				<property name="taxonomiaDAO">
					<ref bean="taxonomiaDAO" />
				</property>
				<property name="conceitoService">
					<ref bean="conceitoService" />
				</property>
			</bean>
		</property>
	</bean>
E então o método da classe de serviço
public void save(List<ConceitoModel> conceitos) {
		
		TaxonomiaModel dominio = ConceitosUtil.getDominio(conceitos);
			
		Long id = taxonomiaDAO.save(dominio);
		dominio.setId(id);
		
		conceitoService.saveAll(conceitos, dominio);
		
	}

* Devo instanciar beans na mão grande?

Essas são algumas duvidas....

3 Respostas

rodrigo_corinthians

1) Na minha humilde opinião deve-se colocar @Transactional nos métodos que necessitam e não na classe, afinal um método get não precisa de transação, certo?

2) Eu não faria isso(service dentro de outro), criaria um PojoBo que teria esses 2 services, exemplo...
@Transactional 
class PojoBo {
@AutoWired
private TaxonomiaService taxonomiaService;
@AutoWired
private ConceitoService conceitoService;

//get's and set's
}
3) Sim afinal o bean não precisa ser controlado pelo Spring, certo?

Outra coisa usa a configuração via Annotation porque facilita e muito, adeus xml. rs

antoniopopete

Adicionar uma classe para encapsular os dois services não seria “uma camada a mais”???
E outra coisa, por que instanciar na mão grande se temos IOC?
Para você colocar @transational nos métodos é necessário alguma configuração na classe?

rodrigo_corinthians

Eu não vejo como outra camada e sim como uma melhor forma de separação e reaproveitamento de negócio.

Para que usar ioc se o bean nunca terá um comportamento diferente? Ou seja uma PessoaBean sempre será um Object Mapping Orm/ou espelho da tabela, certo? E outra teoricamente esse Bean deverá vir instanciado com as devidas informações do user…

Não, apenas coloque a annotation no método.

Criado 16 de maio de 2008
Ultima resposta 27 de mai. de 2008
Respostas 3
Participantes 2