Oracle 자동 생성 키 발견

컨테이너 관리 지속적 Bean의 WebLogic 배치 디스크립터를 통해 애플리케이션은 자동 데이터베이스 순서(키) 생성에 필요한 기능을 사용할 수 있습니다. 이 기능을 사용하는 경우, WebLogic 애플리케이션은 CMP EJB 오브젝트를 작성할 때 다음 순서 키를 생성하는 코드를 포함할 필요가 없습니다. 자동 순서 생성을 포함하는 WebLogic 애플리케이션을 마이그레이션하는 경우, 애플리케이션 코드를 추가하여 새 항목의 순서 ID를 생성해야 합니다.

weblogic-cmp-rdbms-jar.xml 파일에는 WebLogic RDBMS 기반 지속성을 사용하는 엔티티 EJB의 정보가 포함되어 있습니다. 이 규칙은 WebLogic automatic-key-generation 요소의 구성을 스캔하며 Oracle 생성기 유형의 마이그레이션 정보를 제공합니다. 다음 예제는 이 규칙에서 플래그 지정할 요소를 표시합니다.

< weblogic-rdbms-bean>
<ejb-name>카드</ejb-name>
<data-source-name>MyData소스</data-source-name>
<table-name>테이블 (MY_TABLE)</table-name>
...
< span class= "indent2"> < /span> < automatic-key-generation>
<generator-type>Oracle</generator-type>
<generator-name>sequence_id</generator-name>
<key-cache-size>10</key-cache-size>
</automatic-key-generation>
...
</weblogic-rdbms-bean>

generator-name 항목은 다음 순서 생성에 사용할 Oracle DUAL 테이블에서의 이름을 표시합니다. 예를 들어, sequence_idgenerator_name이 있으면 다음 SQL문을 사용하여 다음 순서 번호를 가져올 수 있습니다.

select sequence_id.NEXTVAL from dual;

이 규칙이 weblogic-cmp-rdbms-jar.xml 배치 디스크립터의 항목을 플래그 지정하는 경우, EJB 코드를 수동으로 수정하는 단계를 수행하여 키를 작성해야 합니다. 이 단계는 WebSphere Application Server의 EJB 스텁을 다시 생성하기 전에 수행되어야 합니다. 다음 예제는 가능한 마이그레이션 경로를 간단하게 보여줍니다.

다음 상위 레벨 예제에서는 Oracle 자동 생성 키 로직의 기능을 대체하는 방법을 보여줍니다. Oracle 자동 생성 순서 번호를 사용하는 각 CMP Bean마다 같은 종류의 코드를 써야 합니다. 유틸리티 도움말 클래스를 작성하여 각 Bean의 순서 번호를 생성하는 공통 로직을 결합할 수 있습니다.

엔티티 Bean의 ejbCreateejbPostCreate 메소드에 순서 번호의 매개변수를 추가합니다.

수행 전:

public Integer ejbCreate(String cardNumber, String lastName, String firstName,
java.sql.Date issueDate) throws CreateException
...

public Integer postCreate(String cardNumber, String lastName, String firstName,
java.sql.Date issueDate) throws CreateException
...

수행 후:

public Integer ejbCreate(Integer sequenceID, String cardNumber, String lastName, String firstName,
java.sql.Date issueDate) throws CreateException
...

public Integer postCreate(Integer sequenceID, String cardNumber, String lastName, String firstName,
java.sql.Date issueDate) throws CreateException
...

ejbCreate 메소드에서 EJB의 해당 필드에 순서 번호를 설정합니다.

public Integer ejbCreate(Integer sequenceID, String cardNumber, String lastName, String firstName,
java.sql.Date issueDate) throws CreateException
{
...
setCardID(sequenceID);
...
}

EJB 홈의 create 메소드에 순서 번호의 매개변수를 추가합니다.

수행 전:

public Card create(String cardNumber, String lastName, String firstName,
java.sql.Date issueDate) throws CreateException;

수행 후:

public Card create(Integer sequenceID, String cardNumber, String lastName, String firstName,
java.sql.Date issueDate) throws CreateException;

CMP 엔티티 Bean의 다음 순서 번호를 가져오는 로직을 추가합니다.

String sqlQuery = "select sequence_id.NEXTVAL from dual";
PreparedStatement prepStmt = con.prepareStatement(sqlQuery);

ResultSet rs = prepStmt.executeQuery();
if(rs != null) {
rs.next();
nextKey = rs.getInt("NEXTVAL");
}

다음 순서 번호를 전달하기 위해 EJB 홈 create() 메소드가 호출되는 코드를 수정합니다.

Card card = cardHome.create(nextKey, cardNumber, lastName, firstName, newDate);