Hi Chris,

Christopher Lowe wrote:
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);

It's recommended to use the service class IdentityFactory to build the Identity and lookup persistent objects.
http://db.apache.org/ojb/docu/tutorials/pb-tutorial.html#Find+object+by+primary+key


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?

this sounds like OJB-63
https://issues.apache.org/jira/browse/OJB-63

and was fixed for OJB 1.0.4. Do you use the latest version of OJB?

regards,
Armin


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

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

Reply via email to