Re: Java web services basic question
On Tue, 23 Sep 2008, eric.lloyd wrote:
In terms of distributed systems, I am a CORBA programmer, and so when
I'm given a problem, my mind immediately goes to how I would implement
it in CORBA. Web services seem similar (the WSDL is like an IDL, an
jUDDI is like the CORBA naming service, etc)
Yes, to a point. Web services is to CORBA as Linux is to BSD: newer, more
exciting, with huge industry buy-in, but not actually as good.
but I'm having difficulty figuring out how to instantiate two (or more)
web services that implement the same interface.
Web services are actually a lot more like RPC than CORBA. In particular,
there's no notion of component identity - a service is a component, not a
class of component of which there can be multiple instances which can be
created and manipulated at runtime. Asking how you could have multiple
instances of a web service is like asking how you could have multiple
instances of printf. Or of www.google.com/search.
That said, you can have multiple instances of a service - they'll sit at
different URLs, and have to be started up separately at the app server
level. If you can get used to thinking of a URL as being like an IOR, this
makes a certain amount of sense.
Now, for the system I'm working on, we need to have multiple 'instances'
of a service. For example (note this isn't the actual project
assignment), say there is a 'GPS_Service' web service with a simple
interface with two methods: getLocation(), and setLocation(point p). In
my 'application', I want to deploy 15 'instances' of GPS_Service, and
set and view their location independently.
Here's where my lack of knowledge hurts. From my point of view, I would
need 15 different java classes (i.e. GPS_Service0, GPS_Service1, etc)
and 15 different .aar files. Each .aar file would go into the
application server, and I would access each service at a different web
address.
You should be able to use the same code, and much of the same
configuration, but edit the part of the configuration that defines the URL
at which the service will be exported. I don't know Axis2 well enough to
say where that is, i'm afraid. A quick look at the docs suggests it might
be as simple as setting a name attribute to the service element in
services.xml (or, and i can't quite believe this, changing the name of the
aar file). That does mean deploying a separate aar for each instance, but
that's trivially done with a shell script or ant job or whatever.
In CORBA, this is much easier.
Yes. CORBA was invented by some very clever people.
Classes implement a CORBA interface, and your 'main' method can
instantiate as many 'GPS_Service' objects as it wants.
Cool, isn't it!
This seems to be because CORBA doesn't have an 'application' server
where the object is always running.
It does, actually - that's pretty much what the ORB is. Or possibly
tom
--
Know who said that? Fucking Terrorvision, that's who. -- D