Dear All,
 
I have a simple inheritance relationship between a Special and
ActivitySpecial. I'm using proxies throughout my project with the cglib
proxy factory and indirection handler (I'm also using the broker API). I'm
performing a simple query to find an activity special as follows:
 
Special special = (Special) broker.getObjectByIdentity(new Identity(new
Special(24), broker));
log.debug("Special: " + special);
 
Now here is the catch. When I set
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.LogLevel=DEBUG
in the OJB-logging.properties file everything works fine. The correct object
is materialized and when the debug statement is printed out the correct
class ActivitySpecial is present. However when I set
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.LogLevel=WARN
the object that is materialized is Special. This is really weird behavior.
Does anyone have an idea why this would occur? I've included the mappings
for the classes mentioned above as well as the entries I have for my
database repository. 
 
Mappings:
 
<class-descriptor class="com.dm.beans.Special" table="special">
    <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" nullable="false" autoincrement="true"/>
    <field-descriptor name="supplierId" column="SUPPLIER_ID"
jdbc-type="INTEGER" />    
    <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR" />
    <field-descriptor name="ackOptLock" column="ACK_OPT_LOCK"
jdbc-type="BIGINT" locking="true"/>
    <reference-descriptor 
        name="supplier" 
        class-ref="com.dm.beans.suppliers.Supplier" 
        proxy="true" 
        auto-update="link" 
        auto-delete="none"
    >
        <foreignkey field-ref="supplierId"/>
    </reference-descriptor>        
    <collection-descriptor
         name="products"
 
collection-class="org.apache.ojb.broker.util.collections.RemovalAwareList"
         element-class-ref="com.dm.beans.Product"
         auto-update="link"
         auto-delete="link"
         proxy="true"
         indirection-table="product_special"
    >
         <fk-pointing-to-this-class column="SPECIAL_ID"/>
         <fk-pointing-to-element-class column="PRODUCT_ID"/>
    </collection-descriptor>    
</class-descriptor>
 
<class-descriptor class="com.dm.beans.activity.ActivitySpecial"
table="activity_special">
    <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" nullable="false"/>
    <field-descriptor name="minPersons" column="MIN_PERSONS"
jdbc-type="INTEGER" />
    <field-descriptor name="maxPersons" column="MAX_PERSONS"
jdbc-type="INTEGER" />
    <field-descriptor name="discount" column="DISCOUNT" jdbc-type="VARCHAR"
/>
    <reference-descriptor 
        name="super"
        class-ref="com.dm.beans.Special"
    >
        <foreignkey field-ref="id"/>
    </reference-descriptor>
</class-descriptor>
 
Database Repository Settings:
 
        <jdbc-connection-descriptor 
             jcd-alias="dataSource" 
             default-connection="true" 
             platform="MySQL" 
             jdbc-level="3.0" 
             useAutoCommit="1"
             eager-release="false"
             batch-mode="false"
             jndi-datasource-name="java:comp/env/jdbc/DestinationDB"
             ignoreAutoCommitExceptions="false">
        
        <!-- alternative cache implementations, see docs section "Caching"
-->
        <object-cache
class="org.apache.ojb.broker.cache.ObjectCacheTwoLevelImpl">
            <!-- meaning of attributes, please see docs section "Caching"
-->
            <!-- common attributes -->
            <attribute attribute-name="cacheExcludes" attribute-value=""/>
 
            <!-- ObjectCacheTwoLevelImpl attributes -->
            <attribute attribute-name="applicationCache"
attribute-value="org.apache.ojb.broker.cache.ObjectCacheOSCacheImpl"/>
            <attribute attribute-name="copyStrategy"
attribute-value="org.apache.ojb.broker.cache.ObjectCacheTwoLevelImpl$CopyStr
ategyImpl"/>
            <attribute attribute-name="forceProxies"
attribute-value="false"/>
            
            <!-- ObjectCacheDefaultImpl attributes -->
            <attribute attribute-name="timeout" attribute-value="900"/>
            <attribute attribute-name="autoSync" attribute-value="true"/>
            <attribute attribute-name="cachingKeyType" attribute-value="0"/>
            <attribute attribute-name="useSoftReferences"
attribute-value="true"/>
        </object-cache>
 
        <!-- For more info, see section "Connection Handling" in docs -->
        <connection-pool
            maxActive="30"
            validationQuery="select 1 from supplier_type;"
            testOnBorrow="true"
            testOnReturn="false"
            whenExhaustedAction="0"
            maxWait="10000">
 
            <!-- Set fetchSize to 0 to use driver's default. -->
            <attribute attribute-name="fetchSize" attribute-value="0"/>
 
            <!-- Attributes with name prefix "jdbc." are passed directly to
the JDBC driver. -->
            <!-- Example setting (used by Oracle driver when Statement
batching is enabled) -->
            <attribute attribute-name="jdbc.defaultBatchValue"
attribute-value="5"/>
 
            <!-- Attributes determining if ConnectionFactoryDBCPImpl
                 should also pool PreparedStatement. This is
programmatically disabled
                 when using platform=Oracle9i since Oracle statement caching
will conflict
                 with DBCP ObjectPool-based PreparepdStatement caching (ie
setting true
                 here has no effect for Oracle9i platform). -->
            <attribute attribute-name="dbcp.poolPreparedStatements"
attribute-value="false"/>
            <attribute attribute-name="dbcp.maxOpenPreparedStatements"
attribute-value="10"/>
            <!-- Attribute determining if the Commons DBCP connection
wrapper will allow
                 access to the underlying concrete Connection instance from
the JDBC-driver
                 (normally this is not allowed, like in J2EE-containers
using wrappers). -->
            <attribute
attribute-name="dbcp.accessToUnderlyingConnectionAllowed"
attribute-value="false"/>
        </connection-pool>
 
        <!-- alternative sequence manager implementations, see "Sequence
Manager" guide -->
        <sequence-manager
className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
            <!-- attributes supported by SequenceManagerHighLowImpl,
            SequenceManagerInMemoryImpl, SequenceManagerNextValImpl
            please see "Sequence Manager" guide or/and javadoc of class for
more information -->
            <attribute attribute-name="seq.start" attribute-value="1"/>
            <attribute attribute-name="autoNaming" attribute-value="true"/>
 
            <!-- attributes supported by SequenceManagerHighLowImpl
            please see "Sequence Manager" guide or/and javadoc of classes
for more information -->
            <attribute attribute-name="grabSize" attribute-value="1"/>
 
            <!-- optional attributes supported by SequenceManagerNextValImpl
(support depends
            on the used database), please see "Sequence Manager" guide
or/and javadoc of
            classes for more information -->
            <!-- attribute attribute-name="seq.as"
attribute-value="INTEGER"/ -->
            <!-- attribute attribute-name="seq.incrementBy"
attribute-value="1"/ -->
            <!-- attribute attribute-name="seq.maxValue"
attribute-value="999999999999999999999999999"/ -->
            <!-- attribute attribute-name="seq.minValue"
attribute-value="1"/ -->
            <!-- attribute attribute-name="seq.cycle"
attribute-value="false"/ -->
            <!-- attribute attribute-name="seq.cache" attribute-value="20"/
-->
            <!-- attribute attribute-name="seq.order"
attribute-value="false"/ -->
 
        </sequence-manager>
 
Regards,
Chris
 

Reply via email to