views:

49

answers:

1

Using a typical JEE framework, how do I develop and deploy a service that can be called as a web service (with a WSDL interface), be invoked via JMS messages, or called directly from another service in the same container?

Here's some more context:

Currently I am responsible for a service (let's call it Service X) with the following properties:

  • Interface definition is a human readable document kept up-to-date manually.
  • Accepts HTTP form-encoded requests to a single URL.
  • Sends plain old XML responses (no schema).
  • Uses Apache to accept requests + a proprietary application server (not servlet or EJB based) containing all logic which runs in a seperate tier.
  • Makes heavy use of a relational database.
  • Called both by internal applications written in a variety of languages and also by a small number of third-parties.

I want to (or at least, have been told to!):

  • Switch to a well-known (pref. open source) JEE stack such as JBoss, Glassfish, etc.

  • Split Service X into Service A and Service B so that we can take Service B down for maintenance without affecting Service A. Note that Service B will depend on (i.e. need to make requests to) Service A.

  • Make both services easier for third parties to integrate with by providing at least a WS-I style interface (WSDL + SOAP + XML + HTTP) and probably a JMS interface too. In future we might consider a more lightweight API too (REST + JSON? Google Protocol Buffers?) but that's a nice to have.

Additional consideration are:

  • On a smaller deployment, Service A and Service B will likely to running on the same machine and it would seem rather silly for them to use HTTP or a message bus to communicate; better if they could run in the same container and make method calls to each other.

  • Backwards compatibility with the existing ad-hoc Service X interface is not required, and we're not planning on re-using too much of the existing code for the new services.

  • I'm happy with either contract-first (WSDL I guess) or (annotated) code-first development.

Apologies if my terminology is a bit hazy - I'm pretty experienced with Java and web programming in general, but am finding it quite hard to get up to speed with all this enterprise / SOA stuff - it seems I have a lot to learn! I'm also not very used to using a framework rather than simply writing code that calls some packages to do things.

I've got as far as downloading Glassfish, knocking up a simple WSDL file and using wsimport + a little dummy code to turn that into a WAR file which I've deployed.

A: 

Page 2 of this article: Lean service architectures with Java EE 6 talks about using the Facade pattern to expose a service to both remote and local users. I'm not familiar with using JMS, so I'm not sure how that would fit in.

Perry Longcross
Thanks Perry, was hoping for a little more detail but at least I now know what to search for!
Kevin Egham