<p>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.</p>
<p>Garami Gábor<br>
<a href="mailto:gabor.garami@hron.me">gabor.garami@hron.me</a><br>
Skype: hron84<br>
Tel: +36 20 235 9621</p>
<p>Sent from my T-Mobile G2<br>
Ezt a levelet telefonról adták fel, ékezethibákat tartalmazhat.</p>
<div class="gmail_quote">2012.08.20. 12:00, "Böszörményi Péter" <<a href="mailto:zmblevlist@gmail.com">zmblevlist@gmail.com</a>> ezt írta:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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.<br>
<br>
On Sun, 19 Aug 2012 23:40:47 +0200, Gábor Garami <<a href="mailto:gabor.garami@hron.me" target="_blank">gabor.garami@hron.me</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Na, ilyet meg nem pipaltam. Elvben minden standard javas, sot,<br>
allitolag ajanlas az, ami nekem nem megy... meg ilyet...<br>
<br>
Szoval, adott ket rovid szosszenet:<br>
<br>
public interface IFacade<T extends IEntity> {<br>
<br>
//@Transactional<br>
public void create(T entity);<br>
<br>
//@Transactional<br>
public void update(T entity);<br>
<br>
//@Transactional<br>
public void remove(T entity);<br>
<br>
public T find(Object id);<br>
<br>
public List<T> findAll();<br>
<br>
public List<T> findRange(int[] range);<br>
<br>
public int count();<br>
}<br>
<br>
public abstract class AbstractFacade<T extends IEntity> implements IFacade<T> {<br>
<br>
private Class<T> entityClass;<br>
<br>
public AbstractFacade(Class<T> entityClass) {<br>
this.entityClass = entityClass;<br>
}<br>
<br>
protected abstract EntityManager getEntityManager();<br>
<br>
/**<br>
* Stores new entity into the database<br>
* @param entity the new entity. Should <em>not</em> be persisted<br>
*/<br>
<br>
@Transactional<br>
@Override<br>
public void create(T entity) {<br>
if(!getEntityManager().<u></u>contains(entity)) {<br>
getEntityManager().persist(<u></u>entity);<br>
getEntityManager().flush();<br>
}<br>
<br>
}<br>
<br>
/**<br>
* Updates entity in the database<br>
* @param entity the subject entity. Must <em>be</em> persisted<br>
*/<br>
<br>
@Override<br>
@Transactional<br>
public void update(T entity) {<br>
getEntityManager().merge(<u></u>entity);<br>
getEntityManager().flush();<br>
}<br>
/**<br>
* Removes entity from the database<br>
* @param entity the subject entity. Must <em>be</em> persisted<br>
*/<br>
<br>
@Override<br>
@Transactional<br>
public void remove(T entity) {<br>
getEntityManager().remove(<u></u>getEntityManager().merge(<u></u>entity));<br>
getEntityManager().flush();<br>
}<br>
<br>
// Es igy tovabb, az osszes metodushoz van megfelelo implementacio<br>
}<br>
<br>
A problema a kovetkezo. Ha az AbstractFacade fenti definiciojat hasznalom:<br>
<br>
Caused by:<br>
org.springframework.beans.<u></u>factory.BeanCreationException: Could not<br>
autowire field: private me.hron.springblog.dao.<u></u>ArticleFacade<br>
me.hron.springblog.controller.<u></u>ArticleContoroller.articleDao; nested<br>
exception is java.lang.<u></u>IllegalArgumentException: Can not set<br>
me.hron.springblog.dao.<u></u>ArticleFacade field<br>
me.hron.springblog.controller.<u></u>ArticleContoroller.articleDao to<br>
$Proxy27<br>
at org.springframework.beans.<u></u>factory.annotation.<u></u>AutowiredAnnotationBeanPostPro<u></u>cessor$AutowiredFieldElement.<u></u>inject(<u></u>AutowiredAnnotationBeanPostPro<u></u>cessor.java:506)<br>
at org.springframework.beans.<u></u>factory.annotation.<u></u>InjectionMetadata.inject(<u></u>InjectionMetadata.java:87)<br>
at org.springframework.beans.<u></u>factory.annotation.<u></u>AutowiredAnnotationBeanPostPro<u></u>cessor.<u></u>postProcessPropertyValues(<u></u>AutowiredAnnotationBeanPostPro<u></u>cessor.java:284)<br>
at org.springframework.beans.<u></u>factory.support.<u></u>AbstractAutowireCapableBeanFac<u></u>tory.populateBean(<u></u>AbstractAutowireCapableBeanFac<u></u>tory.java:1106)<br>
at org.springframework.beans.<u></u>factory.support.<u></u>AbstractAutowireCapableBeanFac<u></u>tory.doCreateBean(<u></u>AbstractAutowireCapableBeanFac<u></u>tory.java:517)<br>
at org.springframework.beans.<u></u>factory.support.<u></u>AbstractAutowireCapableBeanFac<u></u>tory.createBean(<u></u>AbstractAutowireCapableBeanFac<u></u>tory.java:456)<br>
at org.springframework.beans.<u></u>factory.support.<u></u>AbstractBeanFactory$1.<u></u>getObject(AbstractBeanFactory.<u></u>java:294)<br>
.... and so on...<br>
<br>
Ha viszont nem implementalom az IFacade interfeszt a fenti modon<br>
(vagyis kiesik az implements IFacade<T>) akkor gyonyoruen fut a progi.<br>
<br>
A tesztek mindket esetben lefutnak, tehat magad a kesz, implementalt<br>
dao objektumot nem befolyasolja az IFacade lete vagy nem lete, egyedul<br>
a kontrollerekbe torteno injekciozas, az, ami megdoglik ilyenkor.<br>
<br>
Nem tudom, hogy ez-e a baj, de olyan erzesem van, mintha az IFacade<br>
implementaciojanak tenye tul bonyolult lenne a kis egyszeru szoszke<br>
lelkenek, es nem tudna feloldani, hogy mi a pocsot akarok en ottan.<br>
Pedig hat azert ez annyira nem egy ertelmetlen dolog.<br>
<br>
Az app mukodik enelkul a szerkezet nelkul is, szoval en biztos nem<br>
fogok a konyhakes utan nyulkalni szivbokdoses celjaval, ha ez igy nem<br>
fog osszejonni, de furdalja a lelkemet, hogy ugyan mi kivetnivalot<br>
talal ebben? Esetleg en rontok el valamit, es - noch dazu - valami<br>
nonszensz dolgot eroltetek?<br>
<br>
<br>
Garami Gábor<br>
E-mail: <a href="mailto:gabor.garami@hron.me" target="_blank">gabor.garami@hron.me</a><br>
Tel: <a href="tel:%2B36%2020%20235%209621" value="+36202359621" target="_blank">+36 20 235 9621</a><br>
MSN: <a href="mailto:hrgy@vipmail.hu" target="_blank">hrgy@vipmail.hu</a><br>
Skype: hron84<br>
______________________________<u></u>_________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" target="_blank">http://lists.javaforum.hu/<u></u>mailman/listinfo/javalist</a><br>
</blockquote>
<br>
<br>
-- <br>
Üdvözlettel,<br>
Böszörményi Péter<br>
______________________________<u></u>_________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" target="_blank">http://lists.javaforum.hu/<u></u>mailman/listinfo/javalist</a><br>
</blockquote></div>