programing

펫클리닉보다 더 큰 오픈소스 스프링 샘플 프로젝트가 있습니까?

magicmemo 2023. 9. 13. 22:31
반응형

펫클리닉보다 더 큰 오픈소스 스프링 샘플 프로젝트가 있습니까?

스프링 서류와 펫클리닉 샘플 프로젝트를 다 읽었습니다.스프링과 함께 진행되는 더 큰 실제 프로젝트를 보는 것과 같습니다.감사해요.

스프링 프로젝트

파워스톤

투두 목록

알프레스코 콘텐츠 관리

스프링 사이드

플라즈마

날렵한 표현

Zk샘플2

스프링 리치 클라이언트

브로드리프 커머스

OpenERP

히스팩타

루이지 오픈 서치 엔진

JOSSO

HSE

Java 중소기업 플랫폼

징병관

저는 스프링을 백엔드로 많이 사용하는 대형 건강보험회사에서 일하고 있습니다.모듈화된 애플리케이션이 어떻게 구축되는지 보여드리겠습니다.

클래스 디렉터리가 없는 스켈레톤 WEB-INF

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

스켈레톤 클래스 디렉터리

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

br.com.ar .web의 각 패키지가 WEB-INF/view 디렉토리와 어떻게 일치하는지 주목하십시오.이것은 Spring MVC에서 컨벤션 오버 구성을 실행하는 데 필요한 핵심입니다.어떻게 하죠??의존 컨트롤러 클래스 이름핸들러 매핑

WEB-INF/ar-servlet.xml NoticebasePackage 속성은 br.com.ar .view package에서 @Controller 클래스를 찾습니다.이 속성을 통해 모듈화된 @Controller's를 구축할 수 있습니다.

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

이제 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);
    }

}

어떻게 작동하죠?

http://127.0.0.0.1:8080/ar/moduleA/account/form.html을 요청한다고 가정합니다.

스프링은 위에서 강조 표시한 컨텍스트 경로와 파일 확장명 사이의 경로를 제거합니다.오른쪽에서 왼쪽으로 추출된 경로를 읽어보겠습니다.

  • 양식방법명
  • 계정 컨트롤러 접미사가 없는 정규화되지 않은 클래스 이름
  • modulebasePackage 속성에 추가될 패키지

번역하면 다음과 같습니다.

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

좋아요. 하지만 스프링은 어떤 장면을 보여줘야 하는지 어떻게 알죠?여기를 보시오

그리고 지속성과 관련된 문제들에 대해서 ?

먼저, 저장소 구현 방법을 참조하십시오.각 관련 모듈 쿼리는 관련 저장소 패키지에 저장됩니다.위의 골격 참조.다음은 ar-persistence.xml Notice mapping 위치 및 패키지입니다.ToScan 속성

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

Hibernate를 사용하고 있습니다.JPA를 적절하게 구성해야 합니다.

트랜잭션 관리구성 요소 스캔 ar-service.xml Notice br.com.ar 뒤에 있는 두 의 점 aop:pointcut의 식 속성은 다음을 의미합니다.

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>

테스트

주석이 달린 @Controller 메서드를 테스트하려면 여기를 참조하십시오.

웹 계층 이외의.@Before 메서드에서 JNDI dataSource를 구성하는 방법을 주목하십시오.

@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);
    }

}

테스트가 필요한 경우 다음과 같이 하십시오.

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

web.xml은 다음과 같이 표시됩니다.

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

유용하게 쓰였으면 좋겠습니다.스키마를 Spring 3.0으로 업데이트합니다.Spring 참조 문서 참조. mvc 스키마는 Spring 3.0에서만 지원되는 것으로 알고 있습니다.참고하세요.

일부 후보:

  • AppFuse - AppFuse에서 스프링 프레임워크는 최대 절전 모드/iB에 사용됩니다.ATIS 지원, 선언 트랜잭션, 종속성 바인딩 및 계층 분리.

  • 이쿼녹스(일명: Equinox)AppFuse Light) - Spring Live의 일부로 만들어진 간단한 CRUD 앱입니다.

  • 스프링 바이 예제 - 다양한 스프링 예제와 다운로드 가능한 라이브러리가 있습니다.

  • Tudu Lists - Tudu Lists는 작업관리 목록을 관리하기 위한 J2EE 응용프로그램입니다.JDK 5.0, Spring, Hibernate 및 AJAX 인터페이스(DWR 프레임워크 사용)를 기반으로 합니다.

Apache CXF를 보십시오.스프링을 사용합니다.

언급URL : https://stackoverflow.com/questions/2604655/any-open-source-spring-sample-project-thats-bigger-than-petclinic

반응형