Lots of Java's enterprise applicability has to do with Enterprise
JavaBeans, but the usefulness of the language extends far beyond
multi-tiered client-server applications with persistent storage
mechanisms at their back ends. The Java Telephony API (JTAPI) is
becoming increasingly important as organizations work toward combining
their voice and data communications onto a single network
infrastructure.
By putting voice and data on one network, even if it's just internally
(i.e., inter-site traffic still goes over the public switched telephone
network), significant savings in cost and complexity -- they're one and
the same, really -- can be realized. JTAPI is nicely put together, and
is robust enough that many big-name companies are using it. JTAPI is
used particularly frequently with Voice-over-IP solutions.
JTAPI is concerned with call control, which is to say not the actual
encoding and decoding of voice but rather the process of establishing a
call, maintaining it as long as its parties remain engaged, and tearing
it down when it's done. Call control also has to do with special
connection tricks like conferencing multiple parties together and
transferring a call from one party to another.
JTAPI also supports a set of events that are useful to developers of
applications that need to be integrated with telephones. A Customer
Relationship Management (CRM) application, for example, might need to
know where a particular call was directed so as to pop the appropriate
record on the answering party's workstation. A voicemail application
could use JTAPI events to detect "ring out" on a telephone and grab the
call for recording.
In Java, JTAPI is encoded in the javax.telephony.* packages. It provides
for the instantiation of a Provider object (representing the switch that
connects endpoints), an Address object (representing a termination point
identifier -- a phone number, in other words), a Call object
(representing a phone call itself), a Connection object (a connection is
the termination of a call at some station -- a Call usually has two or
more associated Connections). Once you have a call, you can use such
methods as connect() and disconnect() to set up and tear down a voice
link.