Przedstawienie platformy J2EE

Java 2 Enterprise Edition




Grzegorz Kowalski, listopad 2001



"Unfortunately, no one can be...told what the J2EE is.
You have to see it for yourself."







Spis treści

Wstęp

Co to jest plataforma?

J2EE od wewnątrz

Najważniejsze koncepcje

Wielowarstwowość aplikacji
Komponentowy model programowania
Menadżer zasobów
Podział na role

Dlaczego w Javie?

Najważniejsze technologie

Podział ogólny

Interfejsy programowe (API)

Schemat procesu tworzenia aplikacji na platformę J2EE

Istniejące implementacje

Aktualna wersja specyfikacji

Kierunki rozwoju

Konkurencyjne rozwiązania

Adresy w sieci


Wstęp
Współczesne przedsiębiorstwa, aby się rozwijać, muszą poszerzać zakres swych usług, obniżać ich koszty i zapewniać wygodny dostęp do nich dla klientów, pracowników i dostawców. W typowej systuacji aplikacje realizujące te usługi muszą łączyć istniejące systemy informacyjne przedsiębiorstwa z nową funkcjonalnością biznesową, której odbiorcą jest liczna rzesza klientów. Wspomniane usługi muszą charakeryzować się:
  • Wysoką dostępnością, aby zaspokoić potrzeby współczesnego globalnego środowiska prowadzenia biznesu
  • Bezpieczeństwem, aby chronić prywatne dane użytkowników i dane przedsiębiorstwa
  • Niezawodnością i skalowalnością, aby zapewnić, że transakcje są przetwarzane w sposób kontrolowany
Dla programisty stającego przed zadaniem stworzenia takiej aplikacji powyższe wymagania mogą stanowić nie lada wyzwanie. Autentykacja i kontrola uprawnień użytkowników systemu, transakcyjność wykonywanych operacji, komunikacja między różnymi modułami systemu (często rozproszonymi), zarządzanie dostępem do trwałych archiwów danych - to tylko niektóre z mechanizmów, które należy zaimplementować. Ponieważ są to skomplikowane zadania programistyczne, a wraz rozwojem elektronicznego biznesu pojawiało się coraz większe zapotrzebowanie na aplikacje spełniające te wszystkie wymogi, powstała idea stworzenia czegoś, co teraz określa się terminem middleware.
Podejście to bazuje na pomyśle, żeby stworzyć warstwę oprogramowania rezydującą ponad systemem operacyjnym, odpowiedzialną za implementację zestawu mechanizmów, protokołów i interfejsów programistycznych, które są nieodzowne dla stworzenia zaawansowanego systemu informatycznego dla współczesnego przedsiębiorstwa prowadzącego działalność w sieci.
Istnienie takiej warstwy umożliwiłoby twórcy systemu pracę na wyższym poziomie abstrakcji i skupienie się na oprogramowaniu logiki aplikacji, bez angażowania się w skomplikowane mechanizmy niskopoziomowe. Już na pierwszy rzut oka widać wynikające z tego korzyści:
  • Uniknięcie ryzyka popełnienia błedów programistycznych w krytycznych mechanizmach systemu
  • Szybsze, tańsze i łatwiejsze projektowanie, programowanie, wdrażanie i utrzymanie aplikacji
  • Szansa na polepszenie jakości oprogramowania dzięki specjalizacji w tworzeniu middleware
  • Lepsza skalowalność i łatwiejsza integracja systemów dzięki standaryzacji interfejsów
Platforma J2EE firmy Sun Microsystems pozwala na zrealizowanie tych wszystkich założeń.
Ponieważ rozwinięcie akronimu (Java 2 Enterprise Edition) nieuchronnie nasuwa na myśl pytanie o związek J2EE z językiem Java, jeszcze przed opisem tej platformy zobaczmy, jak przebiegała ewolucja od powstania Javy do powstania J2EE.
  1. Pojawia się JDK; firma Sun jeszcze nie myśli o technologiach middleware
  2. Java okazuje się dobrym jezykiem oprogramowania strony serwera systemów działających w architekturze klient-serwer; powstają usługi nazw, katalogowe, zapewniania transakcyjności, pojawia się pierwsza specyfikacja EJB; problem - specyfikacje są słabo skorelowane, jest wiele niespójności i dwuznacznosci; różne wersje interfejsów pojawiają się niezależnie, brak między nimi zgodności; brak referencyjnej implementacji interfejsów programistycznych (API)
  3. Nowa koncepcja Sun'a - podział na 3 platformy (uporządkowane od najmniejszej):
    • j2me (java 2 platform micro edition) - bardzo ograniczona, dla urządzeń typu palmtopy i zegarki
    • j2se (java 2 platform standard edition) - JDK; grafika, I/O, itd.
    • j2ee (java 2 platform enterprise edition) - pełna platforma do tworzenia zaawansowanych aplikacji działających na serwerze
Co to jest platforma?
J2EE jest platformą dla złożonych, wielowarstowych, rozproszonych, wydajnych i skalowalnych aplikacji. Co to jednak znaczy platforma? J2EE to nie sprzęt komputerowy, ani żadne konkretne oprogramowanie. Jest to zbiór specyfikacji dotyczących powiązanych ze sobą technologii, które razem mają zapewnić dobrą realizację zadań wymienionych we wstępie. W szczególności wiele z nich określa wymagania odnośnie implementowanych interfejsów programistycznych. Rolę systemu zgodnego z J2EE można przedstawić w analogii do zadań systemu operacyjnego, który ma umożliwić procesom korzystanie z zasobów komputerowych i zarządzać ich działaniem w sposób wydajny i bezpieczny. System operacyjny odpowiada za stworzenie procesom abstrakcji sprzętu, natomiast oprogramowanie spełniające standardy J2EE pozwala programiście abstrahować od implementacji podstawowych usług, np. uwierzytelniania, komunikacji w rozproszonym środowisku, czy transakcyjności. Dzięki temu programista może skupić się wyłącznie na logice biznesowej tworzonego oprogramowania.
Fakt, że J2EE jest tylko zbiorem specyfikacji i nie narzuca żadnej konkretnej implementacji, prowadzi do otwartości systemów opartych na tej platformie i pozwala wybierać pomiędzy różnymi dostawcami oprogramowania zgodnego z J2EE.
J2EE od wewnątrz
Za skrótem J2EE kryje się wielka liczba pojęć, technologii, wymagań, ograniczeń i narzędzi. W styczniu tego roku ukazał się Proposed Final Draft specyfikacji - Java 2 Platform Enterprise Edition Specification w wersji 1.3. Jednak J2EE to nie tylko specyfikacja komponentowego modelu aplikacji rozproszonej. Na J2EE składają się cztery elementy:

J2EE Platformspecyfikacja platformy
J2EE Compatibility Test Suitezbiór testów umożliwiających weryfikację zgodności ze specyfikacją konkretnej implementacji J2EE
J2EE Reference Implementationdostarczona przez twórcę specyfikacji, firmę Sun Microsystems, wzorcowa implementacja specyfikacji
J2EE Blueprintszbiór wskazówek, preferowanych rozwiązań, wzorców projektowych wraz z propozycją konkretnego modelu rozproszonej, skalowalnej aplikacji

W dalszej części skupimy się na pierwszym z tych elementów.
Najważniejsze koncepcje
Wielowarstwowość aplikacji
Aplikacje J2EE są logicznie podzielone na warstwy. Każda warstwa odpowiada za inny zakres funkcjonalności systemu i może zawierać wiele komponentów. Najczęściej pod terminem "wielowarstwowy" (ang. multi-tiered) rozumie się 3 warstwy. Granice pomiędzy warstwami są oczywiście logiczne i mogą być ustanowione przez różne maszyny, procesy, bądź przedsiębiorstwa.
Wspomniany model 3-warstwowy pasuje do wzorca MVC (Model, View, controller), gdzie w kolejnych warstwach rezydują:

Warstwa prezentacji (View) aplikacje w Javie, aplety, serwlety, strony JSP
Warstwa logiki biznesowej (controller) komponenty EJB
Warstwa danych (Model) bazy danych, Enterprise Information Systems

Zaletą takiego podejścia jest możliwość podzielenia aplikacji na niezależne części, z których każda obejmuje oprogramowanie odpowiadające za konkretny fragment funkcjonalność całego systemu i może być rozwijana równolegle z pozostałymi. Żeby tworzone niezależnie komponenty oprogramowania chciały ze sobą współgrać, muszą pomiędzy nimi istnieć dobrze zdefiniowane interfejsy, a to właśnie daje platforma J2EE.



Komponentowy model programownia
Programowanie z wykorzystaniem komponentów realizuje dobrze znany sposób atakowania większych problemów określany jako "dziel i zwyciężaj". Komponent to kawałek kodu implementujący pewien zbiór interfejsów. Jest to fragment logiki programu, który sam nie stanowi aplikacji - nie może działać samodzielnie, a jest raczej 'klockiem', który można złożyć z innymi, aby powstała pełna aplikacja. Ideą stojącą za programowaniem komponentowym jest powtórne wykorzystanie kodu. Korzyści płynące z tworzenia aplikacji za pomocą komponentów to z pewnością:

- szybka konstrukcja oprogramowania
- mniejsze ryzyko popełnienia błędów programistycznych
- ułatwienie dla projektantów systemu, którzy mogą tworzyć modele o wyższym stopniu abstrakcji traktując komponenty jako 'czarne skrzynki'
- wyższa jakość tworzonych aplikacji dzięki tworzeniu dobrze udokumentowanym, wyspecjalizowanym komponentom dostarczanym przez niezależnych producentów

Aby można było tworzyć oprogramowanie bazujące na komponentach potrzebne są:
  • IDE - np. Borland JBuilder, Symantec Visual Cafe, Forte
  • kontener - czyli otoczka, w której działają komponenty. Kontener zapewnia środowisko wykonania oraz standardowe usługi, z których korzystają komponenty (np. dynamiczne tworzenie i kasowanie komponentów, zarządzanie transakcjami i zewnętrznymi zasobami, autoryzacja użytkowników). Dzięki istnieniu kontenerów programista komponentów nie musi się zajmować tymi funkcjami. Pomiędzy komponentami a kontenerami również zdefiniowany jest odpowiedni intefejs programistyczny.
  • Serwer aplikacyjny - w nim są umieszczone kontenery
  • Narzędzia do instalacji komponentów i ich konfiguracji

Menadżer zasobów
Dostęp do zewnętrznych zasobów danych organizowany jest wokół koncepcji tzw. menadżerów zasobów (ang. resource manager), która jest uogólnieniem idei stojącej za JDBC, czy JNDI. Serwer aplikacyjny korzysta z usług odpowiedniego sterownika, który, ipmlementując odpowiedni protokół komunikacyjny, umożliwia dostęp do zasobów konkretnego systemu przechowywania i archiwizacji danych (EIS). Specyfikacja J2EE connector architecture 1.0 opisuje ten standard.

Podział na role
Specyfikacja J2EE zakłada ścisły podział ról w obrębie procesu tworzenia aplikacji, co jest naturalną konsekwencją przyjęcia wielowarstwowego modelu opartego na komponentach.

J2EE Product Provider dostawca platformy programowej zgodnej ze specyfikacją J2EE
Application Component Provider programista tworzący komponenty
Application Assembler osoba odpowiedzialna za przygotowanie pliku EAR z dostarczonych komponentów
Deployer osoba wdrażająca aplikację
Administrator administrator aplikacji J2EE

Dlaczego w Javie?
Dlaczego to właśnie Java została wybrana jako język programowania aplikacji na platformę J2EE?
  • Jest znana bardzo wielu programistom na świecie
  • Jest przenośna
  • Ma mocny system typów, co znacznie podnosi niezawodność tworzonego oprogramowania
  • Jest dobrym językiem do programowania obiektowego, a cechy tego sposobu programowania (powtórne wykorzystanie kodu, dziedziczenie, oddzielenie interfejsu od implementacji, obsługa sytuacji wyjątkowych, komunikacja między oddzielnymi obiektami poprzez wysyłanie komunikatów) doskonale pasują do modelu aplikacji dla platformy J2EE
  • W momencie powstawania pierwszej specyfikacji J2EE było już opracowanych wiele API właśnie dla Javy
Najważniejsze technologie
W tym punkcie przedstawione będą technologie wykorzystywane w systemach zgodnych z J2EE, które realizują założenia opisane w punkcie J2EE od wewnątrz/Najważniejsze koncepcje.
Podział ogólny
Architektura J2EE opiera się na wielu technologiach, które można podzielić na 3 podstawowe kategorie:
  1. technologie komponentowe
    Platforma J2EE wspiera następujące komponenty: aplikacje kliencke, applety, komponenty WWW (serwlety i strony JSP) oraz komponenty EJB.
    Ze względu na miejsce wykonania kodu komponentów można je podzielić na:

    - komponenty strony klienta (applety i aplikacje w Javie)
    - komponenty strony serwera (pozostałe)

    Ze wzlgędu na charakter wykonywanych zadań można dokonać podziału na:

    - komponenty odpowiedzialne za interakcję z użytkownikiem (wszystkie oprócz EJB)
    - komponenty odpowiedzialne za logikę biznesową, stosujące skomplikowane algorytmy i przeprowadzające transakcje na dużych wolumenach (EJB)

    Dla appletów oraz normalnych programów w Javie do wykonania potrzebna jest wirtualna maszyna Javy. W odróżnieniu od nich komponenty WWW i komponenty EJB potrzebują czegoś więcej. Środowiskiem pracy dla tych komponentów są kontenery, które oddzielają je od klientów, jak również od zewnętrznych zasobów. Tego rodzaju pośrednictwo jest niezbędne do umożliwienia wykonywania kontenerowi jego zadań, a więc zarządzania transakcjami, zewnętrznymi zasobami, cyklem życia poszczególnych komponentów, dostępem do systemu oraz autoryzacją jego użytkowników. Kontenery implementowane są jako niezależne podsystemy w serwerze aplikacji, który stanowi jądro systemu zgodnego z J2EE. Serwer aplikacji wykonuje ogromną liczbę różnych zadań, których celem jest realizacja wszystkich wymagań stawianych zaawansowanym aplikacjom sieciowym (niezawodność, odporność na błędy, transakcyjność, bezpieczeństwo, wielodostępność, wydajność, load-balancing, itp.).
  2. komunikacja
    Ponieważ aplikacje tworzone na platformę J2EE są zwykle rozproszone, muszą być dostarczone odpowiednie protokoły zapewniające komunikację między poszczególnymi elementami systemu.

    • HTTP, HTTPS - typowym klientem systemu J2EE jest przeglądarka WWW
    • JDBC, JNDI - dostęp do baz danych
    • RMI/RMI-IIOP - dostęp do komponentów EJB, które są dystrybuowalne
  3. usługi
    Ze względu na to, że aplikacje J2EE często muszą integrować wiele źródeł informacji (bazy danych, systemy typu ERP, CRM, inne aplikacje isntniejące w firmie), serwer aplikacyjny musi oferować jednolity sposób dostępu do tych zasobów. Tego typu usługi definiuje specyfikacja J2EE Connector Architecture 1.0.

Interfejsy programowe
Aby aplikacje zbudowane w modelu J2EE mogły działać zgodnie z podanymi wytycznymi, potrzebnych jest wiele interfejsów programowych (API). Dostawca systemu zgodnego z J2EE zapewnia ich implementację, a twórca komponentów musi ich przestrzegać, co wiąże się także z pewnymi ograniczeniami, np. pisząc komponenty EJB nie można korzystać z bibliotek natywnych, tworzyć i synchronizować wątków, korzystać z dostępu do plików poprzez bibliotekę java.io, ani korzystać z obiektów klasy ServerSocket. Kilka z tych interfejsów występuje już w J2SE (Java 2 Platform Standard Edition).

Poniżej znajdują się krótkie opisy interfejsów, o których jest mowa w specyfikacjie J2EE 1.3.

Java IDL API Java IDL pozwala na tworzenie aplikacji obiektowych komunikujących się przez CORBA.
JDBC Core API JDBC jest protokołem dostępu do relacyjnych baz danych.
RMI-IIOP API Protokół RMI pozwala na komunikację międzyprocesową. RMI-IIOP jest jego przenośnym rozszerzeniem bazującym na protokole IIOP (Internet Inter-ORB Protocol), używanym przez aplikacje wykorzystujące standard CORBA.
JNDI API JNDI pozwala na zlokalizowanie komponentu lub innego zasobu w sieci.
JDBC 2.0 Extension Ten interfejs programistyczny zawiera wsparcie dla operacji na zbiorach krotek, nazywania połączeń z wykorzystaniem JNDI, zarządzania pulą połączeń i obsługi rozproszonych transakcji.
EJB 2.0 Standard EJB definiuje sposób pisania komponentów strony serwera i ustanawia standardowy interfejs pomiędzy komponentami i serwerem aplikacyjnym.
Servlets 2.3 Specyfikacja Servlets 2.3 definiuje zasady programowania serwletów.
JSP 1.2 Specyfikacja Java Server Pages określa zasady budowania komponentów WWW bazujących na osadzaniu kodu języka Java w dokumentach HTML.
JMS 1.0 Java Messaging Service pozwala na asynchroniczną komunikację pomiędzy rozproszonymi obiektami.
JTA 1.0 Specyfikacje Java Transaction API i Java Transaction Service oferują komponentom niezawodne usługi transakcyjne.
JavaMail 1.2 JavaMail pozwala na wysyłanie poczty elektronicznej z poziomu aplikacji napisanej w Javie w sposób niezależny od platformy oraz używanych protokołów dostarczania poczty. JavaMail jest interfejsem zależnym od JAF.
JAF 1.0 Specyfikacja Java Beans Activation Framework określa zadania tego interfejsu jako: określanie typu dowolnych danych, enkapsulacja dostępu do danych, pobieranie zestawu operacji możliwych do wykonania na określonym typie danych.
JAXP 1.1 Java API for XML Parsing obsługuje interfejsy SAX i DOM parserów XML, jak również wspiera obsługę procesorów transformacji XSLT.
Connector 1.0 Ten interfejs pozwala na integrację aplikacji J2EE z różnymi systemami EIS.
JAAS 1.0 Za pomocą Java Authentication and Authorization Service można przeprowadzić autentykację użytkowników i kontrolować ich prawa dostępu do aplikacji. Wykorzystywany jest do tego mechanizm podobny do PAM (Pluggable Authentication Modules).

Intuicje odnośnie opisanych mechanizmów w architekturze J2EE dobrze wspomaga poniższy obrazek

Schemat procesu tworzenia aplikacji na platformę J2EE
Aplikacje zgodne ze specyfikacją J2EE są odpowiednio pakowane do pliku typu EAR (Enterprise Archive). Plik taki ma dobrze określoną strukturę, a jego zawartość opisywana jest przez deskryptor pliku EAR. Pojedynczy plik EAR jest samodzielnym, zamkniętym pakietem, który stanowi kompletną aplikację gotową do uruchomienia na dowolnym systemie zgodnym z J2EE.
Plik EAR zwykle składa się z kilku modułów, które zawierają komponenty. Podobnie jak plik EAR jest opisany przez własny deskryptor (zwany deskryptorem aplikacji), tak zawartość każdego modułu jest opisana jego deskryptorem. Każdy moduł może dać się samodzielnie uruchomić, nie jest do tego potrzebny kontekst ani deskryptor aplikacji.

W typowym przypadku aplikacja J2EE składa się z następujących modułów:
  • Modułów EJB w postaci archiwów JAR (Java Archive), które zawierają komponenty EJB (sesyjne, trwałe oraz komunikacyjne) razem z właściwym deskryptorem. Specyfikacja EJB 2.0 określa strukturę i zawartość takiego modułu.
  • Modułów WWW w postaci archiwów WAR (Web Archive), które zawierają serwlety, JSP, strony HTML i inne zasoby WWW razem z właściwym deskryptorem. Specyfikacja Servlets 2.3 określa strukturę i zawartość takiego modułu.
  • Modułów adapterów zasobów w postaci plików RAR (Resource Archive)

Rozwój typowej aplikacji J2EE odbywa się według następującego schematu postępowania:
  1. Implementacja poszczególnych komponentów: serwletów, stron JSP, komponentów EJB
  2. Spakowanie komponentów w odpowiednie moduły i utworzenie dla nich deskryptorów
  3. Spakowanie modułów komponentowych do jednego pliku EAR i utworzenie dla niego deskryptora aplikacji, co razem daje kompletny program na platformę J2EE
  4. Instalacja aplikacji w postaci pliku EAR w serwerze aplikacji
  5. Uruchomienie aplikacji za pomocą narzędzia (deployment tool) dostarczonego przez producenta serwera aplikacji, na co składa się
    1. odczytanie deskryptora aplikacji, co daje informacje o zawartych modułach
    2. odczytanie deskryptora każdego modułu
    3. instalacja poszczególnych komponentów w odpowiednich kontenerach
  6. Dopasowanie przez administratora systemu wszystkich paramtrów aplikacji (polityka bezpieczeństwa, zachowanie transakcyjne systemu) do istniejącego środowiska IT

Wszystkie wspomniane deskryptory zapisane są w odpowiednim dialekcie języka XML.

Oto przykładowy deskryptor aplikacji

Widać na nim, że aplikacja składa się z jednego modułu WWW (petstoreadmin.war) oraz jednego modułu EJB (petstoreadminEjb.jar).
Istniejące implementacje
  • Bea Weblogic Server
  • HP Bluestone Total-e-Server
  • iPlanet Application Server
  • IBM Websphere Application Server
  • IONA iPortal Application Server
  • Oracle 9i Application Server
  • Macromedia JRun Server
  • SilverStream Application Server
  • Sybase EAServer
  • TogetherSoft ControlCenter
  • Trifork Enterprise Application Server
  • Ars Digita Community System
  • Borland AppServer
  • Java 2 SDK, Enterprise Edition
Aktualna wersja specyfikacji
Aktualna specyfikacja J2EE ma numer 1.3.
Kierunki rozwoju
Biorąc pod uwagę, że celem sformułowania specyfikacji J2EE jest stworzenie pełnego środowiska dla wykonywania rozproszonych aplikacji, widać, że jest jeszcze wiele do zrobienia. Autorzy specyfikacji wskazują aktualnie na następujące kierunki rozwoju:
  • Większe wsparcie dla technologii XML (XML Data Binding API), tym bardziej, że aktualnie do określania struktury dokumentu wykorzystywany jest tylko DTD, a nie ma możliwości użycia XML Schema
  • Prace nad rozwojem SPI (Service Provider API), czyli interfejsem dla producentów EIS (Enterprise Information System) przeznaczonym do pisania odpowiednich sterowników. Pierwszy krok w tym kierunku został już poczyniony w postaci J2EE Connector Architecture
  • Ujednolicenie zarządzania systemami opartymi na J2EE. Przyszła specyfikacja ma zawierać opis tzw. Management APIs, czyli standardowych interfejsów do zarządzania aplikacjami oraz serwerem aplikacyjnym
  • Prace nad protokołem JNLP (Java Network Launch Protocol) definiującym mechanizm wdrożenia aplikacji napisanej w Javie na serwerze i uruchomienia jej z poziomu klienta
  • Rozwój JDBC Rowsets, czyli standardowego sposobu przesyłania danych pochodzących z tabel pomiędzy zdalnymi komponentami rozproszonej aplikacji J2EE
  • Opracowanie lepszych interfejsów programistycznych do zapewniania bezpieczeństwa
Konkurencyjne rozwiązania
Rozwiązania konkurencyjne dla J2EE opracowywane są także przez firmę Microsoft. Na samym początku trzeba już jednak wskazać podstawową różnicę w podejściu Sun'a i Microsoftu do tego problemu. J2EE jest specyfikacją, czyli sformułowaniem zestawu warunków, które muszą być spełnione przez każdą implementację, podczas gdy Microsoft oferuje gotowe rozwiązania w postaci własnych aplikacji.

Propozycje Microsoftu to:
  • Windowsw NT + DCOM + MS Message Queue + MS Transaction Server + MS Wolfpack + MS SQL Server + IIS + ASP + MS Management Console (starsze rozwiązanie)
  • .Net (nowe rozwiązanie)

Oczywistą konsekwencją zdecydowania się na rozwiązanie Microsoftu jest automatyczna rezygnacja z możliwości wyboru pomiędzy dostawcami elementów platformy.

Ze względu na brak praktycznego doświadczenia pozwalającego na dokonane porównania J2EE z Microsoft.Net pozwolę sobie zacytować kilka fragmentów z artykułu "J2EE vs. Microsoft.NET A comparison of building XML-based web services", Chad Vawter and Ed Roman June 2001.

"The shared vision between both J2EE and .NET is that there is an incredible amount of 'plumbing' that goes into building web services, such as XML interoperability, load-balancing, and transactions. Rather than writing all that plumbing yourself, you can write an application that runs within a container that provides those tricky services for you."

"Microsoft.NET offers language-independence and language-interoperability. This is one of the most intriguing and fundamental aspects of the .NET platform. A single .NET component can be written, for example, partially in VB.NET, the .NET version of Visual Basic, and C#, Microsoft's new object-oriented programming language."

"J2EE offers several features that accelerate time-to-market which are not found in .NET. For example, state management services enable developers to write less code and not worry about managing state, resulting in a higher degree of rapid application development."

"Microsoft.NET offers a variety of time-to-market features not found in J2EE as well. Most notably, ASP.NET is independent of client device, and allows for user interfaces to be rendered to alternative user interfaces without rewriting code. Microsoft also offers Queued Components which are superior to MessageDriven Beans. It should be noted here that Microsoft has tried to simplify server-side programming greatly by removing support for features found in traditional enterprise applications, such as stateful servers and simple transactions. If developers need to go outside this box, their code must be made to be non-managed and reside outside the .NET Framework rather than take advantage of it. Microsoft also provides business process management and E-Commerce capabilities, which are available in some J2EE implementations but not all."

"In conclusion, we feel the ability to achieve rapid application development offered by both J2EE and .NET is definitely not equal. It is, however, comparable."

".NET provides a fairly complete solution from a single vendor--Microsoft. This solution may lack some of the higher end features that J2EE solutions offer, but in general, the complete web services vision that Microsoft will be providing is equal in scope to that of a larger J2EE vendor."

"Arguments supporting both platforms

  • Regardless of which platform you pick, new developers will need to be trained (Java training for J2EE, OO training for .NET)
  • You can build web services today using both platforms
  • Both platforms offer a low system cost, such as jBoss/Linux/Cobalt for J2EE, or Windows/Win32 hardware for .NET.
  • Both platforms offer a single-vendor solution.
  • The scalability of both solutions are theoretically unlimited.

Arguments for .NET and against J2EE

  • .NET has Microsoft's A-team marketing it
  • .NET released their web services story before J2EE did, and thus has some mind-share
  • .NET has a better story for shared context today than J2EE
  • .NET has an awesome tool story with Visual Studio.NET
  • .NET has a simpler programming model, enabling rank-and-file developers to be productive without shooting themselves in the foot
  • .NET gives you language neutrality when developing new eBusiness applications, whereas J2EE makes you treat other languages as separate applications
  • .NET benefits from being strongly interweaved with the underlying operating system

Arguments for J2EE and against .NET

  • J2EE is being marketed by an entire industry
  • J2EE is a proven platform, with a few new web services APIs. .NET is a rewrite and introduces risk as with any first-generation technology
  • Only J2EE lets you deploy web services today
  • Existing J2EE code will translate into a J2EE web services system without major rewrites. Not true for Windows DNA code ported to .NET.
  • .NET web services are not interoperable with current industry standards. Their BizTalk framework has proprietary SOAP extensions and does not support ebXML.
  • J2EE is a more advanced programming model, appropriate for well-trained developers who want to build more advanced object models and take advantage of performance features
  • J2EE lets you take advantage of existing hardware you may have
  • J2EE gives you platform neutrality, including Windows. You also get good (but not free) portability. This isolates you from heterogeneous deployment environments.
  • J2EE has a better legacy integration story through the Java Connector Architecture (JCA)
  • J2EE lets you use any operating system you prefer, such as Windows, UNIX, or mainframe. Developers can use the environment they are most productive in.
  • J2EE lets you use Java, which is better than C# due to market-share and maturity. According to Gartner, there are 2.5 million Java developers. IDC predicts this will grow to 4 million by 2003. 78% universities teach Java, and 50% of universities require Java.
  • We would not want to use any language other than C# or Java for development of new mission-critical solutions, such as a hacked object-oriented version of C, VB, or COBOL.
  • We are finding most ISVs and consulting companies going with J2EE because they cannot control their customers' target platforms. We believe this application availability will result in J2EE beginning to dominate more and more as time goes on.

In conclusion, while both platforms will have their own market-share, we feel most customers will reap greater wins with J2EE. We feel the advantages outweigh those offered by Microsoft.NET. That is our preferred architecture, and we stand behind it."

Adresy w sieci
Poniżej zamieściłem kilka adresów, których odwiedzenie szczerze polecam. Informacje tam zawarte były dla mnie nieocenioną pomocą przy zapoznawaniu się z platformą J2EE oraz pisaniu tego artykułu.

J2EE Blueprints kliknij
J2EE Frequently Asked Questions kliknij
J2EE Glossary kliknij
J2EE Tutorial kliknij
Web Services and Java(TM) technology kliknij
J2EE vs. Microsoft.Net kliknij