[Javalist] Spring meghal ha interfeszt implementalok (?)
Gábor Garami
gabor.garami at hron.me
2012. Aug. 21., K, 00:27:41 CEST
A második megoldást fogom kipróbálni az elsőnek ebben a kontextusban nem
lenne értelme, csak az interface kulcsszó miatt nem fogok szemetet
gyártani. A cglib már nagyon rég benn van.
Garami Gábor
gabor.garami at hron.me
Skype: hron84
Tel: +36 20 235 9621
Sent from my T-Mobile G2
Ezt a levelet telefonról adták fel, ékezethibákat tartalmazhat.
2012.08.20. 12:00, "Böszörményi Péter" <zmblevlist at gmail.com> ezt írta:
> Megneztem, a baj egyszeru. Spring alapbol jdk proxyt akar hasznalni,
> ahhoz, hogy a beanhoz tranzakcionalis viselkedest rendelejen. A jdk proxy
> viszont csak interfacekkel mukodik, a kod viszont konkret osztalyt var,
> ezen hasal ez az egesz. Megoldasok: az ArticleFactoryhoz keszites egy
> interfacet, vagy a tx:annotation-driven taget kiegeszited egy
> proxy-target-class="true" attributummal, es berakod a cglibet fuggosegnek,
> ha meg nincs.
>
> On Sun, 19 Aug 2012 23:40:47 +0200, Gábor Garami <gabor.garami at hron.me>
> wrote:
>
> Na, ilyet meg nem pipaltam. Elvben minden standard javas, sot,
>> allitolag ajanlas az, ami nekem nem megy... meg ilyet...
>>
>> Szoval, adott ket rovid szosszenet:
>>
>> public interface IFacade<T extends IEntity> {
>>
>> //@Transactional
>> public void create(T entity);
>>
>> //@Transactional
>> public void update(T entity);
>>
>> //@Transactional
>> public void remove(T entity);
>>
>> public T find(Object id);
>>
>> public List<T> findAll();
>>
>> public List<T> findRange(int[] range);
>>
>> public int count();
>> }
>>
>> public abstract class AbstractFacade<T extends IEntity> implements
>> IFacade<T> {
>>
>> private Class<T> entityClass;
>>
>> public AbstractFacade(Class<T> entityClass) {
>> this.entityClass = entityClass;
>> }
>>
>> protected abstract EntityManager getEntityManager();
>>
>> /**
>> * Stores new entity into the database
>> * @param entity the new entity. Should <em>not</em> be persisted
>> */
>>
>> @Transactional
>> @Override
>> public void create(T entity) {
>> if(!getEntityManager().**contains(entity)) {
>> getEntityManager().persist(**entity);
>> getEntityManager().flush();
>> }
>>
>> }
>>
>> /**
>> * Updates entity in the database
>> * @param entity the subject entity. Must <em>be</em> persisted
>> */
>>
>> @Override
>> @Transactional
>> public void update(T entity) {
>> getEntityManager().merge(**entity);
>> getEntityManager().flush();
>> }
>> /**
>> * Removes entity from the database
>> * @param entity the subject entity. Must <em>be</em> persisted
>> */
>>
>> @Override
>> @Transactional
>> public void remove(T entity) {
>> getEntityManager().remove(**getEntityManager().merge(**entity));
>> getEntityManager().flush();
>> }
>>
>> // Es igy tovabb, az osszes metodushoz van megfelelo implementacio
>> }
>>
>> A problema a kovetkezo. Ha az AbstractFacade fenti definiciojat hasznalom:
>>
>> Caused by:
>> org.springframework.beans.**factory.BeanCreationException: Could not
>> autowire field: private me.hron.springblog.dao.**ArticleFacade
>> me.hron.springblog.controller.**ArticleContoroller.articleDao; nested
>> exception is java.lang.**IllegalArgumentException: Can not set
>> me.hron.springblog.dao.**ArticleFacade field
>> me.hron.springblog.controller.**ArticleContoroller.articleDao to
>> $Proxy27
>> at org.springframework.beans.**factory.annotation.**
>> AutowiredAnnotationBeanPostPro**cessor$AutowiredFieldElement.**inject(**
>> AutowiredAnnotationBeanPostPro**cessor.java:506)
>> at org.springframework.beans.**factory.annotation.**
>> InjectionMetadata.inject(**InjectionMetadata.java:87)
>> at org.springframework.beans.**factory.annotation.**
>> AutowiredAnnotationBeanPostPro**cessor.**postProcessPropertyValues(**
>> AutowiredAnnotationBeanPostPro**cessor.java:284)
>> at org.springframework.beans.**factory.support.**
>> AbstractAutowireCapableBeanFac**tory.populateBean(**
>> AbstractAutowireCapableBeanFac**tory.java:1106)
>> at org.springframework.beans.**factory.support.**
>> AbstractAutowireCapableBeanFac**tory.doCreateBean(**
>> AbstractAutowireCapableBeanFac**tory.java:517)
>> at org.springframework.beans.**factory.support.**
>> AbstractAutowireCapableBeanFac**tory.createBean(**
>> AbstractAutowireCapableBeanFac**tory.java:456)
>> at org.springframework.beans.**factory.support.**
>> AbstractBeanFactory$1.**getObject(AbstractBeanFactory.**java:294)
>> .... and so on...
>>
>> Ha viszont nem implementalom az IFacade interfeszt a fenti modon
>> (vagyis kiesik az implements IFacade<T>) akkor gyonyoruen fut a progi.
>>
>> A tesztek mindket esetben lefutnak, tehat magad a kesz, implementalt
>> dao objektumot nem befolyasolja az IFacade lete vagy nem lete, egyedul
>> a kontrollerekbe torteno injekciozas, az, ami megdoglik ilyenkor.
>>
>> Nem tudom, hogy ez-e a baj, de olyan erzesem van, mintha az IFacade
>> implementaciojanak tenye tul bonyolult lenne a kis egyszeru szoszke
>> lelkenek, es nem tudna feloldani, hogy mi a pocsot akarok en ottan.
>> Pedig hat azert ez annyira nem egy ertelmetlen dolog.
>>
>> Az app mukodik enelkul a szerkezet nelkul is, szoval en biztos nem
>> fogok a konyhakes utan nyulkalni szivbokdoses celjaval, ha ez igy nem
>> fog osszejonni, de furdalja a lelkemet, hogy ugyan mi kivetnivalot
>> talal ebben? Esetleg en rontok el valamit, es - noch dazu - valami
>> nonszensz dolgot eroltetek?
>>
>>
>> Garami Gábor
>> E-mail: gabor.garami at hron.me
>> Tel: +36 20 235 9621
>> MSN: hrgy at vipmail.hu
>> Skype: hron84
>> ______________________________**_________________
>> Javalist mailing list
>> Javalist at lists.javaforum.hu
>> http://lists.javaforum.hu/**mailman/listinfo/javalist<http://lists.javaforum.hu/mailman/listinfo/javalist>
>>
>
>
> --
> Üdvözlettel,
> Böszörményi Péter
> ______________________________**_________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/**mailman/listinfo/javalist<http://lists.javaforum.hu/mailman/listinfo/javalist>
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20120821/671e6c09/attachment.html>
További információk a(z) Javalist levelezőlistáról