[Java 프로그래밍 언어 전용]

Spring에서 트랜잭션 관리

Spring은 Java™ 애플리케이션을 개발하기 위한 인기 있는 프레임워크입니다. WebSphere® eXtreme Scale 은 Spring이 eXtreme Scale 트랜잭션을 관리하고 eXtreme Scale 클라이언트 및 서버를 구성할 수 있도록 지원합니다.

이 태스크에 대한 정보

Spring 프레임워크는 다음 섹션에서 설명하는 대로 eXtreme Scale과 매우 통합 가능합니다.

프로시저

  • 원시 트랜잭션: Spring은 Java Platform, Enterprise Edition Application Server의 스타일에 따라 컨테이너 관리 트랜잭션을 제공하지만 Springs 메커니즘에 다른 구현이 플러그인될 수 있다는 장점이 있습니다. 이 주제에서는 Spring과 함께 사용할 수 있는 eXtreme Scale Platform Transaction Manager에 대해 설명합니다. 이를 통해 프로그래머는 POJO (Plain Old Java Object) 에 어노테이션을 작성한 후 Spring이 자동으로 eXtreme Scale 에서 세션을 획득하고 eXtreme Scale 트랜잭션을 시작, 커미트, 롤백, 일시중단 및 재개할 수 있습니다. Spring 트랜잭션은 공식 Spring 참조 문서의 10장에 자세히 설명되어 있습니다. 다음은 eXtreme Scale 트랜잭션 관리자를 작성하고 어노테이션이 있는 POJO와 함께 사용하는 방법에 대해 설명합니다. 또한 클라이언트 또는 로컬 eXtreme Scale 및 배치된 데이터 그리드 스타일 애플리케이션에서 이 접근 방식을 사용하는 방법에 대해서도 설명합니다.
  • 트랜잭션 관리자: Spring에 대해 작업하기 위해 eXtreme Scale 은 Spring PlatformTransaction관리자의 구현을 제공합니다. 이 관리자는 Spring에서 관리하는 POJO에 관리되는 eXtreme Scale 세션을 제공할 수 있습니다. 어노테이션을 사용하여 Spring은 트랜잭션 라이프사이클의 관점에서 POJO에 대해 해당 세션을 관리합니다. 다음 XML 스니펫에서는 Transaction Manager를 작성하는 방법을 보여줍니다.
    <aop:aspectj-autoproxy/>
    	<tx:annotation-driven transaction-manager="transactionManager"/>
    
    	<bean id="ObjectGridManager"
    				class="com.ibm.websphere.objectgrid.ObjectGridManagerFactory"
    				factory-method="getObjectGridManager"/>
    
    	<bean id="ObjectGrid"
    				factory-bean="ObjectGridManager"
    				factory-method="createObjectGrid"/>
    
    	<bean id="transactionManager"
    				class="com.ibm.websphere.objectgrid.spring.ObjectGridSpringFactory"
    				factory-method="getLocalPlatformTransactionManager"/>
    	</bean>
    
    	<bean id="Service" class="com.ibm.websphere.objectgrid.spring.test.TestService">
    		<property name="txManager" ref+"transactionManager"/>
    	</bean>
    여기에서는 transactionManager Bean을 선언하고 Spring 트랜잭션을 사용하는 서비스 Bean에 연결함을 표시합니다. 어노테이션을 사용하여 이 방법을 보여줍니다. 시작 위치에 tx:annotation절을 사용하는 이유이기도 합니다.
  • ObjectGrid 세션 확보:
    Spring에서 관리하는 메소드가 있는 POJO는 이제 다음을 사용하여 현재 트랜잭션에 대한 ObjectGrid 세션을 가져올 수 있습니다.
    Session s = txManager.getSession();
    그러면 사용할 POJO에 대한 세션이 리턴됩니다. 동일한 트랜잭션에 참여하는 Bean은 이 메소드를 호출할 때 동일한 세션을 수신합니다. Spring은 세션에 대한 시작을 자동으로 처리하고 필요한 경우 커미트 또는 롤백을 호출합니다. 간단하게 세션 오브젝트에서 getEntityManager를 호출하여 또한 ObjectGrid EntityManager를 가져올 수 있습니다.
  • 스레드에 대한 ObjectGrid 인스턴스 설정: 단일 JVM (Java Virtual Machine) 은 많은 ObjectGrid 인스턴스를 호스트할 수 있습니다. JVM에 배치된 각 1차 샤드는 고유한 ObjectGrid 인스턴스를 보유합니다. 원격 ObjectGrid에 대해 클라이언트 역할을 하는 JVM은 연결 메소드의 ClientClusterContext에서 리턴된 ObjectGrid 인스턴스를 사용하여 해당 그리드와 상호작용합니다. ObjectGrid에 대한 Spring 트랜잭션을 사용하여 POJO에서 메소드를 호출하기 전에 사용할 ObjectGrid 인스턴스에서 스레드를 준비해야 합니다. TransactionManager 인스턴스에는 특정 ObjectGrid 인스턴스를 지정할 수 있는 메소드가 있습니다. 지정되면 후속 txManager.getSession 호출이 해당 ObjectGrid 인스턴스에 대한 세션을 리턴합니다.
    다음 예제는 이 기능을 연습하는 기본 샘플을 표시합니다.
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]
                {"applicationContext.xml"});
        SpringLocalTxManager txManager = (SpringLocalTxManager)ctx.getBean("transactionManager");
        txManager.setObjectGridForThread(og);
            
        ITestService s = (ITestService)ctx.getBean("Service");
        s.initialize();
        assertEquals(s.query(), "Billy");
        s.update("Bobby");
        assertEquals(s.query(), "Bobby");
        System.out.println("Requires new test");
        s.testRequiresNew(s);
        assertEquals(s.query(), "1");
    여기에서는 Spring ApplicationContext를 사용합니다. ApplicationContext를 사용하여 txManager에 대한 참조를 확보하고 이 스레드에서 사용할 ObjectGrid를 지정합니다. 그러면 코드는 서비스에 대한 참조를 확보하고 여기에서 메소드를 호출합니다. 이 레벨에서 각 메소드를 호출하면 Spring에서 세션을 작성하고 메소드 호출 주변에서 시작/커미트 호출을 수행합니다. 예외가 생기면 롤백이 수행됩니다.
  • SpringLocalTxManager 인터페이스: SpringLocalTxManager 인터페이스는 ObjectGrid Platform Transaction Manager에 의해 구현되며 모든 공용 인터페이스를 갖습니다. 이 인터페이스의 메소드는 스레드에서 사용할 ObjectGrid 인스턴스를 선택하고 스레드에 대한 세션을 확보하는 데 사용됩니다. ObjectGrid 로컬 트랜잭션을 사용하는 POJO는 이 관리자 인스턴스에 대한 참조와 함께 삽입되어야 하며, 하나의 단일 인스턴스만 작성하면 됩니다. 즉, 해당 범위는 싱글톤이어야 합니다. 이 인스턴스는 ObjectGridSpringFactory에서 정적 메소드를 사용하여 작성됩니다. getLocalPlatformTransaction관리자 ().
    제한사항: WebSphere eXtreme Scale 은 확장성과 관련된 다양한 이유로 JTA 또는 2단계커미트를 지원하지 않습니다. 따라서 마지막 1단계 참가자를 제외하고, ObjectGrid는 XA 또는 JTA 유형의 글로벌 트랜잭션에서 상호작용하지 않습니다. 이 플랫폼 관리자는 Spring 개발자의 경우 가능한 한, 쉽게 로컬 ObjectGrid 트랜잭션을 사용하도록 의도되었습니다.