I descrittori di distribuzione WebLogic per i bean CMP (container managed persistent) consentono alle applicazioni di utilizzare una funzione per la generazione di una sequenza database (chiave) automatica. Quando si utilizza questa funzione, un'applicazione WebLogic non deve includere il codice per la generazione della chiave della sequenza successiva durante la creazione di oggetti EJB CMP. Durante la migrazione di applicazioni WebLogic che includono la generazione della sequenza automatica, è necessario aggiungere il codice dell'applicazione per generare l'identificativo della sequenza per le nuove voci.
Il file weblogic-cmp-rdbms-jar.xml contiene informazioni per gli EJB di entità
che utilizzano la persistenza basata su RDBMS WebLogic.
Questa regola esegue la scansione della configurazione degli elementi WebLogic automatic-key-generation e fornisce
informazioni sulla migrazione per il tipo di generatore Oracle.
Questo esempio mostra un elemento che verrà contrassegnato da questa regola:
|
<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> |
La voce generator-name indica il nome nella tabella DUAL Oracle da utilizzare per generare la sequenza successiva.
Ad esempio, dato un generator_name sequence_id, è possibile utilizzare la seguente istruzione SQL
per ottenere il numero di sequenza successivo.
| select sequence_id.NEXTVAL from dual; |
Se questa regola contrassegna le voci nel descrittore di distribuzione weblogic-cmp-rdbms-jar.xml, è necessario eseguire alcune operazioni per modificare manualmente il codice EJB per creare le chiavi. È necessario eseguire tali operazioni prima della rigenerazione degli stub EJB per WebSphere Application Server. Gli esempi riportati di seguito indicano un potenziale percorso di migrazione.
ejbCreate e ejbPostCreate del bean di entità.ejbCreate e ejbPostCreate.create di Home EJB.create() di home EJB per passare il numero di sequenza successivo.I seguenti esempi di alto livello mostrano come sostituire la funzionalità della logica della chiave generata automaticamente di Oracle. Sarà necessario scrivere codice simile per ciascun bean CMP che utilizza numeri di sequenza generati automaticamente di Oracle. È possibile creare classi utility help per combinare la logica comune che genera i numeri di sequenza per ciascun bean.
ejbCreate e ejbPostCreate del bean di entità.Prima:
|
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 ... |
Dopo:
|
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.|
public Integer ejbCreate(Integer sequenceID, String cardNumber, String lastName, String firstName, java.sql.Date issueDate) throws CreateException { ... setCardID(sequenceID); ... } |
create di Home EJB.Prima:
|
public Card create(String cardNumber, String lastName, String firstName, java.sql.Date issueDate) throws CreateException; |
Dopo:
|
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() di home EJB per passare il numero di sequenza successivo.| Card card = cardHome.create(nextKey, cardNumber, lastName, firstName, newDate); |