JADE to JADE communication

The use of specific JADE features and proposals for new feature suggestions
ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:38 am

by Eric Peachey >> Sun, 2 Apr 2000 23:45:36 GMT

This must be on the cards (hopefully) and has been discussed elsewhere but I'm interested in what other have to say.

Say you have a JADE accounting system which could offer some kind of 'public' service for obtaining account balances and payment history. You also have a number of other separate JADE databases running different applications but which need to obtain account information from the accounting system. It would be nice if JADE let you do this without having to resort to implementing your own TCP/IP connection class. There must be industry standard protocols out there for communication between distributed objects. JADE is already able to talk to SQL databases via a pretty clean interface. It'd be interesting to know what plans exist for getting JADE to talk to JADE in an easy way.

Eric in Dunedin (cloudless sky, awesome harbour)

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:38 am

by Frank Pitt >> Mon, 3 Apr 2000 3:04:26 GMT
This must be on the cards (hopefully) and has been discussed elsewhere but I'm interested in what other have to say.

This is where it should be brought up, definitely.
Say you have a JADE accounting system which could offer some kind of 'public' service for obtaining account balances and payment history. You also have a number of other separate JADE databases running different applications but which need to obtain account information from the accounting system. It would be nice if JADE let you do this without having to resort to implementing your own TCP/IP connection class.

Yep.
There must be industry standard protocols out there for communication between distributed objects.

Yes, there are basically two. COM and CORBA

Jade currently has no built-in support for either, though support for CORBA is "on the wish list".

( I say "built-in support", because you _could_ use COM if you wanted to write all the plumbing youself, and import the DLL into JADE by hand, built-in support would automatically expose JADE objects as COM objects, without the developer having to muck around writing a seperate C++ DLL )

One possibility for at least partially standard communication, especially if your industry already has a standard XML mapping defined, is to write data into XML format, and then use XML-RPC (or SOAP as Microsoft are trying to call it) for transmission.

A combination of XML & XSSL allows you to _relatively_ easily translate between any data format. This is why XML/XSSL has taken off so much over the last couple of years.

Still a lot more plumbing than would be nice, but in a more reusable way that writing seperate TCPIP connections for each system you want to talk to.
JADE is already able to talk to SQL databases via a pretty clean interface. It'd be interesting to know what plans exist for getting JADE to talk to JADE in an easy way.

It would be nice if JADE let JADE systems talk to each other using objects at all, whether it was easy or not <grin>.

The curent major problem with JADE talking to JADE or serving JADE objects to anything else for that matter, is the fact that they don't use GUIDs (Globally Unique IDentifiers), only _system_ unique identifiers.

Until that's fixed, any communication is going to have to be overly complicated, basically allowing only the sharing of data values, not real objects.

This is the sort of basic functionality problem that really causes JADE to lose ground to existing standards-based solutions.

Fixing this problem would also make allowing multiple servers and implementing replication a heck of a lot easier.

Frankie

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:38 am

by Wanda >> Mon, 3 Apr 2000 12:31:08 GMT
There must be industry standard protocols out there for communication between distributed objects.

Yes, there are basically two. COM and CORBA

Jade currently has no built-in support for either, though support for CORBA is "on the wish list".

On the contrary, JADE currently does provide 'built-in' support for COM; furthermore, COM support has been extended in each major JADE release.

1) JADE 4 provided the ability to import of Active-X controls (an Active-X control is an implementation of a COM object)
2) JADE 5.0 provided the Active-X exposure facility that allows JADE objects to be exposed as COM automation servers.
3) JADE 5.1 extends the capability to import and activate further categories of COM objects including automation servers and removes many existing restrictions.
( I say "built-in support", because you _could_ use COM if you wanted to write all the plumbing youself, and import the DLL into JADE by hand, built-in support would automatically expose JADE objects as COM objects, without the developer having to muck around writing a seperate C++ DLL )

As stated above you don't need to do this in JADE 5, just use the COM exposure wizard to generate the 'wrapper DLL' for you.

On the other hand, even though JADE doesn't provide 'built-in' support for CORBA, you could 'roll-your own' using a 'wrapper dll' to implement CORBA client proxies and/or a CORBA IDL + SERVANT wrapper to expose access to JADE objects.
The curent major problem with JADE talking to JADE or serving JADE objects to anything else for that matter, is the fact that they don't use GUIDs (Globally Unique IDentifiers), only _system_ unique identifiers.

I don't agree that this is a major problem at all and JADE *does* in fact use GUIDs for interacting with COM.

Are you advocating that all JADE database objects are identified by a GUID? If so, I strongly disagree. Within a JADE system, objects are identified by a system unique object-identifier or OID and that is all that is required to access objects within a JADE system. When you need to identify a JADE object outside of a JADE system, all that is required is a suitable qualifier or mapping that ensures 'inter-system' uniqueness. The mapping is only required when you need to reference an object externally, not before. A simple analogy is telephone numbers; when making a local call, within a city, you don't need to provide the area or country codes.

Further to this, a fine-grain database object is not the typical granularity for distributed objects and is not a requirement for communicating between systems using either of the major standards COM or CORBA. COM uses GUIDs to identify object types (or classes) and interfaces not object instances. In COM, object instances are identified using "Monikers". Typically object instances are in charge of naming themselves, they create a moniker object and hand it out to any clients. For example, a moniker for a database object such as a row in a relational database table or an object in an OODBMS could include a server and database qualifier in the name.

On the other hand, CORBA uses 'Object References', a transient, opaque handle that identifies an object instance *within* a particular ORB (Object Request Broker). An object reference is the identifier needed to invoke methods on objects (similar to a COM interface pointer). Object references are *not* global identifiers that are valid across all machines in a distributed network; their scope is limited to a local ORB. Further an Object Reference is only valid for the session in which a client is connected to an ORB and is not interoperable by default. If you want to invoke a method on an object in a different ORB you need to obtain and use and IOR (Interoperable Object Reference). Now what was that major problem with JADE again? Phew! We haven't even talked about the CORBA Persistent State Service (PSS) and name service etc.
Until that's fixed, any communication is going to have to be overly complicated, basically allowing only the sharing of data values, not real objects.

Before we talk about fixing a problem, the problem needs to be defined. What problem are you attempting to solve?
This is the sort of basic functionality problem that really causes JADE to lose ground to existing standards-based solutions.

WHY!
Fixing this problem would also make allowing multiple servers and implementing replication a heck of a lot easier.

Please explain why you think this is so!

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:38 am

by Eric Peachey >> Mon, 3 Apr 2000 21:18:17 GMT
On the contrary, JADE currently does provide 'built-in' support for COM; furthermore, COM support has been extended in each major JADE release.

1) JADE 4 provided the ability to import of Active-X controls (an Active-X control is an implementation of a COM object)
2) JADE 5.0 provided the Active-X exposure facility that allows JADE objects to be exposed as COM automation servers.
3) JADE 5.1 extends the capability to import and activate further categories of COM objects including automation servers and removes many existing restrictions.

So does this mean JADE 5.1 will be able to talk to other JADE systems easily? A few years ago I used Forte and it seemed incredibly easy to define a service object (an instance of a user defined class that provides a useful service) that could be used by other Forte systems (see http://www.sun.com/forte/4gl/faq/faq-oo ... html#corba ). Are there plans for this kind of thing in JADE? I imagine there were similar mechanisms in Linc to allow easy communication between separate Linc systems.

Eric in Dunedin and not up to speed on all these COM/CORBA/DCOM/XML accronyms

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:38 am

by krull >> Tue, 4 Apr 2000 9:08:01 GMT
2) JADE 5.0 provided the Active-X exposure facility that allows JADE objects to be exposed as COM automation servers.
3) JADE 5.1 extends the capability to import and activate further categories of COM objects including automation servers and removes many existing restrictions.

So does this mean JADE 5.1 will be able to talk to other JADE systems easily?

If you mean using COM to communicate between JADE systems, then unfortunately (at least as of writing) this is still not directly supported i.e. it won't be as easy as it could be. A couple of technical
issues --described in a response to your earlier thread "Communication between separate JADE environments" on the jade_tech_design_architecture ng-- still remain. These issues are:
1) The JADE 5.0 Active-X exposure doesn't generate an automation server capable of out-of-process activation (essentially because it only generates a DLL and not an EXE)
2) You can't activate a JADE COM server in-process due to a JOM restriction of one NODE per executable

This is the issue that Wilfred identified in his post in this thread. It will be slightly easier in JADE 5.1 with the ability to import an automation server directly.

COM support in JADE is primarily intended for interoperability with non-JADE applications and components; there are quite separate plans to support JADE-to-JADE communications in a future release in a more direct fashion.

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:39 am

by ÇáÏíä >> Sun, 8 Jan 2006 22:54:11 GMT

ãÑÍÈÇ
áæÇÁ

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:39 am

by Wilfred Verkley >> Tue, 4 Apr 2000 0:25:11 GMT
On the contrary, JADE currently does provide 'built-in' support for COM; furthermore, COM support has been extended in each major JADE release.

COM Support is by far the most critical area in Jade IMHO opinion. If this is properly supported, a lot of things fall in place, because all of a sudden you will have access to a lot of interface MS already provides to developers ie ADO, XML, MS-Office Integration etc. I assume support in 5.1 will remain fairly basic (IDispatch Interfaces only? can we implement our own Interfaces? callbacks?)
Until that's fixed, any communication is going to have to be overly complicated, basically allowing only the sharing of data values, not real objects.
Before we talk about fixing a problem, the problem needs to be defined. What problem are you attempting to solve?

Simply to allow two Jade systems to communicate easily. The Jade system we need to talk to allows an external program to access it using ActiveX exposure. But because the two Jade systems cant exist in the same process, I need to write a stand-alone executable that hosts the first jade system, then provide another COM interface that a DLL used by our jade system can talk to. This is a complicated kludge, and a lot of work.


Wilfred in Auckland (grey sky, raining)

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:39 am

by krull >> Tue, 4 Apr 2000 9:12:22 GMT
Simply to allow two Jade systems to communicate easily. The Jade system we need to talk to allows an external program to access it using ActiveX exposure. But because the two Jade systems cant exist in the same process, I need to write a stand-alone executable that hosts the first jade system, then provide another COM interface that a DLL used by our jade system can talk to. This is a complicated kludge, and a lot of work.

Wilfred,

JADE 5.1 removes the need for one of these steps:
"provide another COM interface that a DLL used by our jade system can talk to"
Unfortuantely the first step:
"I need to write a stand-alone executable that hosts the first jade system" is still required to activate the JADE COM server NODE "out-of-process"

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:39 am

by Frank Pitt >> Tue, 4 Apr 2000 3:09:16 GMT
Jade currently has no built-in support for either, though support for CORBA is "on the wish list".

On the contrary, JADE currently does provide 'built-in' support for COM; furthermore, COM support has been extended in each major JADE release.

OK, I apologize, what I said was wrong , JADE does have "built-in" support for exposing functionality via COM. And yes, you can use the "Exposure Wizard" to generate DLL's to expose stuff to COM.

However, I didn't really say what I meant either.

What I was trying to get at is that JADE doesn't just serve COM objects on demand,
you have to explicitly use this Exposure Wizard, and you need to generate a DLL.

I'll admit I'm being really unfair here, as Microsoft still haven't understood COM properly themselves yet, and AFAIK also haven't produced a COM server that works without using DLLs, so expecting JADE to do it is a bit of an ask, though I believe there are some Enterprise Servers that can serve CORBA objects as COM and vice versa, even from non-Microsoft platforms.

( Completely off topic, but the COM specification is not tied to Microsoft platforms, and doesn't really require it's objects to be provided as a DLL or EXE, they merely have to match the binary standard for COM objects. The DLL or EXE is merely the "package" that the Microsoft "COM server" ( it's operating system) uses to persist the COM objects between uses and load them when required.
Perhaps one day they'll do it right ! )
The curent major problem with JADE talking to JADE or serving JADE objects to anything else for that matter, is the fact that they don't use GUIDs (Globally Unique IDentifiers), only _system_ unique identifiers.

I don't agree that this is a major problem at all and JADE *does* in fact use GUIDs for interacting with COM.

Well, it has to, doesn't it ?
The point though is that the GUID is not used internally in the JADE database.

BTW I should probably have used the more generic term, UUID, rather than the Microsoft-specific GUID, so will do so from now on.
Are you advocating that all JADE database objects are identified by a GUID? If so, I strongly disagree. Within a JADE system, objects are identified by a system unique object-identifier or OID and that is all that is required to access objects within a JADE system. When you need to identify a JADE object outside of a JADE system, all that is required is a suitable qualifier or mapping that ensures 'inter-system' uniqueness. The mapping is only required when you need to reference an object externally, not before.

True, but in any serious distributed system you will then have to _maintain_ that mapping. This means a lot of additional work for all developers which can be avoided if the underlying object database uses UUIDs internally.

The point is that you are using a unique identifier anyway, so why _not_ use a UUID ?
It's not like storage is a huge issue here, and it's only 16 bytes anyway.
For efficiency within a single server system, you could use just part of the UUID if you thought it was that much of an issue, as in your analogy below.
A simple
analogy is telephone numbers; when making a local call, within a city, you don't need to provide the area or country codes.

This is a poor analogy to support your argument as telephone numbers _are_ globally unique if you _do_ include area or country codes, which exist anyway, whether you use them or not. i.e: while you may never use 064 when phoning a number in New Zealand, it is still part of that number, and you _could_ use it internally if you wanted to.

(BTW, some of Vodafones callback numbers uses 064 even when calling within New Zealand, just in case the owner of the phone happens to be overseas at the time, so even here there is a case where using the complete "UUID" makes sense )

Following your analogy, JADE does not provide the area or country codes at all, so when you _do_ want to talk non-locally, you are in trouble.
Further to this, a fine-grain database object is not the typical granularity for distributed objects and is not a requirement for communicating between systems using either of the major standards COM or CORBA.

Actually, for any serious _object_ database work such fine granularity is essential.
Why do you think JADE implements a unique system OID ?

The reason you won't see it in most big CORBA/COM implementations is that they aren't using object databases. When working against a legacy system such as a relational database, it is usually not efficient to try and provide UUID's for the existing data, or to map every data-item to an object instance.

It may not be a _requirement_ for communicating with COM & CORBA, but if you don't do this then you're forcing developers to continually re-implement a meaningful UUID on top of one that already exists and would be adequate for the purpose if it was a UUID rather than just a system UID.
COM uses GUIDs to
identify object types (or classes) and interfaces not object instances.

While I admit that this the main thrust of Microsoft's current implementation of COM,
the COM specification is designed to fully support data object instances as well.

Even the ones you mention actually identify instances. The CLSID identifies an instance of the Class class (to use the JADE equivalent, can't remember the COM name), and the IID identifies an instance of the Interface class.
In COM, object instances are identified using "Monikers".
<snip>

This is incorrect. A "Moniker" is Microsoft's implementation of the concept of a URI, or Universal Resource Indicator. Monikers are designed to provide a means of _locating_ an object instance.

In other words, they are equivalent to a CORBA object reference :
On the other hand, CORBA uses 'Object References', a transient, opaque <snipped discussion of CORBA object references>

The CORBA equivalent of a UUID is _not_ the object reference but the PID or Persistant IDentifier.

I think the fact that JADE uses the OID as both identifier and as the value placed in an object reference is confusing you here. There is a fundamental difference between the concepts of _locating_ an object, and _identifying_ an object.

A CORBA object reference is equivalent to a COM Moniker, which in turn is equivalent to a JADE object reference. All three allow the user to locate an object.

But a CORBA PID is equivalent to COM GUID, which is equivalent to a JADE OID, and these allow one to _identify_ an individual object

It just so happens that in JADE the _value_ stored in a JADE object reference is the same as the _value_ of a JADE object's OID, because due to the way the JOM works, the identity of an object is also always enough to also locate the object.
Until that's fixed, any communication is going to have to be overly complicated, basically allowing only the sharing of data values, not real objects.

Before we talk about fixing a problem, the problem needs to be defined. What problem are you attempting to solve?

The problem of connecting multiple JADE systems that Eric originally brought up.
This is the sort of basic functionality problem that really causes JADE to lose ground to existing standards-based solutions.

WHY!

Basically, while I fully agree that many systems, and definitely most NZ systems can be run quite happily on a single server, many DP types get very antsy when told they can only have a single server on a JADE system. Especially for high availability or high security systems, rules often state that any such system _must_ have at least dual servers, and they must be in different cities.

While one can argue whether this is really neccessary, the fact remains that some people with purchasing clout believe it is. I'll admit I'm inclined to agree with them, especially if your servers are located in earthquake prone locations !
Fixing this problem would also make allowing multiple servers and implementing replication a heck of a lot easier.

Please explain why you think this is so!

OK.

I contend that the major difficulty in allowing replication between servers, and even of allowing multiple servers on a JADE System at all, is that JADE only has single server scope when it comes to allocation of unique identifiers

Let's specify an example in detail.

Assume I have a Customer class defined in JADE.
Assume that this exact same Customer class is used in two separate JADE systems using the same schema, system A & system B.

Now,
I want an individual Customer object created in System A to be used from System B.

It should be possible to identify the object in System A and update that object from System B without having to "re-create" the customer object in System B, and update it back to System A with no persistent affect (other than perhaps some secondary transaction logs) on System B. All that should be required is that System B understand the same schema as System A.

And it should be possible to do this merely by connecting to the JOM on System A and requesting the Customer object containing a particular UUID, in exactly the same way as you do internally to System B with an OID.

In fact, in a predefined (as opposed to an ad-hoc) network, the user should request the object from System Bs JOM, which, when it finds it doesn't exist locally, should then query SystemA's JOM automatically (depending on the number of servers, and the topology of the network the algorithm for this remote query may have to be different)

This sort of stuff is not hard, I was involved in writing this sort of code for a mobile radio network. There, the objects (the mobile radios) could change server of their own accord, and without informing the system, and we still had to find them !
But it requires that the objects be uniquely identifiable across all servers.

With JADE as it is, any attempt to migrate objects of the same class between servers (or systems) requires implementation-dependant creation of a UUID on top of the system UID, and if you want to use the object between two systems in the future it requires you to continue managing and maintaining the relationship between the two system UIDs, which is not something you want to write more than once.

With a UUID, none of this would be neccessary, an object with the same UUID would be the same object, no matter where it currently was, and no matter how many copies we might have.

This _could_ be solved by having JADE automatically maintain such a relationship between the systems, but that would be a lot of addittional overhead for something that could be more simply implemented by just using a UUID in the first place.

Obviously, there are replication issues with holding instances with the same UUID on multiple servers, but these are solvable using such concepts as master-slave copies, it's merely a matter of choosing which update strategy would be most generally appropriate, or even allowing the developer to chose the update strategy depending on the likely mobility of the object.


If I am wrong about all this, and you can easily have multiple live servers with replication on a JADE system, or equivalently, easily migrate objects backwards and forwards between systems, in some other way, then I'd really like to learn how, as I will have been giving people the wrong information, which I don't like doing.

Frankie

ConvertFromOldNGs
Posts: 5321
Joined: Wed Aug 05, 2009 5:19 pm

Re: JADE to JADE communication

Postby ConvertFromOldNGs » Fri Aug 07, 2009 10:39 am

by krull >> Tue, 4 Apr 2000 13:41:12 GMT
True, but in any serious distributed system you will then have to _maintain_ that mapping. This means a lot of additional work for all developers which can be avoided if the underlying object database uses UUIDs internally.

Of course, if such a mapping were to be used then it would be maintained. Why does this that mean "a lot of additional work for developers"; the system would maintain the mapping transparently? Yes, the mapping could be avoided if the database used UUIDs internally. There are various cost/performance trade-offs to be considered with either approach.
The point is that you are using a unique identifier anyway, so why _not_ use a UUID ? It's not like storage is a huge issue here, and it's only 16 bytes anyway.

Storage is an issue, but not the only one. The additional overhead added to each object is not the main concern; of greater concern would be the increase from 6 to 16 bytes in every object-reference, which would impose a significant impact on object collections in storage and performance.
For efficiency within a single server system, you could use just part of the UUID if you thought it was that much of an issue, as in your analogy below.

And applying the principle that only objects that need to be accessed externally require some form of UUID, a single-server system is just a special case were no objects are accessed externally.

A simple analogy is telephone numbers; when making a local call, within a city, you don't need to provide the area or country codes.

This is a poor analogy to support your argument as telephone numbers _are_ globally unique if you _do_ include area or country codes, which exist anyway, whether you use them or not. i.e: while you may never use 064 when phoning a number in New Zealand, it is still part of that number, and you _could_ use it internally if you wanted to.
Following your analogy, JADE does not provide the area or country codes at all, so when you _do_ want to talk non-locally, you are in trouble.

If the chosen approach to identifying JADE objects externally is to add a system qualifier, then the telephone anlogy matches quite nicely. In the absence of the capability under discussion viz. JADE-to-JADE communications, country and area code equivalents would be redundant.
Further to this, a fine-grain database object is not the typical granularity for distributed objects and is not a requirement for communicating between systems using either of the major standards COM or CORBA.

Actually, for any serious _object_ database work such fine granularity is essential. Why do you think JADE implements a unique system OID ?

It sounds like Wanda is referring to the difference in granularity of distribution, that is so called Business or Component objects versus fine-grain database objects. In many large-scale systems a component object CORBA or COM (as distinct from a database object) is the unit of distribution. Using this approach, objects are accessed and/or updated via services provided by the component objects and in some cases internal database objects need never be identified externally. Interoperability at the component level allows bussiness rules to be encapsulated by the provider system; fine-grain distribution of objects between discrete systems jeopardises encapsulation, security and so on....
It may not be a _requirement_ for communicating with COM & CORBA, but if you don't do this then you're forcing developers to continually re-implement a meaningful UUID on top of one that already exists and would be adequate for the purpose if it was a UUID rather than just a system UID.

Hands up, how many JADE developers are re-implementing UUIDs continually? How, many times have you done this Frank?
I contend that the major difficulty in allowing replication between servers, and even of allowing multiple servers on a JADE System at all, is that JADE only has single server scope when it comes to allocation of unique identifiers

Let's specify an example in detail.

Assume I have a Customer class defined in JADE.
Assume that this exact same Customer class is used in two separate JADE systems using the same schema, system A & system B.

Now,
I want an individual Customer object created in System A to be used from System B.

It should be possible to identify the object in System A and update that object from System B without having to "re-create" the customer object in System B, and update it back to System A with no persistent affect (other than perhaps some secondary transaction logs) on System B. All that should be required is that System B understand the same schema as System A.

And it should be possible to do this merely by connecting to the JOM on System A and requesting the Customer object containing a particular UUID, in exactly the same way as you do internally to System B with an OID.

AH HA!, now you have actually admitted that system B only needs to use a UUID when accessing a customer object in system A, while using an OID to access a customer internally. This is perfectly true, but it is counter to all your arguments so far. Another aspect of this scenario that you haven't mentioned, is that before they first connect, system B knows nothing about system A's objects; Prior to the first communication, system B has no knowledge of the identities of objects created by system A. In order to import an object reference (or references) from sysA, sysB must invoke some sort of service in A, and only at this time is it strictly necessary to establish an external-to-internal name mapping, which incidentally could possess one of several lifetimes (from session to lifetime of referenced object). Such a name mapping could also be implicit, if unique system identifiers were allocated to each co-operating JADE system.
In fact, in a predefined (as opposed to an ad-hoc) network, the user should request the object from System Bs JOM, which, when it finds it doesn't exist locally, should then query SystemA's JOM automatically (depending on the number of servers, and the topology of the network the algorithm for this remote query may have to be different)

There are a number of ways to address this requirement, again without resorting to assigning UUIDs to all objects before-hand.
This sort of stuff is not hard, I was involved in writing this sort of code for a mobile radio network. There, the objects (the mobile radios) could change server of their own accord, and without informing the system, and we still had to find them !

Of course its not hard, but you have only addressed one part of a larger problem in isolation. What about larger issues of synchronising the commit of a global transaction involving multi-site updates.
But it requires that the objects be uniquely identifiable across all servers.

With JADE as it is, any attempt to migrate objects of the same class between servers (or systems) requires implementation-dependant creation of a UUID on top of the system UID, and if you want to use the object between two systems in the future it requires you to continue managing and maintaining the relationship between the two system UIDs, which is not something you want to write more than once.

Who are you referring to in the above statement?
With a UUID, none of this would be neccessary, an object with the same UUID would be the same object, no matter where it currently was, and no matter how many copies we might have.

Now, where have I heard that before? Globally assigning UUIDs for all objects is *A* solution; it is not the only solution and futher it only addresses part of the problem.
This _could_ be solved by having JADE automatically maintain such a relationship between the systems, but that would be a lot of addittional overhead for something that could be more simply implemented by just using a UUID in the first place.

It could also be a lot lower overhead than just using UUIDs in the first place. Can you supply analytical evidence to the contrary, bearing in mind that you would need to consider all of a number of alternatives to your "UUID for every object" approach.
Obviously, there are replication issues with holding instances with the same UUID on multiple servers, but these are solvable using such concepts as master-slave copies, it's merely a matter of choosing which update strategy would be most generally appropriate, or even allowing the developer to chose the update strategy depending on the likely mobility of the object.

There are many issues to be addressed with replication, in the most flexible forms of replication conflict resolution when merging updates is a far more complex problem than simply identifying an object in a "family" of replicas.
If I am wrong about all this, and you can easily have multiple live servers with replication on a JADE system, or equivalently, easily migrate objects backwards and forwards between systems, in some other way, then I'd really like to learn how, as I will have been giving people the wrong information, which I don't like doing.

This final statement is perhaps the most disturbing.

I understand that you currently work for Software Education Associates Ltd., who deliver JADE courses to current and prospective JADE users. Are we to understand that you are currently advising people that due to certain alleged design flaws, JADE will have difficulty in delivering the capabilities under discussion?


Return to “Feature Discussions”

Who is online

Users browsing this forum: No registered users and 15 guests