컨테이너 관리 지속적 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>Card</ejb-name> <data-source-name>MyDataSource</data-source-name> <table-name>MY_TABLE</table-name> ... <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_id의 generator_name이 있으면
다음 SQL문을 사용하여 다음 순서 번호를 가져올 수 있습니다.
| select sequence_id.NEXTVAL from dual; |
이 규칙이 weblogic-cmp-rdbms-jar.xml 배치 디스크립터의 항목을 플래그 지정하는 경우, EJB 코드를 수동으로 수정하는 단계를 수행하여 키를 작성해야 합니다. 이 단계는 WebSphere Application Server의 EJB 스텁을 다시 생성하기 전에 수행되어야 합니다. 다음 예제는 가능한 마이그레이션 경로를 간단하게 보여줍니다.
ejbCreate 및 ejbPostCreate 메소드에 순서 번호의 매개변수를 추가합니다.ejbCreate 및 ejbPostCreate 메소드에서 EJB의 해당 필드에 순서 번호를 설정합니다.create 메소드에 순서 번호의 매개변수를 추가합니다.create() 메소드가 호출되는 코드를 수정합니다.다음 상위 레벨 예제에서는 Oracle 자동 생성 키 로직의 기능을 대체하는 방법을 보여줍니다. Oracle 자동 생성 순서 번호를 사용하는 각 CMP Bean마다 같은 종류의 코드를 써야 합니다. 유틸리티 도움말 클래스를 작성하여 각 Bean의 순서 번호를 생성하는 공통 로직을 결합할 수 있습니다.
ejbCreate 및 ejbPostCreate 메소드에 순서 번호의 매개변수를 추가합니다.수행 전:
|
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); ... } |
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; |
|
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"); } |
create() 메소드가 호출되는 코드를 수정합니다.| Card card = cardHome.create(nextKey, cardNumber, lastName, firstName, newDate); |