public void cz.test.DaoA.setDaoB(cz.test.DaoB); predpokladam, ze DaoB bude taky obalene transakcni proxynou proto, je tam ten mismatch. Vemte DaoB udelejte extract interface a ten pouzivejte vsude v DaoA. To same udelejte i s DaoA, aby jste nikde nepracoval primo s tridou, ale rozhranim. Druhou moznosti je zapnout CGlib proxy, Spring pak nepouziva JDK Proxy, takze vase objekty nepotrebuji ty interfacy. Se setupem je ovsem vetsi prace.
2011/1/18 msk.conf <[email protected]>: > Ahoj. > > Zapasim so spring + hibernate + deklarativnymi transakciami. V projekte mam > niekolko DAO tried, > ktore dedia od spolocnej triedy DaoBase spolocne veci ( session factory, > template atd... ). > > Beany su vsetky autowired, pouzivam component-scan. > > @Component > public class DAOBase implements Serializable { > > protected HibernateTemplate hibernate; > > protected JdbcTemplate jdbc; > > protected SessionFactory sessionFactory; > > // @Autowired settre > > } > > @Component > public class DaoA extends DAOBase { > > //@Autowired > private DaoB daob; > > //@Autowired > public void setDaoB(DaoB db) { > this.daob = db; > } > > } > > ... DaoB, ... DaoC, ... DaoD ... > > Pokym nezapnem transakcie, autowiring funguje, tzn. bean DaoA ma nasetovane > vsetky zdedene atributy ( hibernate, jdbc, sessionFactory ) aj referenciu na > DaoB. > Funguje setter-injection aj attribute-injection, projekt normalne nabehne a > funguje. > > Problem nastane v momente, ked zapnem > <tx:annotation-driven transaction-manager="transactionManager"/>. > > Vtedy zacne lietat vynimka "IllegalArgumentException: argument type > mismatch" a tvrdi, ze: > > "Error creating bean with name 'daoA': > Injection of autowired dependencies failed; > nested exception is org.springframework.beans.factory.BeanCreationException: > Could not autowire method: public void cz.test.DaoA.setDaoB(cz.test.DaoB); > nested exception is java.lang.IllegalArgumentException: argument type > mismatch" > > Predpokladam, ze to bude sposobene tym, ze samotne zapnutie transakcii > sposobi, ze DaoA sa > stane proxy a kontext uz potom nevidi ten setter. Otazne vsak je, ako to > elegantne vyriesit. > > Pokusne som zrusil dedicnost DaoBase->DaoA, ale problem nadalej trva. > Zvlastne je, ze ked si spravim malinky pidi-projekt s dvomi bean-ami a > transakciami, > tak to funguje, takze problem mozno ani priamo nesuvisi s DaoA/DaoBase, ale > je niekde skryty. > > Nezapasil ste niekto s niecim podobnym? > > -- > Diky > > D > > -- S pozdravem Roman "Dagi" Pichlik /* http://dagblog.cz/ Blog pro kodery */
