All of these components and all of these solutions are
built on exposed services, APIs, and they can be exposed in a variety
of ways on how to call them, such as through webservices, http, locally,
and so on. This is a service-based architecture and everything is
exposed for you to use with an external system or to integrate with
any external system.
An XAPI can be invoked in a number of ways, including:
- http/https
-
Used for when making a call through one of our exposed servlets.
- local
-
(using direct access to the database through our entity classes)
- Typically used for backend batch processing, such as agents or the
application itself.
- Entity Java™ Beans (EJB)
-
XAPIs can be exposed through entity Java bean wrappers. These can be either EJB
2 or EJB 3 (different spec versions), depending upon the exact stack
(as in appserver). One or both of these is available.
- WebServices
-
- Simple Web Services
- Webservice wrappers around EJB wrappers around our XAPI. These
are an old deprecated way of exposing webservices. They have the disadvantage
of not being "fully self describing". This is in contrast to the spirit
of webservices. In webservices, the WSDL document is intended to provide
all the information you would need to call an API.
- Complex Web Services
- also referred to as JAX-WS. These were created to resolve the
issues with the older style simple/ejb based webservices. They are
based on JAX-B and JAX-WS technologies. These technologies make it
so that you can build client code off WSDL that explicitly forces
you to use only what is available on the service and also provides
information to client developers that allows them to force passing
all required attributes and only data that is reasonable for a field.
For instance, the WSDL might include information that a given field
is a numeric field that can have two digits after the decimal point.
Services include the following:
- XML-based
- All exposed services use XML as input and return XML as their
output.
- Stateless
- All exposed services can be distributed and executed independently
across a cluster of servers.
- No state information is required to be carried between one or
more service calls.
- Granular
- All functionality exposed as a service, not just select functionality.
- Protocol independent
- Any client, from any where, at any-time.