Hi Dirk,

> reference stuff automagically and it worked. If retrieveAllReferences for
> objects across multiple databases should work I would be glad to see a
> little example as I struggled with this. Currently I retrieve all

retrieveAllReferences and retrieveReference should work.

I checked in a test showing how this works. Take a look in ...broker.MultipleDBTest#testMaterializeFromDifferentDB() in test suite (get latest from CVS HEAD).

regards,
Armin

Dirk Manske (Service Respond) wrote:
Hi,


hmm, indeed in theory this should work for read, but I never test it.
Do I understand you:
- Get object from DB1 using broker_1
- Get broker_2 (using PBKey for DB2) and do

broker2.retrieveReference(object, "attributeName")



This cause an exception?


No exception. There are just no objects referenced. I try for db1
broker1.getObjectPerson. ObjectPerson is materialized. Then I do
broker2.retrieveAllReferences(ObjectPerson). broker2 (using PBKey) is
configured for a different database of course. Today we had to change the
database model. We have now two schemas, this is why I have to use to
brokers. Before the database model has been changed OJB handled the
reference stuff automagically and it worked. If retrieveAllReferences for
objects across multiple databases should work I would be glad to see a
little example as I struggled with this. Currently I retrieve all cross
db-references manually which is a nightmare...


Dirk



-----Urspr�ngliche Nachricht-----
Von: Armin Waibel [mailto:[EMAIL PROTECTED] Gesendet: Donnerstag, 19. Februar 2004 00:25
An: OJB Users List
Betreff: Re: AW: auto... not possible when using multiple databases?


Hi,

Dirk Manske (Service Respond) wrote:


Hi Armin,

I am using PB and do not need any distributed transactions. I asked this question because I experience some difficulties with 1:N references where one object is stored in db1 and the n objects are stored in db2. in this case auto-retrieve="true" of course fails.


right, this is the exception you have to disable the auto-XXX flags.


but even when I try to get the
object from db1 and do a broker.retrieveAllReferences(object) it is not working. But I guess this should work. In the mail-archives I found this message from Thomas:




hmm, indeed in theory this should work for read, but I never test it.
Do I understand you:
- Get object from DB1 using broker_1
- Get broker_2 (using PBKey for DB2) and do
broker2.retrieveReference(object, "attributeName")

This cause an exception?


>Can I store parts of an object in one DB and other parts in another? If so,



This can't be handled by OJB. Here you need an additional layer on top of
OJB and you need distributed transaction an store/delete.
The layer detect where to store the main object and all references. On read
the layer does things described above.

regards,
Armin


how do I
then build the complete object during lookup?


Say you have databases A and B. You also have two classes ClassA (mapped to A) and ClassB (mapped to B).


ClassA holds a reference to a ClassB object.


now follow these steps:
1. obtain two broker instances brokerA and brokerB working against the A and B database respectively.


2. call
ClassA a = (ClassA) brokerA.getObjectByQuery(...);


to load the instance a. To avoid automatic (and in this case wrong) retrieval of the ClassB reference the respective reference-descriptor must be set to auto-retrieve="false"


3. call
brokerB.retrieveAllReferences(a);
to use the brokerB to retrieve the ClassB reference explicitely.


cheers,
Thomas



I am not sure if I mix something up and understand you right, but you mentioned that this cannot be handled by OJB?


Dirk



-----Urspr�ngliche Nachricht-----
Von: Armin Waibel [mailto:[EMAIL PROTECTED]
Gesendet: Mittwoch, 18. Februar 2004 18:02
An: OJB Users List
Betreff: Re: auto... not possible when using multiple databases?

Hi Dirk,

Dirk Manske (Service Respond) wrote:


Hi,

for reference attributes you can declare auto-retrieve, auto-update and auto-delete to true in the respective descriptor. My question is:
Do I have to set these properties to false when using multiple databases and do all the work manually?




Why? These attributes has in effect nothing to do with multiple DB connections (except see below).

But there are some pitfalls:
- take care of ObjectCache when same classes used in different DB
- if you need distributed tx, you have to run OJB in a managed environment (JTA support)
- say class A has a collection of B's and A should be stored in DB A, all B's in DB B. OJB can't handle this for you internal (need of distributed tx). Handle this on a higher level (in managed environment).
In fact, then you have to disable the auto-XXX flags.


regards,
Armin



Dirk




--------------------------------------------------------------------- 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]



Reply via email to