public void YYYtestBrokerCrash()
{
// get facade instance
Implementation odmg = OJB.getInstance();
Database db = odmg.newDatabase();
PersistenceBroker broker = null;
ClassDescriptor cld = null;
String tablename = null;
//open database
try
{
db.open(databaseName, Database.OPEN_READ_WRITE);
}
catch (ODMGException ex)
{
fail("ODMGException: " + ex.getMessage());
}
try
{
Transaction tx = odmg.newTransaction();
tx.begin();
// retrieve an Article
OQLQuery query = odmg.newOQLQuery();
query.create("select anArticle from " + Article.class.getName() + " where articleId = $678");
query.bind(new Integer(30));
List results = (List) query.execute();
Article a = (Article) results.get(0);
// manipulate metadata
broker = ((TransactionImpl) tx).getBroker();
cld = broker.getClassDescriptor(Article.class);
tablename = cld.getFullTableName();
cld.setTableName("ELVIS");
broker.getDescriptorRepository().setClassDescriptor(cld);
//broker will crash as metadata is corrupt
a.addToStock(5);
tx.commit();
fail("Can commit tx with corrupt metadata");
}
catch (Throwable t)
{
//ignore
}
finally
{
cld.setTableName(tablename);
broker.getDescriptorRepository().setClassDescriptor(cld);
}
}