Automatikusan előállított Oracle kulcsok felismerése

A tároló által felügyelt perzisztens komponensek WebLogic telepítésleírója lehetővé teszi az alkalmazások számára, hogy automatikus adatbázis-szekvencia (kulcs) előállítási szolgáltatást használjanak. Ezen szolgáltatás használata esetén a WebLogic alkalmazásnak nem kell a következő szekvenciakulcsot előállító kódot hozzáadnia az alkalmazáshoz, amikor CMP EJB objektumokat hoz létre. Amikor automatikus szekvencia előállítást tartalmazó WebLogic alkalmazásokat állít át, hozzá kell adni az új bejegyzések szekvenciaazonosítóját előállító kódot.

A weblogic-cmp-rdbms-jar.xml fájl tartalmazza a WebLogic RDBMS alapú perzisztenciát használó entitás EJB komponensek adatait. Ez a szabály a WebLogic automatic-key-generation elemek konfigurációját keresi és átállítási információkat ad az Oracle előállító-típus számára. A példában olyan elem látható, amelyet a szabály meg fog jelölni:

Weblogic-rdbms-bean>
<ejb-name>Kártya</ejb-name>
<data-source-name>MyDataForrás</data-source-name>
<table-name>MY_TABLE</table-name>
...
< átívelő osztály= "indent2"> < /span> < automatikus kulcs-által>
<generator-type>Oracle</generator-type>
<generator-name>sorozó_azonosító</generator-name>
<key-cache-size>10</key-cache-size>
</automatic-key-generation>
...
</weblogic-rdbms-bean>

A generator-name bejegyzés a következő szekvencia előállításához használandó nevet jelzi az Oracle DUAL táblából. Ha például adott a sequence_id elemhez tartozó generator_name, akkor a következő SQL utasítás segítségével lehet a következő sorszámot lekérdezni.

select sequence_id.NEXTVAL from dual;

Ha a szabály megjelöl bejegyzéseket a weblogic-cmp-rdbms-jar.xml telepítésleíróban, akkor az EJB kódot saját kezűleg módosítva kell a kulcsokat létrehoznia. Ezeket a lépéseket a WebSphere Application Server EJB csonkjainak újra-előállítása előtt kell elvégezni. A következő példák egy lehetséges átállítási útvonalat körvonalaznak.

Az alábbi példák azt mutatják be, hogyan lehet az Oracle automatikus kulcs előállítási funkcionalitását lecserélni. Hasonló kódot kell írnia minden olyan CMP komponenshez, amely Oracle automatikusan előállított sorszámokat használ. Segédprogram súgóosztályok létrehozásával kombinálhatja az egyes komponensek sorszámait előállító funkciókat.

Adja hozzá a sorszám paraméterét az egyedkomponens ejbCreate és ejbPostCreate metódusaihoz.

Előtte:

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

Utána:

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

Állítsa be a sorszámot az EJB megfelelő mezőjében az ejbCreate metódusban.

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

Adja hozzá a sorszám paraméterét az EJB alapkönyvtár create metódusához.

Előtte:

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

Utána:

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

Adja hozzá a CMP egyedkomponens következő sorszámának lekérdezésére szolgáló funkciót.

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

Módosítsa a kódot, ahol az EJB alapkönyvtár create() metódusa meghívásra kerül a következő sorszám átadásához.

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