[Java lista] EJB2 -> Spring

Zsombor gzsombor at gmail.com
2009. Nov. 26., Cs, 08:42:09 CET


2009/11/23 Böszörményi Péter <zmblevlist at gmail.com>

> Esetleg egy roviden ossze tudod foglalni, hogy mikent oldottad meg a
> dolgokat (beanek, konfiguraciok, illeszto osztalyok), az archivum kedveert.
>
>


Igen, persze. A bemenet az egy SessionBean implementáció, azt bewrappeljük
egy saját proxyval, ami a local/remote interfészt implementálja, s ezt az
egészt pedig spring segítségével tovább csomagoljuk tranzakció kezelő
proxyval.

Kezdeném a konfigurációs fájllal :

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"> </..>

<!-- tranzakció kezelés -->
    <bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
    </bean>
<!-- ez a bean mondja meg, hogy melyik osztályt kell tranzakciósan kezelni.
Lényegében minden olyan metódust, ami egy EJBObject-et kiterjesztő
interfészen van rajta. Azaz a saját proxy objektumainkat -->
    <bean id="txAttributeSource"
class="com.babjack.SessionBeanTransactionAdvisor">
    </bean>

<!-- tranzakció kezelő interceptor definiciója -->
    <bean id="txInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="txManager"/>
        <property name="transactionAttributeSources"
ref="txAttributeSource"/>
    </bean>

    <bean id="txAdvisor"
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
        <property name="transactionInterceptor" ref="txInterceptor"/>
    </bean>

    <bean id="txProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
    </bean>

<!-- ejb  definiciĂłk, az EJB2Factory meg egy springes FactoryBean, ami a
bejövő sessionBean-t bewrappeli egy java.lang.ref.Proxy objektummal, ami
implementálja a com.kamu.ize.IzeSB interfészt -->
    <bean id="izeBean" class="com.babjack.EJB2Factory">
        <property name="sessionInterface" value="com.kamu.ize.IzeSB"/>
        <property name="sessionBean"><bean
class="com.kamu.ize.IzeSessionBeanImpl"></bean></property>
    </bean>

<!-- JNDI beállítás, ez a felkonfigurált datasourcet elrejti a JNDI-ban  -->

    <bean id="jndiSetup" class="com.babjack.JNDISetup" lazy-init="false">
        <property name="initialValues">
            <util:map>
                <entry key="java:comp/env/jdbc/dbpool"
value-ref="dataSource" />
            </util:map>
        </property>
    </bean>

Ezek után ez a hívás müködött :
  IzeSB sb = ctx.getBean("izeBean");
  sb.doStuff("valami");

Ahol a doStuff implementációja az IzeSessionBeanImpl-ben az adatbázishoz
nyúlt, amit a JNDI-ból szedett ki,s rendben tevékenykedett.
A home interfész megvalósításáig nem jutottam el, a működő prototipushoz már
nem volt szükségem rá, de az már nagyon egyszerű lett volna.

Ha másnak is vannak hasonlóan perverz ötletei, vagy kérdései, kíváncsian
várom :)


ĂĽdv
Zsombor
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20091126/c5212c9d/attachment.html 


További információk a(z) Javalist levelezőlistáról