SharedResourcePowerServer

이제 네이티브 및 생성된 Java™ 코드는 데이터베이스 연결을 공유할 수 있으므로 사용자는 두 유형의 코드가 포함된 실행 단위에서 이전에 작성된 데이터베이스 변경사항을 커미트할 수 있습니다. 호환성이 작동하게 하려면 다음 PowerServer Java 클래스 및 동일한 이름의 EGL 외부 유형(SharedResourcePowerServer)을 사용하십시오.

해당 유형의 오브젝트를 사용하면 네이티브 및 생성된 Java 프로그램이 데이터베이스 연결 세트를 공유할 수 있습니다. 연결 세트는 두 가지 메커니즘에 의해 판별됩니다.
  • 생성된 Java에서(예를 들어, SQLLib.connect 시스템 함수에 대한 호출에 의해)
  • 네이티브 Java에서(SharedResourcePowerServer의 addConnection 메소드에 대한 호출에 의해)

EGL 코드를 작성하는 경우에는 JavaLib.getSharedResourcePowerServer를 호출하여 SharedResourcePowerServer 오브젝트에 액세스할 수 있습니다. 현재 EGL 프로그램에서만 연결을 작성했을 수 있지만 연결 세부사항을 제공하기 위해 오브젝트를 네이티브 Java 코드에 전달합니다. 이 고유 메커니즘은 네이티브 Java 코드에 액세스하는 방법(외부 유형을 사용하거나 JavaLib 시스템 라이브러리에서 제공되는 Java 액세스 함수를 사용함)에 관계없이 작동합니다.

현재 주제에서는 SharedResourcePowerServer의 다음과 같은 메소드에 대해서만 설명합니다.

해당 메소드는 SharedResourcePowerServer에 고유하며 PowerServer 또는 SharedResourcePowerServer에 의해 제공된 메소드에 추가로 제공됩니다. 네이티브 Java 코드에서 두 유형 중 하나의 오브젝트를 사용하는 방법에 대한 개요는 "Java 랩퍼 클래스"를 참조하십시오.

추가 세부사항은 기타 고려사항의 내용을 참조하십시오.

addConnection

addConnection 메소드는 데이터베이스 연결을 추가하고 EGL에 의해 생성된 프로그램에서 해당 연결을 최신 상태로 만듭니다. addConnection 메소드가 반복적으로 호출되는 경우에는 이전 호출에서 지정된 연결을 해당 연결이 닫힐 때까지 계속 사용할 수 있습니다.

public void addConnection( Connection con, String name, int disconnectOption ) 
		throws NullPointerException, IllegalArgumentException, JavartException
con
프로그램의 DBMS 빌드 디스크립터 옵션에서 지정된 데이터베이스의 유형에 대한 연결입니다. 연결의 유형은 java.sql.Connection입니다.
이름
해당 연결에 지정하는 이름입니다. SQLLib.setCurrentDatabase, SQLLib.beginDatabaseTransaction, SQLLib.defineDatabaseAlias 또는 SQLLib.disconnect 호출 시 해당 이름을 사용합니다.
disconnectOption
다음 SharedResourcePowerServer 클래스 값 중 하나입니다.
DISCONNECT_NEVER
EGL 런타임이 연결을 닫지 않습니다.

본질적으로 이 값이 기본값입니다. 오버로드된 메소드 변형에서는 두 개의 매개변수만 사용하며 이 경우 DISCONNECT_NEVER가 자동으로 제공됩니다.

DISCONNECT_AUTOMATIC
연결이 SQLLib.disconnect, SQLLib.disconnectAll, SysLib.commit 또는 SysLib.rollback에 대한 호출이나 SharedResourcePowerServer 메소드인 commit와 rollBack 중 하나에 대한 호출에 의해 닫힙니다.
DISCONNECT_CONDITIONAL
연결이 다음과 같은 방법으로 닫힙니다.
  • SQLLib.disconnect, SQLLib.disconnectAll 또는 SysLib.rollback에 대한 호출에 의해
  • 연결에 의해 작성된 열린 결과 세트에 대해 HOLD 옵션이 적용되지 않는 경우 SysLib.commit에 대한 호출에 의해
  • SharedResourcePowerServer 메소드인 commit와 rollBack 중 하나에 대한 호출에 의해
DISCONNECT_EXPLICIT
연결이 SqlLib.disconnect 또는 SqlLib.disconnectAll에 대한 호출이나 SharedResourcePowerServer close 메소드에 대한 호출에 의해 닫합니다.
이 메소드에서는 다음과 같은 예외가 발생합니다.
  • NullPointerException(con 또는 name이 널인 경우)
  • IllegalArgumentException(name이 비어 있거나 모두 공백이거나 disconnectionOption이 올바르지 않은 경우)
  • JavartException(연결을 사용할 수 없는 경우)

getConnection

getConnection 메소드는 이름 지정된 연결을 리턴하며 연결에 지정된 이름이 없는 경우에는 널을 리턴합니다.

public Connection getConnection( String name ) throws JavartException
이름
연결의 이름입니다.

리턴된 연결의 유형은 java.sql.Connection입니다. 이 메소드에서는 내부 오류 후 JavartException이 발생합니다.

getConnections

getConnections 메소드는 활성 연결의 이름을 java.sql.Connection 유형의 오브젝트에 관련시키는 맵 오브젝트를 리턴합니다. java.util.Map 유형인 리턴된 맵 오브젝트를 수정할 수 없습니다.

public Map <String, Connection> getConnections() throws JavartException

이 메소드에서는 내부 오류 후 JavartException이 발생합니다.

getCurrentConnection

getCurrentConnection 메소드는 활성 연결을 리턴하며 현재 연결이 적용되지 않는 경우에는 널을 리턴합니다.

public Connection getCurrentConnection() throws JavartException

리턴된 연결의 유형은 java.sql.Connection입니다. 이 메소드에서는 내부 오류 후 JavartException이 발생합니다.

releaseConnection

releaseConnection 메소드는 연결이 열린 경우 disconnect 옵션이 DISCONNECT_NEVER와 다른 경우 연결 오브젝트를 닫습니다. disconnect 옵션이 DISCONNECT_NEVER이거나 연결이 이미 닫힌 경우에도 EGL 런타임은 연결과 연관된 자원을 해제할 수 있습니다.

이 메소드의 두 가지 변형을 사용할 수 있습니다.

public void releaseConnection( String name ) throws JavartException, SQLException


public void releaseConnection( Connection con ) throws JavartException, SQLException
이름
연결의 이름입니다.
con
java.sql.Connection 유형의 연결 오브젝트입니다.
이 메소드에서는 다음과 같은 예외가 발생합니다.
  • SQLException(데이터베이스 관리 시스템이 오류를 리턴하는 경우)
  • JavartException(내부 오류가 발생하는 경우)

기타 고려사항

SharedResourcePowerServer 유형의 오브젝트에 대해 작업할 때 몇몇 고려사항이 적용됩니다.
  • 네이티브 Java 코드에서 연결을 닫는 경우 releaseConnection 메소드 중 하나를 호출하여 자원을 해제하십시오.
  • 네이티브 Java 코드를 작성하는 경우에는 연결이 생성된 Java 코드에서 사용 중이거나 네이티브 Java 코드가 연결을 닫거나 커미트 또는 롤백을 수행하거나 생성된 코드가 연결을 다시 사용하는 상황에서 런타임 오류가 발생할 수 있다는 점에 유의하십시오. 예제는 다음과 같습니다.
    1. 생성된 코드가 prepare문을 실행하고 외부 유형 또는 JavaLib 액세스 함수를 사용하여 네이티브 Java 코드를 호출하고 JavaLib.getSharedResourcePowerServer 함수에 의해 제공된 오브젝트를 전달합니다.
    2. 네이티브 코드가 연결을 닫고 제어를 생성된 코드에 리턴합니다.
    3. 생성된 코드가 이전의 prepare문에 의해 작성된 명령문을 사용하지만 연결이 닫혔을 때 준비된 명령문이 이전에 닫혔기 때문에 생성된 코드가 실패합니다.
  • EGL 논리는 SharedResourcePowerServer 오브젝트에 대해 둘 이상의 연결을 지정할 수 있습니다. 기본적으로 EGL 명령문은 powerServer.addConnection()에 전달된 마지막 연결을 사용합니다. SQLLib.setCurrentDatabase를 호출하여 새 연결을 선택할 수 있습니다.
  • SysLib.commit 또는 SysLib.rollback에 대한 호출은 SharedResourcePowerServer 오브젝트에 지정된 모든 연결에 영향을 미칩니다. 하지만 EGL 런타임이 초기 연결에 대해 작성된 변경사항을 커미트하지만 두 번째 연결에 대해 작성된 변경사항을 커미트할 때 문제가 발생하여 실패하는 상황이 발생할 수 있습니다. 커미트는 2단계(Phase) 커미트가 아니라 1단계(Phase) 커미트여서 모든 자원이 커미트되거나 아무 자원도 커미트되지 않으므로 실패 후 데이터는 불일치 상태로 남아 있습니다.
  • 생성된 코드는 연결이 작성된 스레드의 연결만 사용할 수 있습니다.