Hi,

I am trying to find some information regarding metadata merging in the 
following scenario:

We have a base application with some classes, db tables and a 
repository_user.xml that describes the mapping.
Lets say we have a base class BasePersistentClassA and some classes that are 
based which are included as extent classes in the xml file.
This application is running.

No we develop an optional plugin with a class PluginPersistentClassB that is 
based on BasePersistentClassA of the application.
I can now write an additional repository.xml and merge it with:

    MetadataManager mm = MetadataManager.getInstance();
    DescriptorRepository dr = 
mm.readDescriptorRepository("my/additional/plugin_repository.xml");
    mm.mergeDescriptorRepository(dr);

However I am failing to get the correct contents regarding the extent-class 
definitions of the base class. 
I tried to include the following to plugin_repository.xml:

<class-descriptor
    class="BasePersistentClassA "
>
    <extent-class class-ref="PluginPersistentClassB"/>
</class-descriptor>

<class-descriptor
    class="PluginPersistentClassB "
    table="MyTable"
>
...
</class-descriptor>

Something is strange, as the following code fragment does not delete anything 
at the first broker.deleteByQuery() and fails at the second one:

    Criteria crit = new Criteria();
    
crit.addNotEqualTo("ojbConcreteClass",BaseApplicationClassX.class.getName());
    Query q = QueryFactory.newQuery(Transaction.class,crit);
    broker.deleteByQuery(q);

    // SELECT DISTINCT ACC_TAID FROM ACC_TA
    ReportQueryByCriteria subquery = new 
ReportQueryByCriteria(BasePersistentClassA .class,null);
    subquery.setAttributes(new String[] { "id" });
    subquery.setDistinct(true);
    
    Criteria crit = new Criteria();
    crit.addNotIn("externalID",subquery);
    Query q = QueryFactory.newQuery(Another.class,crit);
    broker.deleteByQuery(q);

It seems that the extent definitions from dr are not merged and even corrupt 
the existing definitions of the application, as trying to access all classes 
from the database results in an NullPointerException:

2007.07.26 17:40:33,375 [0/ServiceRequestDispatcher-P=3/T=7-running:1/1/1] INFO 
 cleardb: start
java.lang.NullPointerException
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashCode(Unknown
 Source)
        at java.util.HashMap.hash(Unknown Source)
        at java.util.HashMap.put(Unknown Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(Unknown Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getSubQuerySQL(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria(Unknown
 Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClause(Unknown
 Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlDeleteByQuery.buildStatement(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getStatement(Unknown 
Source)
        at 
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeDelete(Unknown Source)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.deleteByQuery(Unknown Source)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.deleteByQuery(Unknown Source)
        at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.deleteByQuery(Unknown 
Source)
        at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.deleteByQuery(Unknown 
Source)
[...]

If I include the table="" part, I get the NullPointerException at:

so it seems that the existing class definition is not merged with the 
additional data but overwritten.

Ommiting the extent-class-definitions from the additional xml file, I can 
access all classes of the base application, but not of the plugin. As we have 
several plugins, we dont want any dependencies from the base application to the 
plugins.

Any hints are appreciated.

Best regards

Bernd


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to