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:
Cette conf permet la gestion transactionnelle d'une BD, il y a certainement des choses inutiles (dans la conf hibernate notament).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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:
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Vous auriez une idée?
En vous remerciant, Charlie
Partager