Before you consider which technical options apply to creating solutions that can interoperate between Microsoft .NET and Java 2 Enterprise Edition (J2EE) ” or buy products for creating such solutions ”it is vital that you first consider how data will be passed between the tiers outlined in Chapter 2, "Business Requirements for Interoperability," and what types of data you'll likely encounter. With any of the requirements presented in the previous chapter, data will always need to pass between at least some of the tiers on different platforms.
For example, the first scenario presented in Chapter 2 had a business requirement for a new presentation tier in Microsoft ASP.NET that called a business tier written for J2EE, as shown in Figure 3.1.
Imagine that an Enterprise Java Bean (EJB) in the J2EE business tier exposes a method that will be called by the ASP.NET tier. In a production system, the data returned by the EJB could be relatively complex and probably goes beyond the prototypical "Hello World" example. (Data types will be defined shortly.)
When various vendor implementations of Java Web services were released, many came with interoperability samples to show how they could interoperate with .NET. When run, these samples passed a "Hello World" string or another primitive data type between code written in both Java and .NET. Although this was impressive in sales presentations, very few production systems simply pass "Hello World" between tiers, and in such cases, the data tends to be much more complex. When customers used these early implementations to try building robust systems, many found it impossible to pass the types of data that they wanted to.
As you look at some of the options for achieving interoperability in this chapter ”options that are not necessarily specific to Web services ”you'll find that things have progressed considerably since the days of those early implementations. You'll also find that with the technical options covered in this chapter, exchanging complex data between .NET and J2EE has become more of a reality. However, some caveats for exchanging data between the two platforms still exist, which makes data exchange one of the major challenges of achieving interoperability.