Hi,
ok, now we have a more detailed error message:
[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]
]
Seems that OJB try to set the field in a correct way. You declare
CContactMech as dynamic proxy and OJB try to set such an instance in
CPartyContactMech.
Think the field you declare in CPartyContactMech have to be an
Interface if you want to use a normal dynamic proxy in this case
<reference-descriptor
name="contactMech"
class-ref="net.enterprise.common.model.contact.CContactMechIF"
auto-retreive="true"
auto-update="true"
>
<foreignkey field-ref="contactMechId"/>
</reference-descriptor>
Why did you declare CContactMech class objects as proxy? Wouldn't it
be better to use a proxy-reference for the 1:1 relation between
CPartyContactMech and CContactMech?
<reference-descriptor
name="contactMech"
class-ref="net.enterprise.common.model.contact.CContactMech"
auto-retreive="true"
auto-update="true"
proxy="true"
>
<foreignkey field-ref="contactMechId"/>
</reference-descriptor>
regards,
Armin
Chris Worley wrote:
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]