|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() |
Vous pouvez participer activement à la F.A.Q Spring
N'hésitez pas à poster vos questions et réponses dans cette enfilade. Attention réponse obligatoire, toute question seule sera supprimée. Il faut poser la question et y répondre. Merci à tous pour vos contributions
__________________
Hikage SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified [Personal Web] [CV] F.A.Q Spring Framework - Participez ! |
|
00
|
|
|
#2 | ||
|
Membre du Club
![]() Michael Courcy Inscription : janvier 2006 Messages : 44 ![]() |
Si la Session Factory d'hibernate est géré par Spring il est alors possible d'utiliser un filtre mis à disposition par le framework Spring.
Ce filtre commit la transaction après le traitement par la servlet (ou l'action de votre framework préféré), puis recommence une transaction pour la présentation de la jsp ou la techno de vue de votre choix. Une fois la page rendue le filtre ferme la session. Cette stratégie est aussi utilisé par le framework JBoss Seam. On configure le filtre dans web.xml : Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Membre confirmé
![]() Inscription : septembre 2005 Messages : 801 ![]() |
L'interface ApplicationContextAware est reconnue par Spring qui y injecte automatiquement le contexte de l'application courante via la méthode setApplicationContext(ApplicationContext context)
Code :
|
||
|
|
10
|
|
|
#4 |
![]() ![]() |
__________________
Hikage SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified [Personal Web] [CV] F.A.Q Spring Framework - Participez ! |
|
00
|
|
|
#5 |
|
Membre du Club
![]() Michael Courcy Inscription : janvier 2006 Messages : 44 ![]() |
Je désapprouve l'utilisation de cette interface car on est couplé avec Spring.
|
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Inscription : octobre 2004 Messages : 4 668 ![]() |
Bonjour.
Spring 2.5 offre enfin une nouvelle méthode d'intégration avec JSF compatible avec la version 1.2 (qui ne repose pas sur le VariableResolver, déprécié depuis JSF 1.2). serait d'ajouter ce bout de code dans faces-config.xml: Code xml :
Le reste fonctionne exactement de la même façon qu'avec le DelegatingVariableResolver. |
||
|
|
00
|
|
|
#7 | ||||
|
Membre du Club
![]() |
Pour intégrer EhCache et Spring afin de pouvoir injecter directement un bean Cache, on définit le bean ci-dessous dans un des fichiers de définitions du contexte Spring :
Code :
Dans cette déclaration, on précise que le fichier de définition des caches se trouve dans le classpath au niveau de la racine (on pourrait également utiliser classpath*:ehcache.xml pour lui indiquer de chercher ce fichier dans tous les classpath). On précise également que le CacheManager n'est pas partagé via la propriété shared. Ensuite on peut injecter ce bean normalement dans tout bean qui en aurait besoin via : Code :
|
||||
|
00
|
|
|
#8 | ||||||||
|
Membre du Club
![]() |
Pour intégrer Oracle Toplink et Spring il faut déclarer un bean "sessionFactory" dans lequel on va préciser :
Code :
Voici le contenu de mon fichier de session "toplink-sessions.xml" qui indique que le fichier de mapping "toplink-Mapping.xml" est lui aussi à la racine du classpath de l'application : Code :
et d'utiliser le ToplinkTemplate via "getTopLinkTemplate()" pour executer des traitements. Exemple de classe : Code :
Code :
|
||||||||
|
00
|
|
|
#9 | ||||||||
|
Membre du Club
![]() |
Pour donner accés au contexte Spring aux composants non gérés par Spring, il suffit d'implémenter un bean géré par Spring qui va exposer des méthodes d'accés au contexte Spring.
Exemple de bean exposant des méthodes d'accés au contexte Spring : Code :
Voici la déclaration du bean d'exposition dans la configuration Spring : Code :
La classe "com.drighetto.essai.springcontextaware.SimplePojo" est une simple classe avec un attribut nommé "message" de type "String" avec des getter/setter... Code :
Code :
|
||||||||
|
00
|
|
|
#10 | ||||||
|
Membre du Club
![]() |
Note : Cette réponse part du principe que le lecteur connaît Axis2 !
Pour intégrer Apache Axis2 et Spring de maniére à ce que ce dernier gére les instances des web services, il faut déclarer le bean qui représente le web service dans le fichier de configuration du web service, c'est à dire dans le fichier "services.xml" via le tag "SpringBeanName" : Code :
Voici ces tags dans le fichier "services.xml" : Code :
Code :
"monBeanWebService" est un bean (une classe publique non abstraite non finale avec des méthodes publiques qui représentent les services exposés) qui est déclaré dans un fichier de configuration Spring. |
||||||
|
00
|
|
|
#11 | ||||||||||||
|
Membre du Club
![]() |
Voici les déclarations à effectuer pour intégrer JPA et Spring (cet exemple se base sur l'utilisation de l'implémentation Oracle Toplink de JPA) :
Etape 1 : Déclaration dans le contexte Spring des dépendances JPA Activation du tissage lors du runtime pour le contexte Spring afin que tous les beans implémentant l'interface "LoadTimeWeaverAware" (comme le bean LocalContainerEntityManagerFactoryBean) reçoivent une référence vers le tisseur (cf documentation Spring pour plus de précisions) Déclaration du "PersistenceUnitManager" permettant de personnaliser la sélection des unités de persistences et des sources de données. Code :
Code :
Code :
Déclaration d'un traducteur d'exception Code :
Chaque classe qui désire utiliser JPA pour accéder aux données peut :
Dans le cas de l'héritage voici le type de déclaration à effectuer pour déclarer la classe (dépendance sur l' "EntityManagerFactory") Code :
Note : Pour le moment l'utilisation de JPA avec Spring ne supporte que l'isolation par défaut pour l'isolation des transactions... Dans la classe org.springframework.orm.jpa.DefaultJpaDialect (la classe "org.springframework.orm.jpa.vendor.TopLinkJpaDialect" hérite de cette classe) dans la méthode beginTransaction() une vérification est faite sur l'isolation placée et si celle-ci n'est pas placée à défaut alors l'exception suivante est levée "Standard JPA does not support custom isolation levels - use a special JpaDialect for your JPA implementation". Voici le fichier de contexte dans son ensemble : Code :
|
||||||||||||
|
00
|
|
|
#12 | ||
![]() ![]() |
Lors de l'utilisation de Spring en dehors d'un contexte Web, il est intéressant de fermer proprement un contexte d'application, en libérant les resources et les beans.
La méthode close() de l'interface ConfigurableApplicationContext permet de faire cela. Il faut donc que l'implémentation du contexte d'application Spring implémente cette interface, et heureusement c'est le cas de ClasspathXmlApplicationContext, qui est dans doute la version la plus utilisée. Code :
Une autre méthode de ConfigurableApplicationContext qui peut s'avérer utile est registerShutdownHook(). Cette méthode permet de spécifier à la JVM de fermer automatiquement le contexte Spring lorsque l'application s'arrête.
__________________
Hikage SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified [Personal Web] [CV] F.A.Q Spring Framework - Participez ! |
||
|
00
|
|
|
#13 | ||||||||||||||
|
Membre du Club
![]() |
L'objectif recherché est d'utiliser dans une application Java/JEE des implémentations JRuby de certains interfaces définis en java.
Deux approches sont possibles :
Pour expliquer les deux cas nous allons configurer dans Spring les implémentations de l'interface com.drighetto.springjruby.ActionDefinition dont le code est ci-dessous : Code :
Code :
Voici la configuration Spring associée : Code :
Le tag "lang:property" sert à injecter des valeurs dans le script JRuby Cas 2 : l'implémentation JRuby se trouve dans un fichier de script Voici la configuration Spring associée : Code :
Voici le contenu du script "action_definition_jruby_impl.rb" Code :
Code :
Cet exemple ayant été réalisé avec Maven2, voici la liste des dépendances : Code :
|
||||||||||||||
|
00
|
|
|
#14 |
![]() ![]() |
Oui
Spring Framework ainsi que la plupart des projets du portfolio Spring sont distribués sous licence Apache 2.0. L'utilisation de ces projets au sein d'un développement est donc complètement libre et gratuite.
__________________
Hikage SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified [Personal Web] [CV] F.A.Q Spring Framework - Participez ! |
|
00
|
|
|
#15 | ||
![]() ![]() |
Depuis Spring 2.5.1, une nouvelle classe utilitaire est disponible : SpringBeanAutowiringSupport
Code :
__________________
Hikage SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified [Personal Web] [CV] F.A.Q Spring Framework - Participez ! |
||
|
00
|
|
|
#16 | ||||||
|
Membre éclairé
![]() ![]() Inscription : mai 2008 Messages : 274 ![]() |
Le problème vient du fait qu'Hibernate a besoin d'effectuer les opérations que vous lui demandez dans une transaction.
D'habitude, tout se fait de manière automatique pour peu que vous ayez bien configuré votre fichier application-context.xml en y indiquant un transactionManager et un proxyTransactionnel (cf de nombreux tutoriels que l'on peut trouver sur google). TRADUCTION D'UN FORUM ANGLOPHONE : DEBUT D'un autre coté, il se peut que vous ayez besoin d'exécuter un bout de code hors du proxy transactionnel, et dans ce cas la méthode habituelle suivante ne marche plus: Code :
Soit en xml: Code :
Code :
TRADUCTION D'UN FORUM ANGLOPHONE : FIN Commentaire: faire les choses au sein du code est hideux, car on instancie des classes de Spring, ce qui est contraire à la philosophie de Spring. En ce qui me concerne, j'ai abouti à une solution à mi chemin: via application.xml, j'injecte le transactionManager défini dans spring dans ma classe java. Puis à partir de là je fais le reste dans le code. SOURCE |
||||||
|
00
|
|
|
#17 | ||||
|
Membre habitué
![]() Ray YalaInscription : juillet 2010 Messages : 139 ![]() |
Bonjour, Peut-on avoir une intégration de Spring dans Hibernate sans utiliser les fichiers de configurations des 2 frameworks? mais soir en utilsant les fichiers properties soit une annotation? Pourquoi Spring n'a pas pensé à créer une simple annotation pour dans son intégration à Hibernate puis une classe créant l'insatnce d'une SessionFactory, ce qui permet de rendre l'utilisation d'une couche Dao sans configurer la SessionFactory dans le contexte? J'ai une solution. Elle consiste à créer une classe créant l'instance de la SessionFactory puis soit utiliser des fichiers properties soit utiliser une annotation. Merci de la tester et me donner votre avis:
La classe qui permet de créer la SessionFactory est la suivante: Code :
Code :
Merci! |
||||
|
|
00
|
|
|
#18 |
|
Invité régulier
![]() Inscription : juin 2009 Messages : 11 ![]() |
Je voudrais juste ajouter une petite précision à cette FAQ.
Il faudrait simplement préciser que cela fonctionne si on charge le contexte Spring dans un ApplicationContext. Ca ne fonctionne pas si on utilise directement une BeanFactory. Cette précision pourrait être utile pour les débutants à mon sens. |
|
|
00
|
|
|
#19 |
|
Futur Membre du Club
![]() Inscription : mars 2007 Messages : 14 ![]() |
Grosse contribution de ma part : la version pdf et hors ligne de la faq ne semble pas fonctionner ! J'en aurais besoin pour la lire dans le train
|
|
|
00
|
|
|
#20 |
![]() ![]() |
Corrigé
Merci de l'infos
__________________
Hikage SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified [Personal Web] [CV] F.A.Q Spring Framework - Participez ! |
|
00
|
Copyright © 2000-2012 - www.developpez.com