>  기사  >  Java  >  Java 사물의 원리를 이해하는 방법

Java 사물의 원리를 이해하는 방법

WBOY
WBOY앞으로
2023-04-20 12:07:061267검색

1. Java 트랜잭션이란 무엇입니까?

일반적인 개념은 트랜잭션이 데이터베이스에만 관련된다는 것입니다.

거래는 ISO/IEC에서 정한 ACID 원칙을 준수해야 합니다. ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 내구성(Durability)의 약어입니다. 트랜잭션의 원자성은 트랜잭션 실행 중 오류가 발생하면 트랜잭션에 의한 모든 수정 사항이 무효화된다는 것을 의미합니다. 일관성이란 트랜잭션이 실패할 때 트랜잭션의 영향을 받은 모든 데이터를 트랜잭션이 실행되기 전의 상태로 복원해야 함을 의미합니다. 격리란 트랜잭션 실행 중 데이터 수정 사항이 트랜잭션이 커밋되기 전에 다른 트랜잭션에 표시되지 않음을 의미합니다. 지속성은 트랜잭션 실행이 실패할 때 제출된 데이터의 상태가 정확해야 함을 의미합니다.

일반적인 이해에 따르면 트랜잭션은 데이터베이스 관점에서 일련의 SQL 명령입니다. 어떤 이유로든 명령 중 하나가 잘못 실행되면 모두 성공적으로 실행됩니다. 실행된 명령이 취소됩니다. 더 간단한 대답은 모든 실행이 성공하거나 취소되어 실행되지 않는다는 것입니다.

트랜잭션의 개념이 데이터베이스에서 나온다면 자바 트랜잭션이란 무엇일까요? 무슨 연관성이 있나요?

실제로 자바 응용 시스템이 데이터베이스를 운영하고자 한다면 JDBC를 통해 구현됩니다. 추가, 수정, 삭제는 모두 해당 메소드를 통해 간접적으로 구현되며 이에 따라 트랜잭션 제어도 Java 프로그램 코드로 전달됩니다. 따라서 데이터베이스 작업 트랜잭션을 관례적으로 Java 트랜잭션이라고 합니다.

2. Java 트랜잭션이 필요한 이유

트랜잭션은 데이터 보안 작업을 해결하기 위해 제안됩니다. 트랜잭션 제어는 실제로 데이터의 안전한 액세스를 제어하는 ​​것입니다. 간단한 예는 다음과 같습니다. 예를 들어 은행 이체 업무에서 A 계좌는 자신의 계좌에서 B 계좌로 1,000위안을 이체하려고 합니다. 먼저 A 계좌의 잔액에서 1,000위안을 뺀 다음 B 계좌의 잔액을 빼야 합니다. 1,000원 ​​인상됩니다. 중개망에 문제가 있어 A계좌에서 1,000위안 공제가 종료되고, 망장애로 B의 운영이 실패하게 되면 전체 사업이 실패하게 되어 이체취소를 요구하도록 통제가 이루어져야 한다. A 계좌의 사업. 이를 통해 비즈니스의 정확성을 보장할 수 있습니다. 이 작업을 완료하려면 계정 A 자금의 감소와 계정 B 자금의 증가가 하나의 트랜잭션으로 결합되어야 합니다. 따라서 데이터의 보안을 유지합니다.

3. Java 트랜잭션 유형

Java 트랜잭션에는 JDBC 트랜잭션, JTA(Java Transaction API) 트랜잭션, 컨테이너 트랜잭션의 세 가지 유형이 있습니다.

1. JDBC 트랜잭션

JDBC 트랜잭션은 연결 개체에 의해 제어됩니다. JDBC 연결 인터페이스(java.sql.Connection)는 자동 제출과 수동 제출이라는 두 가지 트랜잭션 모드를 제공합니다. java.sql.Connection은 트랜잭션을 제어하기 위해 다음과 같은 메소드를 제공합니다.

public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()

JDBC 트랜잭션 정의를 사용할 때 여러 작업을 수행할 수 있습니다. SQL 문은 트랜잭션으로 결합됩니다. JDBC 트랜잭션의 한 가지 단점은 트랜잭션 범위가 하나의 데이터베이스 연결로 제한된다는 것입니다. JDBC 트랜잭션은 여러 데이터베이스에 걸쳐 있을 수 없습니다.

2. JTA(Java Transaction API) transaction

JTA는 구현에 독립적이고 프로토콜에 독립적인 API입니다. 애플리케이션 및 애플리케이션 서버는 JTA를 사용하여 트랜잭션에 액세스할 수 있습니다.

JTA를 사용하면 애플리케이션이 분산 트랜잭션을 수행할 수 있습니다. 즉, 여러 데이터베이스에 분산될 수 있는 두 개 이상의 네트워크 컴퓨터 리소스에 있는 데이터에 액세스하고 업데이트할 수 있습니다. JDBC 드라이버의 JTA 지원은 데이터 액세스 기능을 크게 향상시킵니다.

JTA를 사용하여 트랜잭션을 구분하려는 경우 javax.sql.XADataSource, javax.sql.XAConnection 및 javax.sql.XAResource 인터페이스를 구현하는 JDBC 드라이버가 필요합니다. 이러한 인터페이스를 구현하는 드라이버는 JTA 트랜잭션에 참여할 수 있습니다. XADataSource 객체는 XAConnection 객체의 팩토리입니다. XAConnection 은 JTA 트랜잭션에 참여하는 JDBC 연결입니다.

애플리케이션 서버의 관리 도구를 사용하여 XADataSource를 설정해야 합니다. 지침은 응용 프로그램 서버 및 JDBC 드라이버 설명서에서 찾을 수 있습니다.

J2EE 애플리케이션은 JNDI를 사용하여 데이터 소스를 쿼리합니다. 애플리케이션이 데이터 소스 객체를 찾으면 javax.sql.DataSource.getConnection()을 호출하여 데이터베이스에 대한 연결을 얻습니다.

XA 연결은 비XA 연결과 다릅니다. XA 연결이 JTA 트랜잭션에 참여한다는 점을 기억하는 것이 중요합니다. 이는 XA 연결이 JDBC의 자동 커밋 기능을 지원하지 않음을 의미합니다. 동시에 애플리케이션은 XA 연결에서 java.sql.Connection.commit() 또는 java.sql.Connection.rollback()을 호출해서는 안 됩니다.

대신, 애플리케이션은 UserTransaction.begin(), UserTransaction.commit() 및 serTransaction.rollback()을 사용해야 합니다.

3.컨테이너 업무

컨테이너 트랜잭션은 주로 J2EE 애플리케이션 서버에서 제공됩니다. 컨테이너 트랜잭션은 대부분 JNDI 기반의 상당히 복잡한 API 구현인 JTA를 기반으로 완료됩니다. JTA 트랜잭션 관리를 구현하기 위한 코딩과 비교하면, EJB 컨테이너에서 제공하는 컨테이너 트랜잭션 관리 메커니즘(CMT)을 통해 동일한 기능을 완성할 수 있습니다. 이 기능은 J2EE 애플리케이션 서버에서 제공됩니다. 이를 통해 트랜잭션에 추가할 메서드를 간단히 지정할 수 있으며 일단 지정되면 컨테이너가 트랜잭션 관리 작업을 처리합니다. 이것이 우리의 토목 공학 솔루션입니다. 왜냐하면 이러한 방식으로 우리는 논리적 코딩에서 트랜잭션 코드를 제외할 수 있고 동시에 모든 어려움을 J2EE 컨테이너가 해결하도록 맡길 수 있기 때문입니다. EJB CMT를 사용하는 또 다른 이점은 프로그래머가 JTA API 코딩에 신경 쓸 필요가 없다는 것입니다. 그러나 이론적으로는 EJB를 사용해야 합니다.

네 가지 유형의 Java 트랜잭션 차이점

1. JDBC 트랜잭션 제어의 한계는 데이터베이스 연결 내에 있지만 사용법은 간단합니다.

2. JTA 트랜잭션은 강력합니다. 트랜잭션은 여러 데이터베이스 또는 여러 DAO에 걸쳐 있을 수 있으며 그 사용도 비교적 복잡합니다.

3. 컨테이너 트랜잭션은 주로 J2EE 애플리케이션 서버에서 제공하는 트랜잭션 관리를 의미하며 EJB 애플리케이션으로 제한됩니다.

위 내용은 Java 사물의 원리를 이해하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제