Cette méthode me plaît plus aussi. Mais où est passé la gestion des transactions ? Est-ce que dans l'exemple, la méthodeCitation:
Envoyé par fr1man
est déclarée transactionnelle ?Code:loadProductsByCategory
Version imprimable
Cette méthode me plaît plus aussi. Mais où est passé la gestion des transactions ? Est-ce que dans l'exemple, la méthodeCitation:
Envoyé par fr1man
est déclarée transactionnelle ?Code:loadProductsByCategory
Non, la gestion des transactions n'est pas faite au niveau des DAOs, mais au
niveau de la couche supérieure.
Il faut regarder juste après dans la doc, la classe ProductService et ses
différentes versions de gestion de transaction.
J'essaie de passer à la pratique mais je me pose quelques questions.
Afin d'utiliser la gestion des transactions, je souhaite savoir quel fichier jar je dois inclure dans mon projet.
Par ailleurs pour faire appel par la suite au contexte afin de récupérer les beans, est-ce que je dois instancier une classe implémentant ApplicationContext dans chaque classe faisant appel à un bean ?
Le spring.jar est suffisant.
Il suffira de récupérer ton contexte et de faire un getBean sur le bean que tu veux récupérer.
Voici un exemple de fichier de configuration Spring pour un client Swing que j'ai fait. Ce client communique avec le serveur sous la forme d'EJB et de WebServices réalisés avec HttpInvoker.
Tu verras en fin de fichier que je me sert de l'IoC pour configurer mes objets "Contrôleurs graphiques"
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 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="remoteServer" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> <prop key="java.naming.provider.url">parw00074243</prop> <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop> </props> </property> </bean> <bean id="catalogueApplicationModel" class="com.entrepriseXXX.formanetclient2.model.CatalogueApplicationModel"> </bean> <bean id="catalogueApplication" class="com.entrepriseXXX.formanetclient2.view.CatalogueApplication"> <property name="model" ref="catalogueApplicationModel"/> </bean> <bean id="catalogueApplicationController" class="com.entrepriseXXX.formanetclient2.control.CatalogueApplicationController"> <property name="catalogueService" ref="catalogueService"/> </bean> <bean id="catalogueService" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"> <property name="jndiName" value="CatalogueServiceEJB"/> <property name="businessInterface" value="com.entrepriseXXX.formanet2.services.catalogue.ICatalogueService"/> <property name="jndiTemplate" ref="remoteServer"/> </bean> <bean id="authenticationService" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"> <property name="jndiName" value="AuthenticationServiceEJB"/> <property name="businessInterface" value="com.entrepriseXXX.formanet2.services.authentication.IAuthenticationService"/> <property name="jndiTemplate" ref="remoteServer"/> </bean> <bean id="demandeFormationService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> <property name="serviceUrl" value="http://parw00074243:8080/formanet2servicesHTTP/http/DemandeFormationService"/> <property name="serviceInterface" value="com.entrepriseXXX.formanet2.services.demande.IDemandeFormationService"/> </bean> <bean id="loginDialogController" class="com.entrepriseXXX.formanetclient2.control.LoginDialogController"> <property name="authenticationService" ref="authenticationService"/> <property name="catalogueApplication" ref="catalogueApplication"/> </bean> <bean id="demandeFormationAction" class="com.entrepriseXXX.formanetclient2.control.DemandeFormationAction"> <property name="application" ref="catalogueApplication"/> <property name="service" ref="demandeFormationService"/> <property name="name" value="Demander une formation"/> </bean> </beans>
Merci ego ;)
fr1man, en fait je posais la question concernant les jar car le spring.jar contient l'ensemble des modules mais on peut aussi prendre uniquement certains modules (sous forme de fichier jar également).
En ce qui concerne l'initialisation du contexte, je comptais faire ceci :
Néanmoins, je souhaite accéder à mes beans dans différentes classes et cela implique que je dois initialiser un contexte dans chaque classe afin de me permettre d'accéder aux beans. Cela ne me paraît pas une bonne méthode car cela implique que je vais initialiser plusieurs fois le contexte.Code:
1
2 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MonBean monBean = (MonBean) context.getBean("monBean");
Y a-t-il une autre méthode ?
Tu n'as pas à initialiser plusieurs contextes !? Je ne comprend pas pourquoi tu dis cela, peux tu être plus explicite ?
Ok pour les jars, je ne me suis pas compliqué la vie en ne prennant que le spring.jar.
Tu peux initialiser ton contexte une fois au chargement de ton application (avec le code que tu as écrit), et ensuite le y accéder dans d'autres classes.
Pour ma part, je l'ai mis dans un objet singleton. A voir, si ça te convient.
Mon idée est effectivement de créer un singleton et effectuer un appel du type.Code:MyApplicationContext.getInstance()
ego, si je veux faire un appel au contexte dans plusieurs classes différentes, il me semble que la seule solution est le singleton sinon je suis obligé de l'instancier dans chaque classe et c'est pourquoi j'ai parlé de plusieurs initialisations (ou instanciations).
Dans le cas d'une application web, je crois que ce problème ne se pose pas car le contexte se configure dans le web.xml.
ok, j'ai compris ton soucis.
Dans le cas du Web, c'est effectivement le principe du singleton qui est utilisé.
Mais tu peux aussi demander à tes classes d'implémenter l'interface ApplicationContextAware, Spring te donnera alors l'ApplicationContext.......si bien sûr le bean en question a été créé par Spring via la factory.
Ok merci ;)
Mon choix se portera néanmoins sur le singleton car il semble d'après la doc qu'il ne faut pas trop abuser de cette interface notamment pour des soucis de performance.