Todd Biske wrote:
> This is actually a very interesting question.  I think Anne hits all 
> the technical points right on the nose (as she always does).    There 
> are some elements that Anne points out that do differentiate a well-
> defined interface in the Web Services world from a typical Java or C# 
> class or interface definition.  The bulk of it is centered around the 
> non-functional aspects and interoperability goals of a Web Services 
> based SOA.  If we're dealing with local invocation of objects, the 
> transport, message formats, etc. are all defined by the underlying 
> platform.

Using Jini's JERI package, with Java, allows the transport to be defined 
arbirarily at deployment time.  That's an important aspect of JERI that keeps 
it 
from being platform anchored.  You can use WS, JRMP, JERI, MODBUS, MPEG4 or 
whatever interface you need to the realworld.  It doesn't have to be Java 
centric.

Jini provides the ability to create really performant SOAs with tools that 
already provide 2PC, security, async transport (using Javaspaces and related 
services) and other technologies that WS standards orgs and vendors are still 
working on.  And, I repeat, this is without excluding WS as part of your 
worldly 
interface set.

 > Some non-functional aspects can be externalized, such as
> Security, in the same way that WS-Security and WS-SecurityPolicy 
> externalize it within a Web Services model.

Security, in Jini, is covered by the Java security model.  The DynamicPolicy 
class, introduced in the Jini 2.0 APIs, allows you to create your own policy 
implementation that sources policy from whereever you need it from.  I use this 
feature to make it possible for a client to grant access to services 
dynamically.  An additional result is that you can place policy implementation 
into an exporter implementation so that your policy is independent of the 
service vendor.

> If you move to a remote invocations, as long as you stay within a 
> platform-specific model, such as .NET Enterprise Services or Java 
> RMI, things like transport bindings may still be defined or implied 
> by the platform.  

It's important to understand that Java has a plugable transport model in the 
Jini system.  It's not required to use a Java centric transport, at all.  It is 
a powerful choice, to be able to use mobile code, but its not the only choice 
you can make when using Java/Jini.  If you are not using Java, then the mobile 
code choices you have are limited in most cases to remedial capabilities with 
limited security control over the downloaded code (all or nothing in many 
cases).

The JERI stack, provides a much more secure model.  Here's some points to make 
sure you grasp with JERI.

The following are plugable, and provide the ability to substitute or amend 
implementations.

1.      endpoints - The software entitity that provides the external interface
        point for the service.  This would be a socket, a serial port, a USB
        device, a disconnectable path such as a file stored on a memory stick
        etc.  With interesting endpoints, you can implement services which might
        think that they are talking in realtime to a client which performs
        operations at a rate of one per month.
2.      Invocation layer - This is the point where transport is interfaced with
        encoding and transport of parameters and returned values.  This is where
        web services can be interfaced to a Jini service without the service
        needing to know that it is talking to a web service.  WSDL could be used
        to generate an invocation layer implementation for example.  Constraints
        on the transport and security systems utilized are typically asserted at
        this layer, but might be commonly known by the endpoint implementation
        as well.
3.      exporter - Combines the endpoint implementation and the invocation
        layer typically, into a software entity which provides the mechanism
        for making an object passed to it capable of being interacted with
        remotely, using the endpoint and invocation layer.  This is the point
        where a service can be interfaced to multiple external protocols.

 > CORBA moves into a more heterogeneous model, with
> CORBA IDL being more analogous to WSDL, but I think each new 
> description language has tackled the problem better than the 
> predecessors.

The question for me is whether it makes since to abstract this description with 
a manually created "description" which mirrors a machine readable interface 
defined by your implementation language.

> A very easy example to comprehend is the notion of side 
> effects.  If I have a "deposit" operation in my bank account 
> interface, I expect that it will increase my balance by the amount I 
> deposit.  If, however, it takes out $2.00 for a processing fee and 
> I'm not aware of that, it's a poorly defined interface.

/**
  *  This interface defines the ability to make a deposit into a
  *  particular Depositor.  It requires the use of the Currency
  *  type to specify the source of the funds to deposit as well
  *  as the source of any acceptable fee.
  */
public interface Depositor extends Remote {
        /**
         *  Make a deposit with indication of acceptible fee.
         *  @param amount the amount to be deposited
         *  @param fee the amount of fee willing to pay to make deposit
         *  @throw DepositFeeInsufficentException if the provided fee
         *      value is insufficient based on this Depositor's agreements
         *      or support for the indicated Currency source.
         *  @throw IOException if an error occurs accessing the Depositor or
         *      any resources related to the Depositor providing this service.
         *
        public double deposit( Currency amount, Currency fee )
                throws DepositFeeInsufficentException, IOException;
}

There are probably some other things to talk about.  This interface allows the 
users interface, GUI or otherwise, to get explicit information about the type 
of 
failure which might require the user to provide additional control.  On the 
other hand, if you have an arrangement that is well known, for fee costs, you 
can provide that fee, and not have to handle the exception as a user 
interaction, but rather as a notification that your agreement is no longer in 
place, or something else is amiss.

Interesting example, but not hard to come up with a solution for.

> I'm interested in what others have to say.  Now I'll go back and try 
> to help my wife figure out which button in the minivan is the rear 
> defroster versus the front defroster.  One button has a rectangular 
> window with wavy lines in it, one button has an arced window with 
> wavy lines in it.  Completely intuitive, right?

This is a really amazingly silly thing for me too.  Perhaps it's good that she 
doesn't have rearview mirror defrosters too!

Gregg Wonderly




 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/service-orientated-architecture/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to