Detectaţi cheile Oracle generate automat

Descriptorii de implementare WebLogic pentru bean-urile CMP (container managed persistent) permit aplicaţiilor să folosească o caracteristică pentru generarea automată a secvenţei de bază de date (chei). Atunci când se utilizează această caracteristică, o aplicaţie WebLogic nu trebuie să includă codul pentru a genera următoarea cheie de secvenţă când se creează obiecte EJM CMP. Când se migrează aplicaţiile WebLogic care includ generarea automată a secvenţei, trebuie adăugat un cod aplicaţiei pentru a genera identificatorul de secvenţă pentru intrările noi.

Fişierul weblogic-cmp-rdbms-jar.xml conţine informaţii pentru EJB-urile (bean-urile Java enterprise) de entitate care utilizează pestistenţa WebLogic bazată pe RDBMS. Această regulă scanează pentru elementele de configuraţie WebLogic automatic-key-generation şi furnizează informaţii de migrare pentru tipul de generare Oracle. Acest exemplu arată un element care va fi semnalat de această regulă:

< weblogic-rdbms-bean>
<ejb-name>Card</ejb-name>
<data-source-name>MyDataSource</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>

Intrarea generator-name indică numele pentru tabelul Oracle DUAL de folosit pentru generarea secvenţei următoare. De exemplu, fiind dat un generator_name de sequence_id, următoarea instrucţiune SQL poate fi folosită pentru a obţine următorul număr de secvenţă.

select sequence_id.NEXTVAL from dual;

Dacă această regula semnalează intrări în descriptorul de implementare weblogic-cmp-rdbms-jar.xml, va trebui să faceţi nişte paşi pentru a modifica manual codul EJB pentru crearea cheilor. Aceşti paşi trebuie făcuţi înainte de regenerarea stub-urilor EJB pentru WebSphere Application Server. Următoarele exemple conturează o cale de migrare potenţială.

Următoarele exemple arată de nivel înalt arată cum să înlocuiţi funcţionalitatea logicii cheii Oracle generate automat. va trebui să scrieţi un cod similar pentru fiecare bean CMP care utilizează numerele de secvenţă Oracle generate automat. Puteţi crea clase de ajutor pentru utilitar pentru a combina logica comună care generează numerele de secvenţă pentru fiecare bean.

Adăugaţi un parametru pentru numărul de secvenţă la metodele ejbCreate şi ejbPostCreate ale bean-ului de entitate.

Înainte:

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
...

După:

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
...

Setaţi numărul de secvenţă în câmpul corect din EJB în metoda ejbCreate.

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

Adăugaţi un parametru pentru numărul de secvenţă la metoda create din EJB Home.

Înainte:

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

După:

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

Adăugaţi logica pentru a obţine următorul număr de secvenţă pentru bean-ul de entitate CMP.

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");
}

Modificaţi codul unde este apelată metoda create() EJB home pentru a transmite următorul număr de secvenţă.

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