Armin,
My ojb version is 1.0.3.
-chris worley
Armin,
Here is the complete output at the time the service is invoked. For
this I have set all proxies back to dynamic in the class descriptors.
If I comment out the reference to the contactMech the party reference
gets populated just fine. I am not sure what the deail is with the
ContactMech.
[org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl] DEBUG:
createPool was called
[org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl] DEBUG:
makeObject called
[org.apache.ojb.broker.accesslayer.StatementManager] DEBUG:
closeResources was called
[org.apache.ojb.broker.core.QueryReferenceBroker] DEBUG:
getCollectionByQuery (class
org.apache.ojb.broker.util.collections.RemovalAwareCollection, class
net.enterprise.common.model.party.CPartyRole, QueryByCriteria from
class net.enterprise.common.model.party.CPartyRole where [partyId =
181])
[org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias]
DEBUG: TableAlias(): using hints ? false
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG:
Materialisation of object is finished, push 1objects to cache
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Push to
cache: net.enterprise.common.model.party.CParty{181}
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
[org.apache.ojb.broker.accesslayer.StatementManager] DEBUG:
closeResources was called
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG:
Materialisation of object is finished, push 1objects to cache
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Push to
cache: net.enterprise.common.model.party.CPartyGroup{181}
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
[org.apache.ojb.broker.core.QueryReferenceBroker] DEBUG:
getCollectionByQuery (class
org.apache.ojb.broker.util.collections.RemovalAwareCollection, class
net.enterprise.common.model.party.CPartyContactMech, QueryByCriteria
from class net.enterprise.common.model.party.CPartyContactMech where
[partyId = 181, [partyId = 181]])
[org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias]
DEBUG: TableAlias(): using hints ? false
[org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl] INFO:
Create new PB instance for PBKey org.apache.ojb.broker.PBKey:
jcdAlias=enterprise, user=enterprise, password=*****, already created
persistence broker instances: 1
[org.apache.ojb.broker.cache.ObjectCacheFactory] INFO: Start creating
new ObjectCache instance
[org.apache.ojb.broker.cache.ObjectCacheFactory] INFO: Instantiate new
org.apache.ojb.broker.cache.CacheDistributor for PB instance
[EMAIL PROTECTED]
[org.apache.ojb.broker.cache.ObjectCacheFactory] INFO: New ObjectCache
instance was created
[org.apache.ojb.broker.util.sequence.SequenceManagerFactory] DEBUG:
create new sequence manager for broker
[EMAIL PROTECTED]
[org.apache.ojb.broker.util.sequence.SequenceManagerFactory] DEBUG:
Jdbc-Connection-Descriptor 'enterprise' use sequence manager: class
org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl
[org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl] DEBUG:
makeObject called
[org.apache.ojb.broker.accesslayer.StatementManager] DEBUG:
closeResources was called
[org.apache.ojb.broker.accesslayer.StatementManager] DEBUG:
closeResources was called
[PersistentField] ERROR: while set field:
[try to set 'object value' in 'target object'
target obj class: net.enterprise.common.model.party.CPartyContactMech
target field name: contactMech
target field type: class net.enterprise.common.model.contact.CContactMech
target field declared in:
net.enterprise.common.model.party.CPartyContactMech
object value class: $Proxy0
object value: [EMAIL PROTECTED]
]
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
[org.apache.ojb.broker.cache.MaterializationCache] DEBUG: Clear
materialization cache
org.apache.ojb.broker.PersistenceBrokerException: Error invoking
method afterLookup
at
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.invoke(Unknown
Source)
at $Proxy0.afterLookup(Unknown Source)
at
org.apache.ojb.broker.core.PersistenceBrokerAbstractImpl.performCallBack(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerAbstractImpl.fireBrokerEvent(Unknown
Source)
at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
Source)
at
net.enterprise.server.service.contact.CFindPartyContactMechByPartyIdService.doExecute(CFindPartyContactMechByPartyIdService.java:43)
at net.enterprise.common.service.CService.execute(CService.java:45)
at
net.enterprise.common.service.CServiceExecutor.execute(CServiceExecutor.java:66)
at
net.enterprise.common.service.CLocalDispatcher.execute(CLocalDispatcher.java:41)
at
net.enterprise.server.service.contact.CFindContactService.doExecute(CFindContactService.java:48)
at net.enterprise.common.service.CService.execute(CService.java:45)
at
net.enterprise.common.service.CServiceExecutor.execute(CServiceExecutor.java:66)
at
net.enterprise.server.service.CServiceProcess.run(CServiceProcess.java:53)
Caused by: org.apache.ojb.broker.PersistenceBrokerException:
org.apache.ojb.broker.metadata.MetadataException: IllegalAccess error
setting field:contactMech in
object:net.enterprise.common.model.party.CPartyContactMech
at
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.materializeSubject(Unknown
Source)
at
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.getRealSubject(Unknown
Source)
... 19 more
Caused by: org.apache.ojb.broker.metadata.MetadataException:
IllegalAccess error setting field:contactMech in
object:net.enterprise.common.model.party.CPartyContactMech
at
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessImplNew.setValueFor(Unknown
Source)
at
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessImplNew.set(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReference(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReferences(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getDBObject(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.doGetObjectByIdentity(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByIdentity(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByIdentity(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByIdentity(Unknown
Source)
... 21 more
Caused by: java.lang.IllegalArgumentException
at
sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
at java.lang.reflect.Field.set(Field.java:519)
... 30 more
Hi Chris,
which version of OJB do you use? Normally OJB will generate a more
detailed error log when field setting fails.
Caused by: org.apache.ojb.broker.metadata.MetadataException:
IllegalAccess error setting field:contactMech in
object:net.enterprise.common.model.party.CPartyContactMech
Did you post the whole stack trace with complete error log?
regards,
Armin
Chris Worley wrote:
I have now removed proxy="dynamic" from all my class descriptors and
I no longer get the exception.
After doing some testing. I am finding that sometimes I get the
exception, sometimes it works and sometimes the contactMech is
populated with an instance of CPhoneNumber (which is what i want)
and sometimes it just populates with CContactMech. CPhoneNumber
extends CContactMech. I have modified the code on the server to
use class hints.
The only pattern I am finding is that I can retreive the
PartyContactMech without an exception if the obejct was created
during the life of the server process. If i start the server and
retreive one that was not created during the life of the process
then I get the exception. Sounds like it works fine when the
objects are cached, but thats just an assumption.
I also stopped using a the dynamic proxy for PartyContactMech.
-chris worley
I have a similar error when using. I am able to set fields with
other objects when retreiving them from the db. This particular
class is giving me some problems.
PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldIntrospectorImplNew
org.apache.ojb.broker.PersistenceBrokerException: Error invoking
method afterLookup
at
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.invoke(Unknown
Source)
at $Proxy0.afterLookup(Unknown Source)
at
org.apache.ojb.broker.core.PersistenceBrokerAbstractImpl.performCallBack(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerAbstractImpl.fireBrokerEvent(Unknown
Source)
at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(Unknown
Source)
at
net.enterprise.server.service.contact.CFindPartyContactMechByPartyIdService.doExecute(CFindPartyContactMechByPartyIdService.java:31)
at
net.enterprise.common.service.CService.execute(CService.java:45)
at
net.enterprise.common.service.CServiceExecutor.execute(CServiceExecutor.java:66)
at
net.enterprise.common.service.CLocalDispatcher.execute(CLocalDispatcher.java:41)
at
net.enterprise.server.service.contact.CFindContactService.doExecute(CFindContactService.java:48)
at
net.enterprise.common.service.CService.execute(CService.java:45)
at
net.enterprise.common.service.CServiceExecutor.execute(CServiceExecutor.java:66)
at
net.enterprise.server.service.CServiceProcess.run(CServiceProcess.java:53)
Caused by: org.apache.ojb.broker.PersistenceBrokerException:
org.apache.ojb.broker.metadata.MetadataException: Error invoking
method:setContactMech in
object:net.enterprise.common.model.party.CPartyContactMech
at
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.materializeSubject(Unknown
Source)
at
org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl.getRealSubject(Unknown
Source)
... 19 more
Caused by: org.apache.ojb.broker.metadata.MetadataException: Error
invoking method:setContactMech in
object:net.enterprise.common.model.party.CPartyContactMech
at
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldIntrospectorImplNew.setValueFor(Unknown
Source)
at
org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldIntrospectorImplNew.set(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReference(Unknown
Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveReferences(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getDBObject(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.doGetObjectByIdentity(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByIdentity(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByIdentity(Unknown
Source)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByIdentity(Unknown
Source)
... 21 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
... 30 more
I get and IllegalAccess exception when ojb tries to populate a
reference to another object. I have no problems storing the
object. The exception is attached and below is my code and mapping.
----- Code --------
Integer partyId = (Integer) getParameter("partyId");
Criteria crit = new Criteria();
crit.addEqualTo("partyId", partyId);
Query query = QueryFactory.newQuery(CPartyContactMech.class, crit);
setParameter("partyContactMechs",
getBroker().getCollectionByQuery(query));
---- Exception ---------
Caused by: org.apache.ojb.broker.PersistenceBrokerException:
org.apache.ojb.broker.metadata.MetadataException: IllegalAccess
error setting field:contactMech in
object:net.enterprise.common.model.party.CPartyContactMech
---- Mapping ------
<!-- Contact Mech -->
<class-descriptor
class="net.enterprise.common.model.contact.CContactMech"
proxy="dynamic"
table="contact_mech"
>
<field-descriptor
name="contactMechId"
column="contact_mech_id"
jdbc-type="integer"
primarykey="true"
autoincrement="true"
/>
<field-descriptor
name="contactMechTypeId"
column="contact_mech_type_id"
jdbc-type="varchar"
/>
</class-descriptor>
<!-- Party Contact Mech -->
<class-descriptor
class="net.enterprise.common.model.party.CPartyContactMech"
proxy="dynamic"
table="party_contact_mech"
>
<field-descriptor
name="partyContactMechId"
column="party_contact_mech_id"
jdbc-type="integer"
primarykey="true"
autoincrement="true"
/>
<field-descriptor
name="partyId"
column="party_id"
jdbc-type="integer"
/>
<field-descriptor
name="contactMechId"
column="contact_mech_id"
jdbc-type="integer"
/>
<field-descriptor
name="fromDate"
column="from_date"
jdbc-type="timestamp"
/>
<field-descriptor
name="thruDate"
column="thru_date"
jdbc-type="timestamp"
/>
<field-descriptor
name="contactMechPurposeId"
column="contact_mech_purpose_id"
jdbc-type="integer"
/>
<reference-descriptor
name="contactMech"
class-ref="net.enterprise.common.model.contact.CContactMech"
auto-retreive="true"
auto-update="true"
>
<foreignkey field-ref="contactMechId"/>
</reference-descriptor>
<reference-descriptor
name="party"
class-ref="net.enterprise.common.model.party.CParty"
auto-retreive="true"
auto-update="true"
>
<foreignkey field-ref="partyId"/>
</reference-descriptor>
</class-descriptor>
thanks
-chris worley
------------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]