Eclipse RCP+Spring+EMF+Teneo

One issue for using these technologies together is using spring and the teneo HbSessionDataStore versus the LocalSessionFactoryBean that is seen in most spring tutorials.

To use the teneo approach, you need to define your beans and DAOs like the following:

<!-- Should get persistence properties and hibernate properties from property files. -->
    <bean id="sessionFactory" scope="singleton" lazy-init="true"
        class="org.eclipse.emf.teneo.hibernate.HbSessionDataStore"
        p:name="MyDataStore">
        <property name="EPackageClasses">
            <util:list>
                <value>org.yourmodel.impl.YourPackageImpl</value>
                <value>org.yourmodel2.impl.Your2PackageImpl</value>
            </util:list>
        </property>
    </bean>
   
    <util:constant static-field="org.yourmodel.YourFactory.eINSTANCE"/>
    <bean id="contactDao" scope="singleton" lazy-init="true"
        factory-bean="org.yourmodel.YourFactory.eINSTANCE"
        factory-method="createDao"
        p:sessionFactory-ref="sessionFactory"/>
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
You can access the eINSTANCE through the interface directly. There are other methods to get access to the instance and give it a shorter bean name using FieldRetrievingFactoryBean (or something like that). Do not forget your namespace definitions on the beans element.

Another way to create beans, especially if you have alot of them, is to create your own spring context local copy of the factory using

<bean id="yourFactory"
class="yourPackage.impl.MyFactoryImpl"
factory-method="init">


And then use

<bean id="yourNewBean" factory-bean="yourFactory" factory-method="createYourBean" />

where createYourBean is following the creator approach implemented by EMF.

Popular posts from this blog

graphql (facebook), falcor (netflix) and odata and ...

React, Redux, Recompose and some simple steps to remove "some" boilerplate and improve reuse

Using wye and tee with scalaz-stream