myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rossmy Tilman <Tilman.Ros...@rtc.ch>
Subject jpa with orchestra and spring
Date Mon, 11 May 2009 11:11:28 GMT
I'm using the orchestra lib in my project and with the conversation scope nopw everything seems
to be fine. But the request scope does not work anymore. That is due to the fact that
the spring (as opposed to orchestra) managed persistence business object expects a @Transitional
annotation above its constructor, while orchestra does not allow this at all...so what's the
suggested strategy here, have different business objects for different scopes?
( Right now I'm using one business object for all my managed beans like this:
public interface BaseBO
{
    public <T> List<T> query(String queryString, final Object... params);

    public int updateQuery(String queryString, final Object... params);

    public int nativeUpdateQuery(String queryString, Object... params);

    public <T> List<T> queryPaginated(String queryString, int firstResult, int
maxResult, final Object... params);

    public <T> T merge(T entity);

    public void persist(Object... entities);

    public <T> T find(Class<T> clazz, Object id);

    public List<Object> findByNamedQueryAndNamedParams(String string, Map<String,
Object> map);

    public <T> List<T> findAll(Class<T> clazz);

    public void remove(Object object);

    public <T> List<T> findAll(Class<T> name, int i);
}

this is the entityManger configuration:

<tx:annotation-driven transaction-manager="transactionManager"/>
    <!--suppress DuplicatedBeanNamesInspection -->
    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/cyberadmin"/>
    <!--suppress DuplicatedBeanNamesInspection -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="cyberIbis"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="false"/>
                <property name="databasePlatform" value="org.hibernate.dialect.Oracle9iDialect"/>
                <property name="generateDdl" value="false"/>
            </bean>
        </property>
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
        </property>
    </bean>
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
        <property name="defaultPersistenceUnitName" value="cyberIbis"/>
    </bean>
    <!--suppress DuplicatedBeanNamesInspection -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

and this the orchestra conf:

<!-- 1. initialization of all orchestra modules (required for core15 module) -->
    <import resource="classpath*:/META-INF/spring-orchestra-init.xml"/>

    <!-- 2. the conversation scopes -->
    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
        <property name="scopes">
            <map>
                <entry key="conversation.manual">
                    <bean class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
                        <property name="advices">
                            <list>
                                <ref bean="persistentContextConversationInterceptor"/>
                            </list>
                        </property>
                        <property name="timeout" value="60"/>
                    </bean>
                </entry>
                <entry key="conversation.access">
                    <bean class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
                        <property name="advices">
                            <list>
                                <ref bean="persistentContextConversationInterceptor"/>
                            </list>
                        </property>
                        <property name="lifetime" value="access"/>
                        <property name="timeout" value="30"/>
                    </bean>
                </entry>
            </map>

        </property>
    </bean>

    <!-- 3. the "entity manager" manager -->
    <bean id="persistentContextConversationInterceptor"
          class="org.apache.myfaces.orchestra.conversation.spring.PersistenceContextConversationInterceptor">
        <aop:scoped-proxy/>
        <property name="persistenceContextFactory" ref="persistentContextFactory"/>
    </bean>

    <!-- 4. conversation - persistence adapter -->
    <bean id="persistentContextFactory"
          class="org.apache.myfaces.orchestra.conversation.spring.JpaPersistenceContextFactory">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>


Mime
View raw message