Tout projet Open Source Spring est plus grand que PetClinic?

J’ai fini de lire le doc du spring et le projet exemple PetClinic. Tout comme pour voir un projet plus réel réalisé avec Spring. Merci.

Projets de source printanière

Powerstone

Listes Tudu

Alfresco Content Management

SpringSide

Plazma

agileexpress

Zksample2

Spring Rich Client

Commerce à feuilles larges

OpenERP

HISPACTA

Luigi Open Search Engine

JOSSO

HSE

Plateforme Java Small Business

jrecruiter

Je travaille pour une grande compagnie d’assurance maladie où nous utilisons fortement Spring in backend. Je vais vous montrer comment une application modulaire est construite.

Squelette WEB-INF sans répertoire de classes

ar WEB-INF web.xml /** * Spring related settings file */ ar-servlet.xml web moduleA account form.jsp moduleB order form.jsp 

Répertoire des classes squelettes

  classes /** * Spring related settings file */ ar-persistence.xml ar-security.xml ar-service.xml messages.properties br com ar web moduleA AccountController.class moduleB OrderController.class br com ar moduleA model domain Account.class repository moduleA.hbm.xml service br com ar moduleB model domain Order.class repository moduleB.hbm.xml service ... 

Notez comment chaque paquet sous br.com.ar.web correspond au répertoire WEB-INF / view . C’est la clé nécessaire pour exécuter la configuration par convention dans Spring MVC. Comment ??? compter sur ControllerClassNameHandlerMapping

WEB-INF / ar-servlet.xml Notez que la propriété basePackage signifie rechercher n’importe quelle classe @Controller dans le package br.com.ar.view . Cette propriété permet de construire un contrôleur @ modularisé

                

Voyons maintenant, par exemple, AccountController

 package br.com.ar.web; @Controller public class AccountController { @Qualifier("categoryRepository") private @Autowired Repository categoryRepository; @Qualifier("accountRepository") private @Autowired Repository accountRepository; /** * mapped To /account/form */ @RequestMapping(method=RequesMethod.GET) public void form(Model model) { model.add(categoryRepository().getCategoryList()); } /** * mapped To account/form */ @RequestMapping(method=RequesMethod.POST) public void form(Account account, Errors errors) { accountRepository.add(account); } } 

Comment ça marche ???

Supposons que vous fassiez une demande pour http://127.0.0.1:8080/ar/moduleA / account / form .html

Spring supprimera le chemin entre le chemin de contexte et l’extension de fichier – mis en évidence ci-dessus. Lisons le chemin extrait de la droite vers la gauche

  • nom de la méthode de formulaire
  • nom de classe non qualifié de compte sans suffixe de contrôleur
  • ModuleA package qui sera ajouté à la propriété basePackage

qui est traduit à

 br.com.ar.web.moduleA.AccountController.form 

D’accord. Mais comment Spring sait-il quelle vue montrer? Voir ici

Et sur les problèmes liés à la persistance ???

Tout d’abord, voir ici comment nous implémentons le référentiel. Notez que chaque requête de module associée est stockée dans son package de référentiel associé . Voir le squelette ci-dessus. Ici est montré ar-persistence.xml Remarque mappingLocations et propriété packagesToScan

 < ?xml version="1.0" encoding="UTF-8"?>       classpath:br/com/ar/model/repository/hql.moduleA.hbm.xml classpath:br/com/ar/model/repository/hql.moduleB.hbm.xml     br.com.ar.moduleA.model.domain br.com.ar.moduleB.model.domain     org.hibernate.dialect.Oracle9Dialect UTF-8 true true false     

Notez que j’utilise Hibernate. JPA doit être correctement configuré.

Gestion des transactions et parsing des composants ar-service.xml Remarque Deux points après br.com.ar dans aop : atsortingbut d’expression de pointcut, ce qui signifie

Tout paquet et sous-paquet sous le paquet br.com.ar

 < ?xml version="1.0" encoding="UTF-8"?>                             

Essai

Pour tester la méthode @Controller annotée, voir ici comment

Autre que la couche Web. Notez comment je configure une source de données JNDI dans la méthode @Before

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:ar-service.xml", "classpath:ar-persistence.xml"}) public class AccountRepositoryIntegrationTest { @Autowired @Qualifier("accountRepository") private Repository repository; private Integer id; @Before public void setUp() { SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); DataSource ds = new SimpleDriverDataSource(new oracle.jdbc.driver.OracleDriver(), "jdbc:oracle:thin:@127.0.0.1:1521:ar", "#$%#", "#$%#"); builder.bind("/jdbc/dataSource", ds); builder.activate(); /** * Save an Account and set up id field */ } @Test public void assertSavedAccount() { Account account = repository.findById(id); assertNotNull(account); } } 

Si vous avez besoin d’une suite de tests, procédez comme suit

 @RunWith(Suite.class) @Suite.SuiteClasses(value={AccountRepositoryIntegrationTest.class}) public void ModuleASuiteTest {} 

web.xml est affiché comme suit

 < ?xml version="1.0" encoding="UTF-8"?>   contextConfigLocation  classpath:ar-persistence.xml classpath:ar-service.xml    org.springframework.web.context.ContextLoaderListener   ar org.springframework.web.servlet.DispatcherServlet 1   ar *.html   30   datasource jdbc/dataSource javax.sql.DataSource Container   

J’espère que cela peut être utile. Mettre à jour le schéma vers Spring 3.0. Voir la documentation de référence du spring. mvc schema, Pour autant que je sache, est pris en charge juste dans Spring 3.0. Garde ça en tête

Quelques candidats:

  • Le magasin du spring

  • AppFuse – Dans AppFuse, Spring Framework est utilisé pour son support Hibernate / iBATIS, ses transactions déclaratives, sa liaison de dépendance et son découplage de couche.

  • Equinox (alias AppFuse Light) – une application CRUD simple créée dans le cadre de Spring Live.

  • Spring by Example – Divers exemples de spring plus quelques bibliothèques téléchargeables.

  • Listes Tudu – Listes Tudu est une application J2EE pour la gestion des listes de tâches. Il est basé sur JDK 5.0, Spring, Hibernate et une interface AJAX (utilisant le framework DWR).

  • magasin de spring

Regardez Apache CXF . Il utilise le spring.