What lies behind Web services? Some say the answer depends on the power of
the language used in the implementation, in addition to known standards like
XML, SOAP, and WSDL. Developing Web services is hard since incorrect use of
the language can cause subtle and pernicious errors. What patterns and idioms
should we use for simplifying the development process?
In this first of two articles, I describe some of the proposed changes to
Java and show how they work together to make Java technology a more
expressive language for Web services development. In a later article I'll use
the Java Web Services Developer Pack (JWSDP 1.3), JAX-RPC 1.1 with its
improved schema binding, and the architecture for Basic Profile 1.0, to
demonstrate how to design Web services that perform well,... (more)
In the first article of this series (WSJ, Vol. 3, issue 12), I described
generic Java and examined the issues involved in supporting variant generic
types in Java. That article also explained how generic variant types increase
the readability, maintainability, and safety of our code.
I examined the implications of using variance annotations in class and
interface type parameters for Web s... (more)
Java was designed to have all of the best features of existing languages.
However, Java has no concept of asynchronous behavior. This is the main
reason the threading mechanism is so important and that concurrent
programming techniques are evolving quickly to the point where known
patterns, whose behaviors are well understood, will become an integral part
of the common Java environment.
... (more)
Despite extensive development over many years and significant demonstrated
benefits, the object-oriented paradigm remains poorly formalized. Several
concurrent object-oriented languages have been designed and implemented based
on the concurrent object model. However, upon attempting to apply formal
techniques to a significant application, several well known shortcomings
actually impeded ... (more)
Java's support for concurrency is sufficient enough to achieve a wide range
of desired results. While the primitives provided are very powerful, they can
also be easily misused and may lead to unpredictable behavior. It is well
known that in a multithreaded environment, due to the lack of mature tools
available, the debugging process could easily modify the state of the program
being deb... (more)