Dúvida Spring

9 respostas
paulohbmetal

E aí galera, blz?

Bom é o seguinte, estou estudando o spring e estou tentando fazer uma coisa que pelo que já achei na net nada me “clareou”…

Bom, estou querendo usar minha estrutura que já está pronta(DAO) com o spring. Mas pelo que vi, para que eu possa usar o spring com meus DAO’s tenho que usar a estrutura DAO feita no spring, por exemplo minhas classes de implementação DAO herdando de JdbcDaoSupport(spring).

Mas eu queria deixar o Spring o menos “intrusivo” possível. Tipo assim, eu teria minha configuração de dataSouce no xml, com controle de transações e na minha classe de DB eu pegaria a conexão do Spring através do dataSource configurado no mesmo.

Entenderam:?:
Se sim, será que tem como:?:

A Paz!!

9 Respostas

cv1

Eh soh tratar o seu DAO como um bean qualquer, e injetar o DataSource no construtor dele… sem misterio 8)

Lucas_Teixeira

Eu particularmente prefiro manter a injeção via setter usano o autowire byName dele… Faz com que o código do XML fique muito mais limpo.

cv1

O problema de fazer isso eh errar no XML e esquecer de passar o DS pro setter… boom :frowning:

Lucas_Teixeira

autowire!!!

mesma propriedade, mesmo bean… E a super inteligência semi-artificial do Spring (as vezes creio que ele pensa melhor que eu).

(;

cv1

Hmm… verdade… e se vc esquecer de declarar o DS no XML inteiro, vc leva exception… eu viajei aqui e achei que ele falhava silenciosamente, setando null :slight_smile:

paulohbmetal

Certo, mas meu dataSouce fica numa classe que implementa uma interface DataBase que criei. Daí meus DAO’s executam o SQL nesta classe DataBase.

Eu criei uma classe de contexo e a partir desta classe eu obtenho o dataSouce que está configurado no xml do Spring. Bom até aí é lindo… Na minha classe de DataBase eu obtenho a instancia de DataSource e daí obtenho minha conexao. Mas o problema é que a conexao está autoCommit(true) automática.

O Spring não teria que controlar isso já? Pois eu obtive a conexao através do dataSource do Spring.

A Paz!!

Lucas_Teixeira

Yeah! Agora também tem que ser uma ‘mulinha’ pra desenvolver um sistema de conexão inteiro usando apenas UM datasource e esquecer de declarar ele né?

ehehehehe

(;

paulohbmetal

Meu xml está +/- assim:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location"><value>/db.properties</value></property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
	<property name="url"><value>${jdbc.url}</value></property>
	<property name="username"><value>${jdbc.username}</value></property>
	<property name="password"><value>${jdbc.password}</value></property>
</bean>


<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource"><ref bean="dataSource"/></property>
</bean>

<bean name="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
</bean>
    
<!-- AutoProxy -->
<bean name="autoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	<property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
        <property name="beanNames">
            <value>*Facade</value>
        </property>
</bean>

Daí quero controlar minhas transações nos Façades.

A Paz!!

paulohbmetal

É… Ele não está controlando a transação… Tipo assim, se eu obtive a connection do dataSource do Spring nesta minha configuração aí em cima, terei eu que rpeocupar com em setar a propriedade setAutoCommit(false)?

Alguém?

A paz!!

Criado 13 de junho de 2005
Ultima resposta 13 de jun. de 2005
Respostas 9
Participantes 3