He terminado de leer el documento de primavera y el proyecto de muestra PetClinic. Me gusta ver un proyecto más grande del mundo real que se hace con Spring. Gracias.Cualquier proyecto de muestra de fuente abierta que sea más grande que PetClinic?
Respuesta
Mire Apache CXF. Utiliza Spring.
Gracias por la pronta respuesta. Lo echaré un vistazo. Pero, creo que es más como un marco construido sobre la primavera, lo que realmente me gusta es ver una aplicación web de varios niveles construida en Spring. –
No puedo ayudarte con webapps. CXF tiene muchos ejemplos de configuración de contexto de la aplicación Spring. – bmargulies
Algunos candidatos:
AppFuse - En AppFuse, el Marco del resorte se utiliza a través de su apoyo Hibernate/iBATIS, las transacciones declarativas, la unión de dependencia y la capa de desacoplamiento.
Equinox (a.k. a AppFuse Light): una aplicación CRUD simple creada como parte de Spring Live.
Spring by Example - Varios ejemplos de Spring más algunas bibliotecas descargables.
Tudu Lists - Tudu Lists es una aplicación J2EE para administrar listas de tareas pendientes. Se basa en JDK 5.0, Spring, Hibernate y una interfaz AJAX (utilizando el marco DWR).
trabajo para una compañía de seguros de salud grande en el que utilizamos en gran medida en la primavera de back-end. Le mostraré cómo se construye una aplicación modularizada.
EsqueletoWEB-INF sin directorio de clases
ar
WEB-INF
web.xml
/**
* Spring related settings file
*/
ar-servlet.xml
web
moduleA
account
form.jsp
moduleB
order
form.jsp
Esqueletoclases directorio
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
...
Aviso cómo cada paquete bajo br.com.ar.webma tchsWEB-INF/view directorio. Es la clave necesaria para ejecutar convención sobre configuración en Spring MVC. Cómo ??? depender de ControllerClassNameHandlerMapping
WEB-INF/ar-servlet.xml propiedad basePackage Aviso lo que significa buscar cualquier clase @Controller bajo br.com.ar.view paquete. Esta propiedad permite construir modular @ Controlador de
<!--Scans the classpath for annotated components at br.com.ar.web package-->
<context:component-scan base-package="br.com.ar.web"/>
<!--registers the HandlerMapping and HandlerAdapter required to dispatch requests to your @Controllers-->
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="basePackage" value="br.com.ar.web"/>
<property name="caseSensitive" value="true"/>
<property name="defaultHandler">
<bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
Ahora vamos a ver, por ejemplo, AccountController
package br.com.ar.web;
@Controller
public class AccountController {
@Qualifier("categoryRepository")
private @Autowired Repository<Category, Category, Integer> categoryRepository;
@Qualifier("accountRepository")
private @Autowired Repository<Account, Accout, Integer> 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);
}
}
¿Cómo funciona ???
Suponga que ha hecho una petición de http://127.0.0.1:8080/ar/moduleA/account/forma .html
primavera eliminará el camino entre ruta de contexto y extensión de archivo - destacó anteriormente. Vamos a leer el camino extraída desde la derecha a la izquierda
- forma de nombre método
- cuenta nombre de clase no calificado sin controlador sufijo
- moduleA paquete que se sumarán a basePackage propiedad
que se traduce a
br.com.ar.web.moduleA.AccountController.form
Ok. ¿Pero cómo sabe Spring qué vista mostrar? Ver here
Y sobre persistencia problemas relacionados ???
En primer lugar, vea here cómo implementamos el repositorio. Observe que cada consulta de módulo relacionado se almacena en su paquete de repositorio relacionado. Ver esqueleto arriba. Aquí se muestra Aviso ar-persistence.xml mappingLocations y packagesToScan propiedad
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/dataSource" resource-ref="true">
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingLocations">
<util:list>
<value>classpath:br/com/ar/model/repository/hql.moduleA.hbm.xml</value>
<value>classpath:br/com/ar/model/repository/hql.moduleB.hbm.xml</value>
</util:list>
</property>
<property name="packagesToScan">
<util:list>
<value>br.com.ar.moduleA.model.domain</value>
<value>br.com.ar.moduleB.model.domain</value>
</util:list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.connection.charSet">UTF-8</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.validator.autoregister_listeners">false</prop>
</props>
</property>
</bean>
</beans>
Aviso estoy usando Hibernate. JPA debe estar configurado correctamente.
Transacción de exploración componente de gestión y ar-service.xml Aviso Dos puntos después debr.com.ar en AOP: atributo de expresión del punto de corte que significa
Cualquier paquete y sub-package en paquete br.com.ar
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="br.com.ar.model">
<!--Transaction manager - It takes care of calling begin and commit in the underlying resource - here a Hibernate Transaction -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="repositoryTransactionManagementAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="remove" propagation="REQUIRED"/>
<tx:method name="update" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<tx:advice id="serviceTransactionManagementAdvice" transaction-manager="transactionManager">
<!--Any method - * - in service layer should have an active Transaction - REQUIRED - -->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="servicePointcut" expression="execution(* br.com.ar..service.*Service.*(..))"/>
<aop:pointcut id="repositoryPointcut" expression="execution(* br.com.ar..repository.*Repository.*(..))"/>
<aop:advisor advice-ref="serviceTransactionManagementAdvice" pointcut-ref="servicePointcut"/>
<aop:advisor advice-ref="repositoryTransactionManagementAdvice" pointcut-ref="repositoryPointcut"/>
</aop:config>
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
</beans>
Prueba
el método de ensayo @Controller anotada, ver cómo here
Aparte de capa web. Observe cómo configuro una fuente de datos JNDI en el método @Before
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:ar-service.xml", "classpath:ar-persistence.xml"})
public class AccountRepositoryIntegrationTest {
@Autowired
@Qualifier("accountRepository")
private Repository<Account, Account, Integer> 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 necesita una serie de pruebas, haga lo siguiente
@RunWith(Suite.class)
@Suite.SuiteClasses(value={AccountRepositoryIntegrationTest.class})
public void ModuleASuiteTest {}
web.xml se muestra de la siguiente manera
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:ar-persistence.xml
classpath:ar-service.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>ar</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ar</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<resource-ref>
<description>datasource</description>
<res-ref-name>jdbc/dataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
Espero que pueda ser útil. Actualizar esquema a Spring 3.0. Ver la documentación de referencia de Spring. mvc schema, Hasta donde yo sé, es compatible solo en Spring 3.0. Tenga esto en cuenta
Esto es exactamente lo que estaba buscando. Muy bien explicado esp. la convención sobre la parte de configuración. – coolscitist
- 1. TableViewController no muestra los indicadores de desplazamiento aunque la tabla sea más grande que la vista
- 2. Cómo hacer que un C++ EXE sea más grande (artificialmente)
- 3. Cómo hacer que la declaración if grande sea más legible
- 4. Buscando un proyecto de fuente abierta C#
- 5. BitmapFactory devuelve una imagen más grande que la fuente
- 6. ¿buen proyecto de fuente abierta que usa el Marco de inyección de dependencia?
- 7. ¿Evita que el relleno haga que el elemento sea más grande?
- 8. ¿Qué es más grande que un doble?
- 9. ¿Cómo crear una vista que sea más grande que la pantalla?
- 10. ¿Cómo hacer que Formule sea más grande en el modo orgánico de Emacs?
- 11. ¿Hay alguna manera de hacer que el simulador de iPad sea más grande?
- 12. OCR de fuente abierta
- 13. ¿Cómo puedo hacer que una casilla de verificación sea más grande?
- 14. ¿Hay algo más grande que ninguno?
- 15. DialogBoxIndirect crea un diálogo más grande que
- 16. Teoría: Algoritmo de compresión que hace que algunos archivos sean más pequeños pero ninguno más grande.
- 17. ¿Cómo hacer que Rotate3dAnimation sea más suave?
- 18. ¿Por qué el navegador muestra td es más grande que mi propiedad de ancho especificado?
- 19. ¿Qué hace que Oracle sea más escalable?
- 20. Haga que xml sea más legible
- 21. ¿Puedo hacer que JUnit sea más detallado?
- 22. Cómo hacer que TimePicker sea más pequeño
- 23. Permitir que la imagen sea más ancha que conteniendo div
- 24. ¿Cómo hacer que EditText sea más pequeño que el predeterminado?
- 25. ¿Qué hace que PostgreSQL sea más avanzado que MySQL?
- 26. C++: Haciendo que mi proyecto sea compatible con unicode
- 27. Cualquier sitio grande que use Client Side XSLT?
- 28. Alternativa de fuente abierta de Ideatorrent
- 29. UITableView que muestra más filas que las especificadas en numberOfRowsInSection:
- 30. Document.writes anidados y anuncios de terceros que no funcionan en IE !!!! Cualquier solución que sea segura?
Te concedo voto UP (+1) solo porque has hecho una muy buena búsqueda en Google sobre proyectos basados en Spring. –
Esta lista cumplida es una copia de mis notas que mantengo como referencia –