java.sun.com/javaone/sf
| 2004 JavaOneSM
Conference | Session TS-26141
Jini™ Network
Technology-Enabled
Service-Oriented
A...
| 2004 JavaOneSM
Conference | Session TS-26142
Goal
Increase your understanding of Jini™
network technology distributed co...
| 2004 JavaOneSM
Conference | Session TS-26143
Orbitz’s Commitment to
Jini™ Network Technology
Or why am I listening to yo...
| 2004 JavaOneSM
Conference | Session TS-26144
Agenda
Introduction
Orbitz Architecture
Jini™ Technology Benefits
Distribut...
| 2004 JavaOneSM
Conference | Session TS-26145
Agenda
Introduction
Orbitz Architecture
Jini™ Technology Benefits
Distribut...
| 2004 JavaOneSM
Conference | Session TS-26146
Orbitz Overview
• Founded in 2000 by 5 leading airlines
• Site launched in ...
| 2004 JavaOneSM
Conference | Session TS-26147
2001
Orbitz
8%
Expe
dia
31%
Other
28%
Travel
ocity
33%
Rapidly Approaching ...
| 2004 JavaOneSM
Conference | Session TS-26148
Architectural Drivers
• Low-cost distributor
• Speed to market is critical
...
| 2004 JavaOneSM
Conference | Session TS-26149
Why Use Jini™ Network Technology?
• Enables automatic failover and recovery...
| 2004 JavaOneSM
Conference | Session TS-261410
Agenda
Introduction
Orbitz Architecture
Jini™ Technology Benefits
Distribu...
| 2004 JavaOneSM
Conference | Session TS-261411
Orbitz Architecture
Mile-high view
Presentation /
State / Persistence
Weba...
| 2004 JavaOneSM
Conference | Session TS-261412
Supplier Link
Single host system (i.e. AA.com/NWA.com)
| 2004 JavaOneSM
Conference | Session TS-261413
SLONEGOrbitz.com
WebLogic
App Server
ONEG
Server
Logging
Service
Wspan
AA
...
| 2004 JavaOneSM
Conference | Session TS-261414
ONeG—Design Decisions
• Client could have contacted host specific
services...
| 2004 JavaOneSM
Conference | Session TS-261415
High-Level Architecture Diagram
Novo System
(incl. orbitz.com
AA
Hosting
S...
| 2004 JavaOneSM
Conference | Session TS-261416
The General Idea
Combine common set of objects, service
interfaces and Jin...
| 2004 JavaOneSM
Conference | Session TS-261417
The General Idea (Cont.)
• Common objects
─AIRPORT
─CARRIER
• Service inte...
| 2004 JavaOneSM
Conference | Session TS-261418
The General Idea (Cont.)
• Response (and objects contained) are
core objec...
| 2004 JavaOneSM
Conference | Session TS-261419
Let’s See Some Code!
• Startup
ClientStarter.start();
• Shutdown
ClientSta...
| 2004 JavaOneSM
Conference | Session TS-261420
Say What? Show Me a Picture….
req = OrbitzFactory.get(FooRequest);
req.set...
| 2004 JavaOneSM
Conference | Session TS-261421
Let’s See More Code!
• Startup
ServerStarter.start();
SampleService ss = n...
| 2004 JavaOneSM
Conference | Session TS-261422
Let’s See More Code!
• Shutdown
UnicastRemoteObject.unexport(ss, false);
j...
| 2004 JavaOneSM
Conference | Session TS-261423
Agenda
Introduction
Orbitz Architecture
Jini™ Technology Benefits
Distribu...
| 2004 JavaOneSM
Conference | Session TS-261424
Jini™ Technology Benefits
• Designed to expect network failure
(not ignore...
| 2004 JavaOneSM
Conference | Session TS-261425
Jini™ Technology Benefits
• LookupCache and
ServiceDiscoveryManager use ra...
| 2004 JavaOneSM
Conference | Session TS-261426
Jini™ Technology Benefits
• Capacity is directly related to the number of
...
| 2004 JavaOneSM
Conference | Session TS-261427
Jini™ Technology Benefits
• Easy to publish a service
• Easy to find a ser...
| 2004 JavaOneSM
Conference | Session TS-261428
Agenda
Introduction
Orbitz Architecture
Jini™ Technology Benefits
Distribu...
| 2004 JavaOneSM
Conference | Session TS-261429
Distributed Computing Pitfalls
• We don’t use remote objects
• No way to t...
| 2004 JavaOneSM
Conference | Session TS-261430
Distributed Computing Pitfalls
• Make DGC interval longer or disable
expli...
| 2004 JavaOneSM
Conference | Session TS-261431
Distributed Computing Pitfalls
• Contributed implementation designed to wa...
| 2004 JavaOneSM
Conference | Session TS-261432
Distributed Computing Pitfalls
• Longer lease times
• Custom implementatio...
| 2004 JavaOneSM
Conference | Session TS-261433
Distributed Computing Pitfalls
• If a machine gets slow, random selection ...
| 2004 JavaOneSM
Conference | Session TS-261434
Distributed Computing Pitfalls
• Switch from sync. calls to async so a
pus...
| 2004 JavaOneSM
Conference | Session TS-261435
Distributed Computing Pitfalls
• LookupCache uses event notification to
ke...
| 2004 JavaOneSM
Conference | Session TS-261436
Distributed Computing Pitfalls
• Custom LookupCache that doesn’t use
event...
| 2004 JavaOneSM
Conference | Session TS-261437
Distributed Computing Pitfalls
• Coarser grained services
─Group services ...
| 2004 JavaOneSM
Conference | Session TS-261438
Jini™ and J2EE™
• Have Jini environment, but want to
introduce some J2EE™ ...
| 2004 JavaOneSM
Conference | Session TS-261439
Agenda
Introduction
Orbitz Architecture
Jini™ Technology Benefits
Distribu...
| 2004 JavaOneSM
Conference | Session TS-261440
What’s Next?
• JERI
─Disable distributed garbage collection
─Plugable tran...
| 2004 JavaOneSM
Conference | Session TS-261441
Let’s See More Code!
• Startup
ServerStarter.start();
SampleService ss = n...
| 2004 JavaOneSM
Conference | Session TS-261442
Let’s See More Code! (Cont.)
• Shutdown
e.unexport(stub);
jm.terminate();
...
| 2004 JavaOneSM
Conference | Session TS-261443
What’s Next? (Cont.)
• If Jini services use downloaded code,
why can’t all...
| 2004 JavaOneSM
Conference | Session TS-261444
What’s Next? (Cont.)
• Perhaps change from sync-client-push
to async-serve...
| 2004 JavaOneSM
Conference | Session TS-261445
Agenda
Introduction
Orbitz Architecture
Jini™ Technology Benefits
Distribu...
| 2004 JavaOneSM
Conference | Session TS-261446
Summary
• Try Jini™ services its:
─A great way for distributed application...
| 2004 JavaOneSM
Conference | Session TS-261447
For More Information
• http://www.orbitz.com/
• http://www.jini.org/
─Stro...
| 2004 JavaOneSM
Conference | Session TS-261448
Q&A
48
java.sun.com/javaone/sf
| 2004 JavaOneSM
Conference | Session TS-261449
Jini™ Network
Technology-Enabled
Service-Oriented
...
Upcoming SlideShare
Loading in …5
×

TS-2614 - Jini™ Network Technology-Enabled Service-Oriented Architecture, A Low-Cost Alternative to Enterprise JavaBeans™ (EJB™) Architecture

677 views
510 views

Published on

Presentation Leon Chism & I gave at 2004 JavaOne conference

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
677
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

TS-2614 - Jini™ Network Technology-Enabled Service-Oriented Architecture, A Low-Cost Alternative to Enterprise JavaBeans™ (EJB™) Architecture

  1. 1. java.sun.com/javaone/sf | 2004 JavaOneSM Conference | Session TS-26141 Jini™ Network Technology-Enabled Service-Oriented Architecture Leon Chism/Steve Hoffman Chief Internet Architect/Engineering Fellow Orbitz www.orbitz.com A Low-Cost Alternative to Enterprise JavaBeans™ (EJB™) Architecture
  2. 2. | 2004 JavaOneSM Conference | Session TS-26142 Goal Increase your understanding of Jini™ network technology distributed computing architectures, how they can facilitate competitive advantage, and how they can be used to replace/augment more expensive alternatives.
  3. 3. | 2004 JavaOneSM Conference | Session TS-26143 Orbitz’s Commitment to Jini™ Network Technology Or why am I listening to you? • Orbitz runs over 1300 Jini™ services used by over 300 client VMs • Orbitz’ Jini™ network technology-based architecture powers Orbitz.com, AA.com and NWA.com, making it one of the highest-volume processors of airline tickets • Jini™ services have achieved 99+% uptime (best uptime of all sub-systems at Orbitz)
  4. 4. | 2004 JavaOneSM Conference | Session TS-26144 Agenda Introduction Orbitz Architecture Jini™ Technology Benefits Distributed Computing Pitfalls What’s Next? Wrap up
  5. 5. | 2004 JavaOneSM Conference | Session TS-26145 Agenda Introduction Orbitz Architecture Jini™ Technology Benefits Distributed Computing Pitfalls What’s Next? Wrap up
  6. 6. | 2004 JavaOneSM Conference | Session TS-26146 Orbitz Overview • Founded in 2000 by 5 leading airlines • Site launched in 2001 • Top 3 brand travel site in just over two years • 22 MM registered users and strong monthly traffic • Poised to extend strength in air to other products • Positive cash flow from operations since Q4 2002 • Public offering on 12/17/03
  7. 7. | 2004 JavaOneSM Conference | Session TS-26147 2001 Orbitz 8% Expe dia 31% Other 28% Travel ocity 33% Rapidly Approaching #2 Position Based on gross travel bookings Source: PhoCusWright Jan 1–Jun 30 2003 Orbitz 17% Expe dia 40% Other 23% Travel ocity 20%
  8. 8. | 2004 JavaOneSM Conference | Session TS-26148 Architectural Drivers • Low-cost distributor • Speed to market is critical • Flexibility of the application • Robustness ─Availability ─Reliability
  9. 9. | 2004 JavaOneSM Conference | Session TS-26149 Why Use Jini™ Network Technology? • Enables automatic failover and recovery • Scales horizontally • Lookup capabilities ─Typed ─Interface-based • Functionality didn’t require transactions • Automatic load balancing • Self-healing • Low-cost (no license costs)
  10. 10. | 2004 JavaOneSM Conference | Session TS-261410 Agenda Introduction Orbitz Architecture Jini™ Technology Benefits Distributed Computing Pitfalls What’s Next? Wrap up
  11. 11. | 2004 JavaOneSM Conference | Session TS-261411 Orbitz Architecture Mile-high view Presentation / State / Persistence Webapp Web Services IVR / Messaging Apache Weblogic Oracle Generic Services Air Services Hotel Services Car Services Supplier— Specific Services GDS X Service Airline X Service Airline Y Service GDS Y Service Hotel Switch X Service Hotel Switch Y Service Jini wrappers around legacy systems and internally hosted J2EE systems
  12. 12. | 2004 JavaOneSM Conference | Session TS-261412 Supplier Link Single host system (i.e. AA.com/NWA.com)
  13. 13. | 2004 JavaOneSM Conference | Session TS-261413 SLONEGOrbitz.com WebLogic App Server ONEG Server Logging Service Wspan AA CO NW HP US Pegs TWeb Discover Publish Publish Log Log Log Discover ONeG—The Big Switch Putting it all together LUS LUS LUS Logging Service LUS LUS LUS LUS Logging Service Logging Service Logging Service Logging Service Log WebLogic App Server WebLogic App Server WebLogic App Server WebLogic App Server WebLogic App Server Hotel- Oneg Server Other Services Other Services Other Services ONEG Server ONEG Server ONEG Server
  14. 14. | 2004 JavaOneSM Conference | Session TS-261414 ONeG—Design Decisions • Client could have contacted host specific services directly • Was decided to put failure/retry logic in the booking engine, not push on the client due to hot reconfiguration requirements • Business event logging at ONeG layer • Use network layer security to restrict access to supplier specific layer Switch or router?
  15. 15. | 2004 JavaOneSM Conference | Session TS-261415 High-Level Architecture Diagram Novo System (incl. orbitz.com AA Hosting System (connects only to Sabre AA) aa.com Orbitz Supplier Link System nw a.com JiniSLServicesi/f JiniSLServicesi/f NW Hosting System (connects only to WorldSpan) JiniSLServicesi/f ONeG / Hotel (Rate request, content, search) JiniSLServicesi/f Kinetics Shares CO HP 1P World Span (NW) Bookings DB Site DB Orbitz Merchant Hotels (OMH) Pegasus (external) JiniSLServicesi/f Sabre AA US Notification Jinii/f Kinetics Servleti/f SMTP Service Notshown Reporting Monitoring/mgt/admin Customer Care Other agent desktop usage Gatew ay Partners Advertising Represents request/response where the request is made in the indicated direction ITA Clear Commerce RPS ONeG (Air, Car, Hotel Bookings) IVR Service "Public"HTTPi/f Fulf illment Serv leti/f Hotel Reference Hotel DB (Rate Cache) Internet Smart Proxy Jinisurrogate Notif ica -tion Serv er Web-siteFront-ends SupplierSystem "Third-parties" OAG Flifo Servleti/f Flif o Serv er Flif o Jinii/f J2EE Jini
  16. 16. | 2004 JavaOneSM Conference | Session TS-261416 The General Idea Combine common set of objects, service interfaces and JiniSM services to create blocks of reusable functionality.
  17. 17. | 2004 JavaOneSM Conference | Session TS-261417 The General Idea (Cont.) • Common objects ─AIRPORT ─CARRIER • Service interfaces ─LowFareSearchRequest ─AirPurchaseRequest • Mask framework details with simple Factory ─ServiceImpl = OrbitzFactory.get(serviceInterface); • Simple configuration (at least for client) ─VersionAttribute String ─List of lookup servers OR list of multicast groups
  18. 18. | 2004 JavaOneSM Conference | Session TS-261418 The General Idea (Cont.) • Response (and objects contained) are core objects or interfaces are immutable • Underlying implementations typically have much more information than is exposed to client • Services are all transient and non-activatable hence completely interchangeable • No transactions Things to note:
  19. 19. | 2004 JavaOneSM Conference | Session TS-261419 Let’s See Some Code! • Startup ClientStarter.start(); • Shutdown ClientStarter.stop(); • Sample transaction SampleServiceRequest req = OrbitzFactory.get(SampleServiceRequest.class); req.setFoo(foo); req.setBar(bar); SampleServiceResponse resp = req.execute(); baz = resp.getBaz(); Client’s perspective:
  20. 20. | 2004 JavaOneSM Conference | Session TS-261420 Say What? Show Me a Picture…. req = OrbitzFactory.get(FooRequest); req.setXXX(xxx); ObjectFactory Jini Service http codebase server FooRequestImpl resp = req.execute(); resp.getYYY(); remote = OrbitzFactory.get(FooRemote); return remote.execute(req); FooRemote Jini Service FooResponseImpl
  21. 21. | 2004 JavaOneSM Conference | Session TS-261421 Let’s See More Code! • Startup ServerStarter.start(); SampleService ss = new SampleServiceImpl(); // SampleServiceImpl extends UnicastRemoteObject // Need to run rmic to generate _Stub class DiscoveryManagment ldm = ServerStarter.getDiscoveryManager(); // Most likely LookupDiscoveryManager JoinManager jm = new JoinManager(ss, attributes, null, ldm, null); // attributes is an Entry[] which includes // things like VersionAttribute Publishing a Service (Jini 1.X)
  22. 22. | 2004 JavaOneSM Conference | Session TS-261422 Let’s See More Code! • Shutdown UnicastRemoteObject.unexport(ss, false); jm.terminate(); ServerStarter.stop(); Publishing a Service (Jini 1.X) (cont.)
  23. 23. | 2004 JavaOneSM Conference | Session TS-261423 Agenda Introduction Orbitz Architecture Jini™ Technology Benefits Distributed Computing Pitfalls What’s Next? Wrap up
  24. 24. | 2004 JavaOneSM Conference | Session TS-261424 Jini™ Technology Benefits • Designed to expect network failure (not ignore that it happens) • Multicast discovery mechanism of Lookup Server ensures <1 minute discovery (heartbeat) • Services come and go. Have many places to go to get serviced Self-healing
  25. 25. | 2004 JavaOneSM Conference | Session TS-261425 Jini™ Technology Benefits • LookupCache and ServiceDiscoveryManager use random selection when single service is requested and there are multiple matches • Over time this results in an even load distribution of load on identical services Automatic load balancing
  26. 26. | 2004 JavaOneSM Conference | Session TS-261426 Jini™ Technology Benefits • Capacity is directly related to the number of places a client can go to fulfil a service request • If you need more capacity of a particular service, just start more instances • Each LookupCache gets notified of new service and load is redistributed across new set Horizontal scalability
  27. 27. | 2004 JavaOneSM Conference | Session TS-261427 Jini™ Technology Benefits • Easy to publish a service • Easy to find a service • Catch RemoteException and discard proxy when something goes wrong Lightweight
  28. 28. | 2004 JavaOneSM Conference | Session TS-261428 Agenda Introduction Orbitz Architecture Jini™ Technology Benefits Distributed Computing Pitfalls What’s Next? Wrap up
  29. 29. | 2004 JavaOneSM Conference | Session TS-261429 Distributed Computing Pitfalls • We don’t use remote objects • No way to turn it off in JRMP implementation of RMI (Jini versions 1.X) • Default 1 minute DGC interval kills any heap optimizations • Accounts for anywhere between 50-75% of the threads in our system RMI Distributed Garbage Collection
  30. 30. | 2004 JavaOneSM Conference | Session TS-261430 Distributed Computing Pitfalls • Make DGC interval longer or disable explicit GC (we saw a 1.5% improvement in VM throughput when using -XX:+DisableExplicitGC— time spent running code vs doing GC) • Upgrade to Jini 2.X and use JERI so we can disable DGC RMI DGC—possible remedies
  31. 31. | 2004 JavaOneSM Conference | Session TS-261431 Distributed Computing Pitfalls • Contributed implementation designed to wait until things aren’t changing before answering • Implemented with big reader’s/writer lock • Not common, but annoying when LookupCache/ServiceDiscoveryManager drops all discovered services when lease to lookup server cannot be renewed Reggie lockouts
  32. 32. | 2004 JavaOneSM Conference | Session TS-261432 Distributed Computing Pitfalls • Longer lease times • Custom implementation of lookup server that doesn’t have reader’s/writer lock. Won’t get best picture of state of services, but isn’t necessary in our system Reggie lockouts—possible remedies
  33. 33. | 2004 JavaOneSM Conference | Session TS-261433 Distributed Computing Pitfalls • If a machine gets slow, random selection will eventually put all requests on the slow machine • Also a problem in heterogeneous environments Randomized load balancing
  34. 34. | 2004 JavaOneSM Conference | Session TS-261434 Distributed Computing Pitfalls • Switch from sync. calls to async so a push to a service becomes a pull. Use a JavaSpaces™ or JMS™ queue • Publish Attribute with notion of relative capacity in conjunction with ServiceItemFilter on client side to adjust spread of service calls more in-line with machine’s relative abilities Randomized load balancing—possible remedies
  35. 35. | 2004 JavaOneSM Conference | Session TS-261435 Distributed Computing Pitfalls • LookupCache uses event notification to keep local VM cache up to date • If large number of clients/lookup servers/services, the math gets big—e.g.: ─100 app servers (service clients) * 2 lookup servers * 30 services/VM * 20 VMs = 120,000 messages • Contributed implementation of Lookup Server does in-order delivery of notifications which involves a linear scan of a single list of messages to send out Event storming using the LookupCache
  36. 36. | 2004 JavaOneSM Conference | Session TS-261436 Distributed Computing Pitfalls • Custom LookupCache that doesn’t use event notifications: ─Every client probably doesn’t need more than 3-4 places to go for a particular service type at any time ─Auto-expire entries based on time or number of calls to get same randomization ─Backfill with more services as current ones become invalid • Custom Lookup Server with event module optimized for throughput of in-order event notification Event storming—remedies
  37. 37. | 2004 JavaOneSM Conference | Session TS-261437 Distributed Computing Pitfalls • Coarser grained services ─Group services living in single VM (usually due to resource sharing i.e. DB pool) into single (or fewer) Jini™ service(s). Fewer event notifications to be sent • Partitioning of service registrations ─Group service registrations to reduce the number of messages sent by a single instance of the Lookup Server Event storming—remedies (cont.)
  38. 38. | 2004 JavaOneSM Conference | Session TS-261438 Jini™ and J2EE™ • Have Jini environment, but want to introduce some J2EE™ servers (or vice-versa). What do you do? • Deploy webapp that publishes Jini™ service interface similar to EJB™ interface, but service impl makes EJB local call • Jini service lookups take the place of JNDI lookups ─Multiple copies give same result as clustered directory service ─Can live side-by-side with other APIs: XML/SOAP, JNDI EJB lookup, etc. Two great tastes that go great together
  39. 39. | 2004 JavaOneSM Conference | Session TS-261439 Agenda Introduction Orbitz Architecture Jini™ Technology Benefits Distributed Computing Pitfalls What’s Next? Wrap up
  40. 40. | 2004 JavaOneSM Conference | Session TS-261440 What’s Next? • JERI ─Disable distributed garbage collection ─Plugable transports (UDP, SSL) • Security (per service) ─Authorization ─Authentication ─Replace 2 layers of Jini services with 1 now that we can isolate/restrict access to services individually Jini 2.X upgrade
  41. 41. | 2004 JavaOneSM Conference | Session TS-261441 Let’s See More Code! • Startup ServerStarter.start(); SampleService ss = new SampleServiceImpl(); // SampleServiceImpl implements Remote Exporter e = new BasicJeriExporter( TCPServerEndpoint.getInstance(0), new BasicILFactory()); Remote stub = e.export(ss); DiscoveryManagment ldm = ServerStarter.getDiscoveryManager(); JoinManager jm = new JoinManager(stub, attributes, null, ldm, null); Publishing a Service (Jini 2.X)
  42. 42. | 2004 JavaOneSM Conference | Session TS-261442 Let’s See More Code! (Cont.) • Shutdown e.unexport(stub); jm.terminate(); ServerStarter.stop(); Publishing a Service (Jini 2.X)
  43. 43. | 2004 JavaOneSM Conference | Session TS-261443 What’s Next? (Cont.) • If Jini services use downloaded code, why can’t all the code be downloadable? • Introduce standard deployment platform utilizing benefits of transportable byte-code ─Reconfigure capacity as needed ─Ease deployment across many machines • Interesting work along these lines: ─Rio—http://rio.jini.org/ ─Jini Service Container—http://chiron.jini.org/ Dynamic redeployment
  44. 44. | 2004 JavaOneSM Conference | Session TS-261444 What’s Next? (Cont.) • Perhaps change from sync-client-push to async-server-pull model ─Using JavaSpaces™ ─Using JMS™ queue • Would keep servers from getting overloaded since they wouldn’t pull more work than they could handle • Could have a more heterogeneous environment of hardware while maximizing utilization • Downside is introducing a single point of failure if the space/queue isn’t really fault-tolerant Asynchronous messaging
  45. 45. | 2004 JavaOneSM Conference | Session TS-261445 Agenda Introduction Orbitz Architecture Jini™ Technology Benefits Distributed Computing Pitfalls What’s Next? Wrap up
  46. 46. | 2004 JavaOneSM Conference | Session TS-261446 Summary • Try Jini™ services its: ─A great way for distributed applications to discover and communicate with each other ─Lightweight, flexible, adaptable, self-healing ─Production ready ─The best kept secret in the Java™ community program • J2EE™ platform is not the solution for every problem
  47. 47. | 2004 JavaOneSM Conference | Session TS-261447 For More Information • http://www.orbitz.com/ • http://www.jini.org/ ─Strong and helpful community group. Presentations from 7th community meeting are online for free ─Mailing list/archives ─Download Jini 2.0 • http://research.sun.com/techrep/1994/abstract- 29.html (A Note On Distributed Computing) • Core Jini, W. Keith Edwards ─ISBN: 0130894087 (Jini 1.X) • Hard Landing, Thomas Petzinger Jr. ─ISBN: 0812928350 (Airline lore)
  48. 48. | 2004 JavaOneSM Conference | Session TS-261448 Q&A 48
  49. 49. java.sun.com/javaone/sf | 2004 JavaOneSM Conference | Session TS-261449 Jini™ Network Technology-Enabled Service-Oriented Architecture Leon Chism/Steve Hoffman Chief Internet Architect/Engineering Fellow Orbitz www.orbitz.com A Low-Cost Alternative to Enterprise JavaBeans™ (EJB™) Architecture

×