Read at your peril.

On Dec 23, 2008, at 1:17 PM, Gregg Wonderly wrote:

Michael McGrady wrote:
For Java software, the JERI stack codified in River, provides the ability to plug in the needed invocation details (starting at the BasicILFactory point). The Exporter allows this invocation layer and an endpoint technology and security constraints to all be unified into a single point that allows them to be plugged together and arranged to work as needed.
My question was what if WINI, XINI, YINI and ZINI were Java? If so, JERI would not be involved, for example.

You didn't indicate whether any of these where remote or local, has classloading capabilities etc. Each layer of the Exporter- >InvocationLayerFactory->Endpoint chain provides a unique point to couple into the JERI "stack". Technically, Exporter is not in the JERI stack, but I consider it as part of the stack because for a service, it provides the first layer in how a service interfaces with clients.

If you want to export a JavaSpace, without JERI (InvocationLayerFactory plus Endpoint), then technically, you can provide outrigger an Exporter, in the Configuration, which does whatever you want through the Exporter.export() returned "proxy". It could use whatever it wanted. I've done this to use MODBUS as the interface to a device.

But, if you want to take advantage of more of the infrastructure that JERI provides, then you should code to the JERI interfaces and use existing classes, such as BasicJeriExporter.

WINI, XINI, YINI and ZINI are competitors, not users, of JINI.



Why? Because the spec has semantics in it too, and those semantics (like RMI call-by-value) need to be supported at the Java interface level for a Java written Jini bit of software to be compatible with other Jini bits of software.
But, is this good or not good?

The specification of anything that is a standard narrows the path for non-conformance or other forms of confusing that create the need for "work arounds" or "better solutions".
Specifications sometimes are enhanced by creating as much non- conformance as possible. You have to have MPEGs read one way but they can be written any way. Standards should be as lean as possible to let innovation work. Don't you agree?

I believe in maximum specificity of what matters, and "generate perfection", and "tolerate imperfection" as a basic premise to software construction.

The problem is that that maximum specificity in matters of standards is not a virtue but a vice. Minimum specificity is the goal.



In the world of SOA, there are all these concepts, but they are described independent of a technology, and they are honestly more akin to "best practices" than they are as "architecture."
I definitely do not agree with this. First, comparing SOA and JINI is comparing applies and oranges. A SOA service is nothing like a JINI service. SOA definitely, to my way of thinking, is an architecture.

A Jini service is a service, plain and simple.
There is not such thing as a "service, plain and simple". SOA is not a sudden discovery that there is such a thing as services. Services are as old as the hills and SOA is not. The type of service in SOA does not predate SOA. SOA services are defined by business people and those people do not have to know a single thing about technology to do that.

I will concure that they can define that a particular type of service is needed. But, until it has one or more interfaces to its users, it is just conversational interest because it is providing no value.

Actually in SOA the interfaces are not that important. One of the great things about SOA is the integration of disparate interfaces with using triangulate numerals as adapters.



A Jini client is a client of a service, but may be a service itself.
A SOA service is a producer, a producer that encapsulates its state. The SOA producer knows nothing about the consumers: SOA transactions are stateless. Nothing means nothing. The consumers also know nothing about the producer: they too are stateless. Nothing also means nothing here.

Until a technology is applied that lets consumers have access, it is just of conversational interest, and has no value.

> There is an SLA that the system provides.  The system,

Do you not want to talk about SOA?


consequently, requires that integration logic be decoupled from the business logic.

Something or somebody has to make the connection or neither can participate in the system.

Yes. How do you think that happens? There are no connections from the business logic. When you get what happens, I think you will see what I am saying.

When that connection is made, a technology is employed. At that moment, there is value to be had. I don't see how there is a "requirement" that the integration logic be decoupled from the business logic.

Then, Gregg, you don't understand SOA. SOA is stateless at the service level, so there cannot be knowledge of one service, consumer, producer, etc. of another.

What I know is that at deployment, the implementers of the service had to have enough information about what choices might be made at deployment to provide a software system that allows that to occur. That would require them to choose specific technologies that allowed the choices.

Still SOA is stateless and what you need to see is how different that is from JINI. I do not mean JINI has no use in a SOA but it has nothing to do with a JINI service.



Service Oriented Architecture includes no specification of technology.
This depends on what you mean by "specification". SOA requires that the communications be event-based. That certainly has a huge impact on technology.

There are lots of ways to get event based communications and I am not sure that it's a huge impact, but it can drive the design of the software system, as I said above.

Event-based communications also completely decouple integration logic. There are four kinds of IT communications. They are based on what values they have with respect to two attributes, viz., whether the consumer or the producer initiates the communication and whether the initiator of the conversation (producer or consumer) knows the address of the other one (consumer or producer). An event-based communication is initiated by the producer and is unaware of the address of the consumer. This is why SOAs are event-based.



What this means is that you can talk about SOA all you want, and in the end, that conversation is valueless in terms of solutions, because it doesn't let anyone know how they might actually get work done in such your SOA.
SOA is not a problem. SOA is a solution. So, talk about SOA certainly should have something to do with solutions.

The solutions are discussed, but the actual value is unrealized until they exist as consumable services.

The genius of SOA is exactly the opposite of what you are saying.



They might discern that you have particular types of services, they might learn that you've embraced various details of an SOA.
I don't understand this. Not sure how you can talk about a SOA like this.

SOA discussions, for me always go in this direction. I'm a detail person. There is no value in SOA until you talk about the technologies that you will involve.

There is no value if you do.

Only then can one see and understand the ramifications that each has on the system.

The whole point is that whatever they are they do not have ramifications.

By deferring the discussions of technologies, too long, you disallow yourself the opportunity to understand the ramifications until later. I fear that this will typically cause a lot more grief. This is probably more of my view of bottom up design, which I think is a service oriented view, vs the old waterfall, top down design view, which I think causes services to be mis-designed because the details of a service are delayed too long.

The details in SOA are delayed forever in IT.  That is required.



SOA, for me is a waterfall, top-down view unless you include technologies in your view of how the system will function overall.

SOA is wholly unrelated to the technology.



You can ignore technologies for a while. But after a while, technologies become the controlling factor in the success of your implementation. This, causes me to favor early consideration over delayed commitment.

In my opinion, Gregg, you do not understand system architectures. You think solely in terms of engineering and pretty much nothing I say will appeal to you.



When the rubber hits the road, you have to decide on a technology that provides the features of your SOA.
This too does not make sense to me. Technologies have nothing to do with SOA features. Those features are architectural and paper bound.

Let's say that you have a business that has a summary item that drives most of what happens. As part of your SOA, you decide that you need to have a summary service that will take all the inputs and create the summary item needed.

SOA architectures are defined at the business level by businessmen and women.



You talked earlier about SLAs, so I'll guess that you'd like to include an SLA in the description of the service.

The service really is the SLA. Nothing else matters or is settled, ever, anytime.

What else do you think needs to be included to understand how this service would be used?

Nothing.

Would we consider whether a database was a useful storage spot?

Definitely not.

Would we consider whether the database interface for queries would be the primary point of access, or would we talk about whether a web interface is needed for human consumption?

No.  None of these.

 Would we ask whether caching was important for speed?

No, just read the SLA.  That's it.

Would we talk about whether the liveness of the cache would be a push or query based refresh?

No.

How much detail would you include?

None.

The more detail you go into the more technology choices you expose right?

No.  You don't do that.



Some of those technologies might be things like pens, postit notes, white boards, projectors, chairs, tables etc. Which are services to their users in that they allow certain tasks to be carried out using the specific mechanical interfaces that they provide.
This is totally unconnected to a SOA.

No, an SOA has to include people tasks too. If you don't include human impact and interface issues, you've missed on the largest factor of efficiency in your system.

You mean a service has to include these. SOA is an architecture and not an system.



But when you get into the realm of software, then you have to decide what will be the pen (invocation layer), ink color (marshalling technology) and paper (transport layer) of exchanges between software bits. These decisions dictate a lot of other things about what the software can do with the other entities in the system. So, many people end up with a custom, combined invocation layer and marshalling layer that hide SOAP/XML or whatever technology they've decided on.
This all has nothing to do with SOA that I can see.

This is where I think at. This is why SOA is valueless to me. Details are what matter and what make things actually work. For me this is the system architecture because communications is all that matters in an SOA vs a single process system. If you can't communicate between services and users, there is no value in the services existance.

You really don't understand what SOA is, Gregg. You are talking like someone who says they don't give a damn about gravity because it is just a theoretical construct. The questions are way, way, way deeper and more subtle tthan you are allowing for here.



As soon as you do that, you've effectively wrote off all features of the IL and marshalling that you don't expose in that layer.
How are we marshalling with SOA?  That does not make sense.

Sometimes I guess services and users should communicate... If your SOA has no communication between services and users, that's fine, but where is the value then?

Users subscribed to or register with services in a SOA. You think that communication in IT means a connection between the parties to the communication. That is only true half the time. The other half you don't understand. I suggest you take on some reading on event-based communications and anonymous request/reply communications.



This is where Jini differs. With Jini, that IL and marshalling is completely at your control. It has exact details specified in simple terms.

At the method layer:
o    all methods throw RemoteException to indicate a problem in the
   IL or endpoint mechanics.
At the invocation layer:
o    method values are passed by value always.

There are other things about security constraints which can change some of the types of RemoteException which will occur, but still, you get a RemoteException.

All of these we know will always be present in a Jini system. So, we can be very deliberate and very specific about how to deal with the problems that can occur.

> It
Yes, which means that it is totally antithetical to SOA, which does not mean it is worthless. Just that it is different.

Maybe you can explain to me what is not antithetical to SOA from your viewpoint? When you throw out these types of comments with absolutely nothing behind it, it's very difficult to communicate about the real issues.

Any distributed state. The trouble here, I think, Gregg, is you don't have a lot and maybe hardly any exposure to architectural principles in software development. This is not unusual.



means "Service-Oriented Architecture" which is not dispositive but is a strong hint or something has gone very wrong. JINI is really not SOA oriented at all. It has uses which really interest me but SOA is not one of them.

Okay so with my explanation above of my view of Jini, how would you clarify your view that Jini is not SOA "oriented". What features of Jini keep it from working as a client and service creating technology?
Pretty much everything you said about JINI was confirmation that it is antithetical to a SOA service and the implied sorts of communications that must exist between consumers and producers that know nothing about one another.

Jini service lookup is THE point of "knows nothing about one another". By using the discovery services, I can find ALL services (not just ones implementing a particular interface).

We are talking applies and oranges here. Yes, a lookup service should be decoupled from the applications it is used with, one of the reasons why I think JavaSpaces is primary to JINI. Normally, however, a lookup service provides a reference. We definitely don't want that to happen with a SOA service.



There could be a WSDLEntry on a service if I wanted to advertise a SOAP interface. A proxy service could just look for all WSDLEntry services, and provide the interface between my Jini service and your SOAP enabled client.

I also could just use Java introspection to find out about a service and then utilize what is there. But, that doesn't seem like much of an architecture thing. You said that you look at the interface level. If you have a Java interface, then you have lots of choices, because the implementation of that interface can be multifaceted to include proxied services etc.

Client Jini software can use things like ServiceDiscoveryManager to not have to know how many of a particular kind of service exists, or which one to use for the task at hand. But, an architectural decision has to be made about whether something is a singleton or a multiple instance "service" so the client can utilize the appropriate patterns. To make that plugable still requires advanced knowledge to make that possible.

What I sense is that you really have a limited idea/concept of how Jini relates to the solutions you need. I'm more than happy to keep plugging away at the gap, but I really am having a hard time given the size of the gap that I perceive.

The problem is not the size, it is the nature of the understanding. SOA is completely orthogonal to your concerns. I think I understand the basic architecture of JINI and I like it.



The spec is what you should consider first. That is the behavioral description of what has to happen.
How so?

It says things about why there are transactions and leases. What those mean in the system and how you deal with events related to the lifecycle of those items for example. The API javadoc might say something more or less in line with the spec documents. Over the years, more spec has moved into the javadocs so there is more one stop shopping.

The interfaces, which exist today, are one way to do the things that the spec details. No other implementation has appeared with a different API, so the net.jini stuff has sort of become what some thing of as Jini. I consider the net.jini interfaces to represent a Java codification of the spec, but not necessarily the only one. It wouldn't be great to have lots of different version of the same interface running around which supported the same spec behavior, but used entirely different types etc. So, certainly the existing net.jini definitions of classes and interfaces are what meet the spec and provide a portable platform.
The JINI spec is an end product. I am interested JINI but am also interested in a little wider or higher view than the JINI spec. Interfaces are the leverage points in an architecture. I am more interested in interfaces.

The spec is the SOA level. The interfaces are the technology behind that.

No the spec is not at the SOA level. Businessmen do not design JINI services based on the spec.


The services in River are implementations of the spec.
I am not quite sure what an "implementation of the spec" would be. I do know what an implementation of an interface is. I also know what compliance with a spec would be.

There are both classes and interfaces detailed in the spec. You need to consider that interfaces have some behavior specified, while classes have behavior implemented. Outrigger is an implementation of the JavaSpace specification and associated API. It has behaviors that are not tied to the spec. For example the spec does not detail storage of Entry objects, nor the performance of the storage system. Outrigger stores a copy of Entry objects in memory. This sets an upper limit on the total number of items that can be stored. It still meets the spec as an implementation in this regard because the spec doesn't say what it should do for this issue.

All this is beside the points being discussed, Gregg.



Let me mention that OSGi has taken 10 years to get where it is and the big breakthrough was when it was adapted by Eclipse. JINI is no youngster either. There are lots of technologies started in the late 1990s that are just coming around.

OSGi had lots of problems and incomplete bits and pieces. It was a concept which need lots of refinement. By the time all is said and done, it will not be much more than a restatement of the rules and API of Java classloaders expressed as a textual description of what one would code. Does that make it valuable? I'm sure many, who don't understand what happens in the trenches, how things relate and what things must be done, will feel fine to use OSGi, because it will create appropriate limits and controls to cause them to do things largely, correctly. But, it will present limits on the total possibilities, or it will just be re-expression of the Java language constructs that one can program class loading and container systems with today.
If you think that OSGi is merely a clever way to use class loaders, you are missing the boat, I think. OSGi provides a lifecycle service and is a system with emergent properties far beyond a mere class loader mechanism, which is probably a tautology but a good one.

If I dereference a classloader, it is unloaded, that's lifecycle management.

No.  That is not true.  Did you know that OSGi is used with CLDC?



from 2.1 in the JSR 291 proposal:

This specification will define a dynamic component framework including component lifecycle for existing Java SE platforms. The dynamic component model will support assembly of applications from components and support implementation detail hiding between components as well as lifecycle management of those components.

The specification will be built upon capabilities in existing Java SE platforms and provide a consistent and predictable dynamic component model across the family of Java platforms in conjunction with JSR 232 for Java ME (CDC).

The specification will enable components to be declared through metadata and be assembled at runtime using a class loader delegation network. The specification will also allow components to be dynamically life cycle managed (install, start, stop, update, uninstall).

This says "existing java SE platforms" so it can't do more that what Java already provides in class loading.

Like I said, you don't see how systems provide emergent properties. The code that is written on top of Java matters. Java itself is not written in Java, you know. This is like saying Java cannot do more than C. Or, this is like saying that people cannot do more than molecules or an engine cannot do more than what its parts can do. The design of the engine makes it possible for emergent properties to come out of what were just leather, steel, plastic, oil.



This says "components to be declared through metadata" and "be assembled at runtime using a class loader delegation network". It also notes dynamic life cycle management.

Notice the talk about components? Components here are not classes, they are components.



If you look at the APIs there is a world of stuff there.

Our company is an OSGi member and I am the company rep for OSGi. So, I have looked at it a bit.

So, yes, in the end it is more than a classloading mechanism with lifecycle control, but why? There is more to creating a plugable frame work than running code. You have to be able to communicate within and out of the framework. It's interesting, but communications is a solved problem, so I don't look at this as a "value" of OSGi.

I don't understand this.



When there is a lot of discomfort in a change people tend to push back. Discomfort comes from more than "that's the name it's had for years" in this case.
For what it is worth, this also is not my experience. That is plenty reason for most to push back. Not all of course and no one in River for sure. Also not anyone that lives within 100 miles of me. ;-) I hope you accept all this with a pinch of salt but I do definitely not agree with your statements about how change is embraced in the world.

Again, I didn't say change was embraced, I said value was embraced. Sometimes that creates change as people gravitate in the direction of making use of a perceived value.
I understood you and still understand you to say that people go with or against change depending upon how they assess the suggested change. I am disagreeing with that. I think most people, the vast majority of people, will fight against change simply because it is change with no assessment at all.

If you choose not to decide you still have made a choice...

> I am not saying this is bad.  It may be good, right,

mete, etc. I don't know. I do know that with the status quo most people have their part and they don't want the status quo changed because then they will have to reinvent themselves. I would be amazed if the conversation in River went different than it has. Here is a technology with great promise that is on the edge of distinction and will have to be reinvented from a different direction if it does not succeed and it is not responding to this pressure on the whole. This is normal.

The pressure has been around for a long time. We've talked, blogged, educated, enhanced and reinvented (Rio, Chiron/Seven, Bantam, Harvester and many other work simplifying tools). What hasn't happened is everyone jumping on.

I, personally, believe that the problem is ignorance of the problem space and how Jini facilitates solutions more than anything.

I think the problem is that the code is a jumble and needs to be seriously rearranged and admit that I am not sure how that should be done just yet. A lot of JINI I definitely want not to have as a person involved with certain kinds of products. JINI is, frankly, too good at discovery for many projects.

Until people really understand, it won't matter how it's packaged. There will always be people who don't like a package name, don't like an API, don't understand why there's not a signature without Transaction etc. All of that requires education.

Now the question, for me, is can we make changes to the "packaging" and the "experience" when provides the education in a way that makes people hang on and learn what they need to know?

This is what Niclas and others keep proding and pressing for directly and indirectly.

Packaging Java is not like packaging Christmas presents or naming kids. It is serious business with serious consequences.



I always have liked the explanations given by Thomas Kuhn in Sources of Scientific Revolution.

Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy, there lies a small, unregarded yellow sun. Orbiting this at a distance of roughly 98 million miles is an utterly insignificant little blue-green planet whose ape- descended life forms are so amazingly primitive, they still think digital watches are a pretty neat idea.

Enjoying talking to yuu, Gregg.


Reply via email to