Hi Graham,
----- Original Message -----
From: "Graham Lounder" <[EMAIL PROTECTED]>
To: "OJB Users List" <[EMAIL PROTECTED]>
Sent: Friday, November 22, 2002 3:17 PM
Subject: Modifying ClassDescriptor
> I'm fairly new to This API and I have some questions regarding the
> ClassDescriptor.
>
> I'll first describe what I'm trying to achive ( if it's even possible
to do
> this)
>
> I've setup my repository_user.xml file to do cascade_delete = true for
most
> objects, but sometimes the user of the application may not want to
cascade
> delete. I added a boolean variable to my methods to check if the user
wants
> to cascade delete or not. If the user doesn't want to cascade delete,
I was
> pulling out the ClassDescriptor object from the instance of the broker
and
> modifying the ObjectReferenceDescriptors and the CollectionDescriptors
to
> cascade-delete=false. Now once my operation is complete, I noticed
that the
> broker kept the modifications. I tried to get a copy of the original
> ClassDescriptor to reset it on the broker before closing it but failed
this
> attempt.
>
> I'm not really sure at this point how the ClassDescriptor information
is
> stored in memory.
A few days ago, Thomas and I discuss (offline) the theme
"runtime repository changes" with the result that we have to do
a re-organistation of the repository stuff. We want to make it possible
to select between a 'perThread' and a 'global' modification of the
DescriptorRepository/ClassDescriptor/...
Any comments are welcome.
Currently each PBKey has a associated DescriptorRepository. All PB
with the same PBKey share the same DescriptorRepository. Thus if you
modify a ClassDescriptor, the changes take effect over all PB instances
with
the same PBKey, no good when run in multi-threaded environment.
A quick and dirty solution of your problem could be:
Add public method
DescriptorRepository#readFromRepository(PBKey pbKey)
This method returns a copy of the repository.
Extent PersistenceBrokerImpl and add method
setRepository(DescriptorRepository repository)
{
this.descriptorRepository = repository;
}
Now you are able to change the repository of a single PB instance.
Get a copy, set the copy, modify the copy, do your work,
restore the old repository reference (for better performance: undo
modification on copy, keep copy in memory).
HTH
I could add a public
DescriptorRepository#readFromRepository(PBKey pbKey)
method to CVS if you think this could be useful for you.
regards,
Armin
> I also tried for fun to create another instance of the
> broker inside this method and pull the ClassDescriptor as well to see
if it
> would be modified when I modified the other one and in deed it is
being
> modified. This seems to tell me that all the brokers shared the safe
> reference to the ClassDescription object representing the mapping of
the xml
> file.
>
> I was able to reload the file and get the original version and set it
on the
> broker once I finished my operation. But wouldn't this also modify
any
> other broker in progress and hence not give the user the results he is
> looking for in the end.
>
> I would really appreciate any help or information concerning this
issue.
>
> Thanks
>
> ============================================
> Graham Lounder
> Java Developer
> Spatial Components Division
> CARIS
> 264 Rookwood Ave
> Fredericton NB E3B-2M2
> Office 506 462-4263
> Fax 506 459-3849
> [EMAIL PROTECTED]
> http://www.spatialcomponents.com
> ============================================
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>