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 : 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>
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 : 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>
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