Java web services basic question

E

eric.lloyd

Hi all,

I'm new to web services programming, and I'm having trouble getting my
head around a few conceptual ideas about web services. I'm in a
graduate class right now where our project needs to use web services
to create a distributed system. We're using Axis2 and jUDDI for
development.

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) but I'm having difficulty
figuring out how to instantiate two (or more) web services that
implement the same interface.

From the simple 'hello, world' web services I've done, I have created
a java class, compiled it, packaged it into a .aar, and deployed tye
aar using Axis2 on Tomcat, my application server (which somehow
creates the WSDL file - I'm not exactly sure how that happens either).
From there, it's simple to write a client to connect to the web
service, which seems to always be running in the application server.

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.

In CORBA, this is much easier. Classes implement a CORBA interface,
and your 'main' method can instantiate as many 'GPS_Service' objects
as it wants. This seems to be because CORBA doesn't have an
'application' server where the object is always running.

Does anyone have any suggestions for me, or does anyone have an
example of what I'm trying to do?

Thanks,
Eric
 
T

Tom Anderson

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
 
E

eric.lloyd

Tom,
Thanks for all the information - I really appreciate all of the
comparisons between web services and CORBA you provided. I'll keep
poking around with Axis, but thanks for pointing me in the right
direction!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top