Zjistit automaticky generované klíče Oracle

Deskriptory implementace serveru WebLogic pro objekty typu persistent bean spravované kontejnerem umožňují aplikacím používat funkci pro automatické generování databázových posloupností (klíčů). Při použití této funkce nemusí aplikace WebLogic obsahovat kód pro generování dalšího klíče posloupnosti při vytváření objektů CMP EJB. Při migraci aplikací WebLogic, které zahrnují automatické generování posloupností, musí být přidán kód aplikace pro generování identifikátoru posloupnosti pro nové položky.

Soubor weblogic-cmp-rdbms-jar.xml obsahuje informace pro objekty EJB entity, které používají perzistenci založenou na WebLogic RDBMS. Toto pravidlo prochází konfigurací prvků automatic-key-key-generation serveru WebLogic a poskytuje informace o migraci pro typ generátoru Oracle. Tento příklad zobrazuje prvek, který bude označen tímto pravidlem:

< weblogic-rdbms-bean>
<ejb-name>Karta</ejb-name>
<data-source-name>MyDataZdroj</data-source-name>
<table-name>MY_TABLE</table-name>
...
< span class= "indent2"> < /span> < generování automatického klíče >
<generator-type>Oracle</generator-type>
<generator-name>ID_posloupnosti</generator-name>
<key-cache-size>10</key-cache-size>
</automatic-key-generation>
...
</weblogic-rdbms-bean>

Položka generator-name označuje název z tabulky Oracle DUAL, který má být použit pro generování další posloupnosti. K získání dalšího pořadového čísla může být například použit generator_name sequence_id, následující příkaz SQL.

select sequence_id.NEXTVAL from dual;

Pokud toto pravidlo označí položky ve vašem deskriptoru implementace weblogic-cmp-rdbms-jar.xml, budete muset provést ruční úpravu kódu EJB k vytvoření klíčů. Tento postup je třeba provést před opětovným generováním stubů EJB pro server WebSphere Application Server. Následující příklady ukazují potenciální cestu migrace.

Následující příklady vysoké úrovně ukazují, jak nahradit funkčnost automaticky generované logiky klíče Oracle. Podobný kód budete muset napsat pro každý objekt typu CMP bean, který používá automaticky generovaná pořadová čísla Oracle. Můžete vytvořit třídy nápovědy obslužného programu, abyste zkombinovali obecnou logiku, která generuje pořadová čísla pro každý objekt typu bean.

Přidejte parametr pro pořadové číslo do metod ejbCreate a ejbPostCreate objektu typu entity bean.

Před:

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

Po:

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

Nastavte pořadové číslo v odpovídajícím poli sady EJB v metodě ejbCreate.

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

Přidejte parametr pro pořadové číslo do metody create domovského místa EJB.

Před:

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

Po:

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

Přidejte logiku pro získání dalšího pořadového čísla pro objekt CMP entity 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");
}

Upravte kód, ve kterém je volána metoda domovského místa EJB create(), aby bylo předáno další pořadové číslo.

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