resource name "" is already in use, choose a different one
Bonjour à tous,
J'essaie de faire fonctionner JPA, Spring, Atomikos (transaction) et Flex.
J'ai trouvé un framework sympa nommé gilead pour eviter la LazyloadingException dans la partie Flex (la flemme de faire des DTO...).
Ma BD fonctionne nickel dans mes tests d'inté JPA avec cette conf:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
<tx:annotation-driven mode="aspectj" />
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager"
depends-on="atomikosTransactionManager,atomikosUserTransaction, sessionFactory, dataSource">
<property name="transactionManager" ref="atomikosTransactionManager" />
<property name="userTransaction" ref="atomikosUserTransaction" />
<property name="allowCustomIsolationLevels" value="true" />
</bean>
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close">
<property name="forceShutdown" value="true" />
<property name="startupTransactionService" value="true"></property>
</bean>
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.J2eeUserTransaction">
<property name="transactionTimeout" value="300" />
</bean>
<bean
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
id="entityManagerFactory">
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="${hibernate.show_sql}"></property>
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.transaction.manager_lookup_class"
value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup" />
<!--<entry key="hibernate.transaction.factory_class" value="com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory" />-->
<entry key="hibernate.transaction.flush_before_completion"
value="true" />
<entry key="hibernate.transaction.auto_close_session" value="false" />
<entry key="hibernate.current_session_context_class" value="jta" />
<entry key="hibernate.connection.release_mode" value="auto" />
<entry key="hibernate.hbm2ddl.auto" value="update" />
<entry key="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
<entry key="hibernate.dialect" value="${hibernate.dialect}" />
<entry key="hibernate.bytecode.provider" value="cglib"/>
</map>
</property>
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="poker-manager" />
<property name="xaDataSourceClassName" value="${database.driverClassName}" />
<property name="minPoolSize">
<value>1</value>
</property>
<property name="maxPoolSize">
<value>40</value>
</property>
<property name="xaProperties">
<props>
<prop key="databaseName">${database.url}</prop>
<prop key="createDatabase">${database.create}</prop>
</props>
</property>
</bean> |
Cette conf permet la gestion transactionnelle d'une BD, il y a certainement des choses inutiles (dans la conf hibernate notament).
Le souci apparait dans ma couche web: gilead a aussi besoin d'un accès base afin de "normaliser" les entité dont il a rajouté des information de proxy.
J'ai donc configuré Gilead ainsi:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
<bean id="sessionFactory" factory-bean="entityManagerFactory" factory-method="getSessionFactory" depends-on="atomikosTransactionManager, atomikosUserTransaction, dataSource, entityManagerFactory"/>
<bean id="proxySerializer" class="net.sf.gilead.core.serialization.JBossProxySerialization" />
<bean id="proxyStore" class="net.sf.gilead.core.store.stateless.StatelessProxyStore">
<property name="proxySerializer" ref="proxySerializer" />
</bean>
<bean id="persistenceUtil" class="net.sf.gilead.core.hibernate.spring.HibernateSpringUtil" factory-method="getInstance">
<property name="sessionFactory" ref = "sessionFactory"></property>
</bean>
<bean id="persistentBeanManager" class="net.sf.gilead.core.PersistentBeanManager">
<property name="persistenceUtil" ref="persistenceUtil"/>
<property name="proxyStore" ref="proxyStore"/>
</bean>
<!-- broker Flex-->
<flex:message-broker services-config-path="/WEB-INF/classes/flex/services-config.xml">
<flex:exception-translator ref="javaToFlexExceptionTranslator" />
<flex:remoting-service default-adapter-id="hibernate-object"
default-channels="crud-amf" />
</flex:message-broker>
<bean id="hibernate-object"
class="org.springframework.flex.core.ManageableComponentFactoryBean"
depends-on="entityManagerFactory">
<constructor-arg value="net.sf.gilead.blazeds.adapter.PersistentAdapter" />
<property name="properties">
<value>
{"persistence-factory":
{"class":"net.sf.gilead.core.hibernate.spring.HibernateSpringUtil",
"singleton" :"true",
"method":"getSessionFactory"
},
"stateless":"true" }
</value>
</property>
</bean> |
Malheureusement, au lancement du serveur, j'ai une erreur de double utilisation du schéma de BD (ici poker-manager déclaré dans le uniqueDatasourceName de l'entityManagerFactory).
Vous auriez une idée?
En vous remerciant, Charlie