Thanks for the questions Wade, others will have better responses I'm sure, but here's my take, in line.

Wade Chandler wrote:
If one were formulating an argument for the use of Jini and JavaSpaces versus 
JEE,
what exactly would the decision maker be? I know you can use JEE inside Jini
> services, and thus they are complimenting each other in this regard, and then Jini
services can be discoverable, but is that the real beauty of Jini versus EE?
I guess I'm having a hard time reconciling why I should want to really dig into Jini more versus just continuing to use EE.

Jini is all about exploiting mobile code everywhere. It provides a model and services that really want that to be possible, and used widely. For me, these services, the specs and their availability in the network are what makes Jini work well. If you do JEE, it provides a mechanism for interfacing software with the network. It, itself, doesn't provide standards at the level of network services that Jini provides from my perspective.

I can have remote code with EE, and I can have it clustered and running on
> multiple backends. Such a thing would only be done in Jini, per my
understanding, by having a Jini front end where the code which the service executes still executes in an EE environment using stateless or stateful beans. Too, JavaSpaces seem cool from the sense of remote memory, but I'm having a hard time reconciling why JavaSpaces are any better than EJBs except for the fact that I don't really have server storage coding for the backing JavaSpaces tuples, though for any type of application to survive shutdowns and crashes data would need to be stored in some type of a permanent data store such as a database. Using a database would make sense anyways, so it seems tuples/entries are better suited to temporary distributed memory, but again, maybe wrong here and needing
clarity.

Javaspaces is for conveying requests between interested parties, not for storing data. You would, store data somewhere more resilient, and then formulate requests with references to this data that would fly around between parties, using the Javaspace for communications so that you can plug in new players without others having to know they exist.

For example, if you want to insert a step into a process, you might have the producer of the data comming into the new step, produce a different type data, have the new step, consume it, and then output something that was ready for the original receiver to use. By using a Javaspace, the insertion only affects the producer, not the consumer in this example. It might, of course be necessary for the original consumer to know something new about the changes made by the new step. But, it might also be a convenient versioning mechanism as well.

I know this is a Jini dev list, but I'm trying to reconcile these things
to make sure I want to commit resources here as I am really interested
in the automatic discovery of services and pluggability, and I'm very interested in distributed services, where service calls are distributed
and clustered the server/service side so that multiple instances of a
service handle different requests in the backend for a given front end,
if this is possible with Jini services as part of the Jini
> specification. This would basically be clustered services.

This plugability based on "type" of message consumed is a key feature of using the Java type system. It is possible in other messaging mechanisms using, say XML, or other programming language neutral systems. But, you can't send "new" behavior without having downloaded code. Instead, you have to make every system aware of any semantic meaning the data carries, which you'd rather keep abstracted.

Something bothering me about JavaSpaces entries is they force public fields/variables. To me they should operate off the same assumptions JavaBeans and serialization operate. EJBs work this way as well. Truly those things should be compatible thus true encapsulation can
take place. I haven't figured out why entries differ from the other
specifications.

One of the primary issues with JavaSpaces is to that it tries really hard to not download code. In doing that, the marshalling between the writer and the space, extracts data from the class to send down to the space. That data needs to be visible for the matching mechanisms used for read/take. In order to keep from downloading code, it can't really "serialize" the data in the normal way.

This works well in many cases. I created a exploratory project at jspace.dev.java.net, which does two things different. One, it separates these key values, used for matching, from the data. It provides for the use of marshalled or unmarshalled data for keys in this regard, by also including a matching implementation, which might marshall/unmarshall, or package key data in a particular way, that is advantageous for the application.

The space part also includes an executor mechanism along with an iterator similar to what Javaspaces05 added. The executor allows you to send executable code into the space and run it there to do things when entries match.

The design allows for downloaded code to be used if an application needs it, with full serialization of all data. But, it also allows you to customize its use so that you get behavior very much like a Javaspace without conventional serialization.

Too, do I have the wrong idea about the River incubator?

The Sun team, and other committers have the lowdown on their intents here.

Gregg Wonderly

Reply via email to