Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
CORBA and Java by Alex Chaffee [email protected] http://www.jguru.com/ Java online resources http://www.purpletech.com/ Java training and consulting Copyright © 1998 Purple Technology, Inc Abstract CORBA loves Java! CORBA provides a platform-independent, language-independent way to write applications that can invoke objects that live across the room or across the planet. Java is an object-oriented language that's ideal for writing the clients and servers living on the Object Bus. In this session, we examine the ways they interoperate programmatically, as we walk you stepby-step from a CORBA IDL, to a server and client both written in Java, running on top of a 100%-Java ORB. We also discuss the relationship between CORBA and RMI, and discuss some of the real-world issues involved in deploying a CORBA-based application. Recommended: some knowledge of CORBA, ability to read Java source code. Copyright © 1998 Purple Technology, Inc Introduction Purple Technology http://www.purpletech.com Java Alex Training and Consulting Chaffee Creator of Gamelan Cool Java Dude Copyright © 1998 Purple Technology, Inc Part I: CORBA Overview Copyright © 1998 Purple Technology, Inc. What is CORBA? Common Object Request Broker Architecture Communication infrastructure for distributed objects Allows a heterogeneous, distributed collection of objects to collaborate transparently Copyright © 1998 Purple Technology, Inc What is CORBA good for? Developing distributed applications Locating remote objects on a network Sending messages to those objects Common interface for transactions, security, etc. CORBA Services (more later) Copyright © 1998 Purple Technology, Inc Why Distributed Applications? Data is distributed Administrative and ownership reasons Heterogeneous systems Shared by multiple applications Scalability Copyright © 1998 Purple Technology, Inc Why Distributed Applications? Computation is distributed Scalability: multiprocessing Take computation to data Heterogeneous architectures Users are distributed Multiple users interacting and communicating via distributed applications Copyright © 1998 Purple Technology, Inc Distributed Object Systems All entities are modeled as objects Systems support location transparency Interfaces, not implementations, define objects Good distributed object systems are open, federated systems Copyright © 1998 Purple Technology, Inc What is the OMG? Designers of CORBA Consortium of 700+ companies Not including Microsoft Members: platform vendors database software tool developers corporate software vendors developers application vendors Copyright © 1998 Purple Technology, Inc It’s Just A Spec Has never been fully implemented Probably never will be Industry moves quickly and spec has to keep up Interoperability vs. portability Pass-by-value Copyright © 1998 Purple Technology, Inc Basic CORBA Architecture Server Client response request ORB ORB “Object Bus” Copyright © 1998 Purple Technology, Inc CORBA Objects Examples Service Client Component Business object CORBA objects approach universal accessibility Any Language Any Host on network Any Platform Copyright © 1998 Purple Technology, Inc CORBA Elements 1. ORB 2. CORBA Services 3. CORBA Facilities 4. Application Objects Copyright © 1998 Purple Technology, Inc ORB Object Request Broker “Object Handles Bus” all communication among objects Each host (machine) has its own ORB ORBs know how to talk to each other ORB also provides basic services to client Copyright © 1998 Purple Technology, Inc ORB Responsibilities Find the object implementation for the request Prepare the object implementation to receive the request Communicate the data making up the request Retrieve results of request Copyright © 1998 Purple Technology, Inc Network of ORBs There’s an ORB on the server too ORB receives request Copyright © 1998 Purple Technology, Inc IIOP Internet Inter-Orb Protocol Network or “wire” protocol Works across TCP/IP (the Internet protocol) Copyright © 1998 Purple Technology, Inc ORB Features Method invocations Static and Dynamic Remote objects or CORBA services High-level language bindings Use your favorite language; ORB translates Self-describing Provides services metadata for all objects and Copyright © 1998 Purple Technology, Inc ORB Features Local or remote Same API wherever target object lives Preserves context Distributed security and transactions Coexistence Just with legacy code provide a wrapper object Copyright © 1998 Purple Technology, Inc What is an ORB really? Not a separate process Library code that executes in-process Listens to TCP ports for connections One port per local object Opens N TCP sockets to other objects ports per remote machine Copyright © 1998 Purple Technology, Inc IDL Interface Definition Language Defines protocol to access objects Like a contract Well-specified Language-independent Copyright © 1998 Purple Technology, Inc IDL Example module Calc { interface Adder { long add(in long x, in long y); } } Defines an object called Adder with a method called add Copyright © 1998 Purple Technology, Inc Stubs and Skeletons Stub lives on client pretends to be remote object Skeleton lives on server receives requests from stub talks to true remote object delivers response to stub Copyright © 1997 Alex Chaffee Stubs and Skeletons (Fig.) Client Host Machine Server Host Machine Client Object Remote Object Stub Skeleton ORB IIOP ORB Copyright © 1997 Alex Chaffee Client vs. Server in CORBA, a client is a client relative to a particular object i.e. an object with a reference to a “server” object A client may also act as a server If it has an IDL and stubs and skeletons Technically, a CORBA server contains one or more CORBA objects Copyright © 1998 Purple Technology, Inc Different Meanings of “Server” Host machine Program running on host machine CORBA object running inside program has IDL, stub, skeleton Sometimes called a Servant Copyright © 1998 Purple Technology, Inc Stubs and Skeletons -> Platform Independence Client code has no knowledge of the implementation of the object or which ORB is used to access the implementation. Copyright © 1998 Purple Technology, Inc CORBA Services APIs for low-level, common tasks Life Cycle Service creating, copying, moving, removing objects Naming Service Register objects with a name Look up objects by name Copyright © 1998 Purple Technology, Inc CORBA Services Concurrency Obtain Control Service and release exclusive locks Transaction Service Two-phase commit coordination Supports nested transactions Persistence Service Storing objects in a variety of databases RDBMS, OODBMS, file systems Copyright © 1998 Purple Technology, Inc CORBA Services Security Service Authentication, ACLs, Event encryption, etc. Service Uncoupled notifications Copyright © 1998 Purple Technology, Inc CORBA Services Relationship Externalization Query Licensing Properties Time Trader Collection … and so on… See what I mean about it never being Copyright © 1998 Purple Technology, Inc implemented? CORBA Facilities Frameworks for specialized applications Distributed Document Component Facility OpenDoc In progress: Agents Business Objects Internationalization Copyright © 1998 Purple Technology, Inc N-Tier Design with CORBA Storage “Tier” ORB DB ORB ORB ORB DB Data Object ORB ORB ORB ORB Client Tier TP Monitor ORB Business Object Tier (after diagram in Orfali et al.) Service “Tier” Copyright © 1998 Purple Technology, Inc Three Tiers User Interface Tier Business Logic Tier Data Storage Tier Can use CORBA objects in each tier Copyright © 1998 Purple Technology, Inc Part II: Java IDL - Using CORBA from Java Copyright © 1998 Purple Technology, Inc. Java CORBA Products The Java 2 ORB VisiBroker for Java OrbixWeb Netscape Communicator Various free or shareware ORBs Copyright © 1998 Purple Technology, Inc Java IDL Should be named “Java CORBA” More than just IDL Full (?) implementation of CORBA in 100% Java Three Parts ORB Naming Service idltojava compiler Ships with JDK 1.2 Copyright © 1998 Purple Technology, Inc Transparent API JavaIDL turns IDL into direct method calls Easy to program Clients have no knowledge of implementation Highly portable Copyright © 1998 Purple Technology, Inc The Java ORB 100% Java Generic Allows Java IDL applications to run either as stand-alone Java applications, or as applets within Java-enabled browsers Uses IIOP Copyright © 1998 Purple Technology, Inc Other Java ORBs Visigenic (Inprise) VisiBroker Netscape Communicator Oracle Web Server 3.0 Free download Iona OrbixWeb Copyright © 1998 Purple Technology, Inc IDL to Java Mapping Defined by OMG Translates IDL concepts into Java language constructs Everything is accessible by writing normal-looking Java code Copyright © 1998 Purple Technology, Inc IDL to Java Type Mapping IDL Type boolean char / wchar octet short / unsigned short long / unsigned long long long / unsigned long long float double string / wstring Java Type boolean char byte short int long float double String Copyright © 1998 Purple Technology, Inc IDL vs. Java vs. C++ concepts IDL module Java package C++ namespace interface interface abstract class operation method member function attribute pair of methods pair of functions Copyright © 1998 Purple Technology, Inc IDL Modules Map to Java packages Unfortunately, it has the root level name of the module Clutters up your package hierarchy e.g. module Calc -> package Calc interface Calc.Adder not package ORG.omg.CORBA.modules.Calc Copyright © 1998 Purple Technology, Inc IDL Interfaces Map to Java interfaces Copyright © 1998 Purple Technology, Inc IDL Operations Map to Java methods Copyright © 1998 Purple Technology, Inc IDL Attributes Map to pair of functions IDL string name; Java public void name(String val); public String name(); Yes, it looks stupid. Sorry. Copyright © 1998 Purple Technology, Inc idltojava Development tool Automatically generates java stubs, skeletons, helpers, holders, ... Generates stubs for specific remote interfaces Copyright © 1998 Purple Technology, Inc Stubs Java objects call stub methods Stubs communicate with CORBA objects and vice versa Transparent integration Copyright © 1998 Purple Technology, Inc Skeletons ORB passes request to skeleton (like a stub) Skeleton calls local implementation Copyright © 1998 Purple Technology, Inc Remote Interfaces and Stubs IDL Interface implements implements extends Client Stub Skeleton Remote Object (Server) Copyright © 1997 Alex Chaffee Show Me The Source Code OK, here it comes... Copyright © 1998 Purple Technology, Inc idltojava input Calc.idl module Calc { interface Adder { long add(in long x, in long y); } } Copyright © 1998 Purple Technology, Inc idltojava output idltojava Calc.idl Adder.java (a Java interface that maps the IDL interface) _AdderStub.java (a client stub) _AdderImplBase.java (a server skeleton) AdderHelper.java (a helper class) AdderHolder.java (a holder class) Must compile these files and put them in your CLASSPATH Copyright © 1998 Purple Technology, Inc Adder.java Created for you by idltojava package Calc; public interface Adder extends org.omg.CORBA.Object { int add(int x, int y); } Copyright © 1998 Purple Technology, Inc Implementing a server Extend base class Implement Provide Create all methods declared in IDL a main method an ORB instance Create a server instance Inform the ORB about the instance Acquire a Naming Context Register the instance in that Naming Context under some name Copyright © 1998 Purple Technology, Inc AdderServer.java class AdderServer extends _AdderImplBase { public int add( int x, int y ) { System.out.println(x + " + " + y + " = " + (x+y)); return x + y; } Copyright © 1998 Purple Technology, Inc AdderServer.java (cont.) public static void main(String args[]) { // create and initialize the ORB ORB orb = ORB.init(args, null); // create server and register it with the ORB AdderServer adderRef = new AdderServer(); orb.connect(adderRef); Copyright © 1998 Purple Technology, Inc AdderServer.java (cont.) // get the root naming context org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameSer vice"); NamingContext ncRef = NamingContextHelper.narrow(objRef); // bind the Object Reference in Naming NameComponent nc = new NameComponent("Adder", ""); NameComponent path[] = {nc}; ncRef.rebind(path, adderRef); Copyright © 1998 Purple Technology, Inc Implementing a client Create an ORB Get a reference to the Naming Context Look up the correct name in that Naming Context Receive an object reference to that object Actually, Invoke to its Stub methods on the reference Copyright © 1998 Purple Technology, Inc AdderClient.java Copyright © 1998 Purple Technology, Inc Object Reference Two Meanings 1. An abstract concept referring to a specific object living on a specific host, attached to a specific ORB 2. A local Java reference to an object that relays messages to that object Obtained from new keyword a Factory Object the Naming Service Copyright © 1998 Purple Technology, Inc Naming Service tnameserv t is for “transient” Maps name to object reference An implementation of the CORBA Object Service (COS) name service to run the Naming Service UNIX: tnameserv & Win32: start /m tnameserv Copyright © 1998 Purple Technology, Inc Fire it up start /m tnameserv start java AdderServer java AdderClient 2 + 2 = ? Copyright © 1998 Purple Technology, Inc CORBA Flow Client Virtual Machine Server Virtual Machine Client Remote Object Skeleton Stub Server “Fred” Name Server Virtual Machine Copyright © 1997 Alex Chaffee CORBA Flow 1. Server Creates Remote Object Client Virtual Machine 2. Server Registers Remote Object Client Server Virtual Machine Remote Object 1 Skeleton Stub Server 2 “Fred” Name Server Virtual Machine Copyright © 1997 Alex Chaffee CORBA Flow Client Virtual Machine 3. Client requests object fromRemote Name Server 4. Name Server returns remote reference Object (and stub gets created) Client Skeleton Stub 3 Server Virtual Machine Server 4 “Fred” Name Server Virtual Machine Copyright © 1997 Alex Chaffee RMI Flow Client Virtual Machine Server Virtual Machine Client Remote Object 5 7 6 Stub Skeleton Server 5. Client invokes stub method 6. Stub talks to skeleton 7. Skeleton invokes remote object “Fred” method Name Server Virtual Machine Copyright © 1997 Alex Chaffee Pseudo-objects The ORB is a pseudo-object It works just like a remote object, only it’s local Copyright © 1998 Purple Technology, Inc The Basic Object Adapter (BOA) Another pseudo-object Helps register objects with the ORB Functions Maintain Implementation Repository Generate and interpret object references Activate and deactivate implementation objects Invoke methods via skeletons Copyright © 1998 Purple Technology, Inc Why do you need both an ORB and a BOA? I’m not really sure Allows vendors to optimize or enhance functionality register many objects en masse cache object state elsewhere E.g. Object database Copyright © 1998 Purple Technology, Inc Using the BOA Slightly different procedure for initializing objects Hides name service from you Ask the BOA to register the object Ask the Helper object to bind the object Once the object is created, interface is identical Just call methods using normal Java syntax Copyright © 1998 Purple Technology, Inc BOA Object Activation Shared server Multiple objects, one server Normal procedure Multithreaded (handled by CORBA implementation) Unshared New server process for each object Copyright © 1998 Purple Technology, Inc BOA Object Activation (cont.) Server-per-method Batch processing Persistent Shared server server, but object not created by ORB Copyright © 1998 Purple Technology, Inc BOA Object Activation Scenario Server obj creates object instance = new MyObject(); Server registers object with BOA boa.create(interface_name, implementation_name, reference_data) VisiBroker does this for you in superclass constructor Copyright © 1998 Purple Technology, Inc BOA Object Activation Scenario (cont.) Server tells BOA the object is ready boa.obj_is_ready(obj) Server tells BOA that all objects are ready boa.impl_is_ready() Objects shut down boa.deactivate_obj(this) Server shuts down boa.deactivate_impl() Copyright © 1998 Purple Technology, Inc Threads in JavaIDL Remote invocations happen on a separate thread Must make sure your remote objects are thread-safe Copyright © 1998 Purple Technology, Inc Callbacks Pass in a reference to some CORBA object The server object can invoke methods on that reference ORB automatically generates a stub on the server side The server has become the client, and vice versa Copyright © 1998 Purple Technology, Inc Obtaining Object References From the ORB orb.resolve_initial_references(“NameServic e”) From a Naming Context From a Stringified reference From another object From a parameter to your remote method Copyright © 1998 Purple Technology, Inc Helper Objects How CORBA does casting narrow method changes the type of an object reference // get the root naming context org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameSer vice"); NamingContext ncRef = NamingContextHelper.narrow(objRef); Copyright © 1998 Purple Technology, Inc Naming Contexts Directory structure for CORBA Naming Component = file Naming Context = directory Can add a Context as a Component like subdirectories Can add a Context on a different name server like symbolic links Copyright © 1998 Purple Technology, Inc Stringification Stringified reference is ORBindependent Object to string org.omg.CORBA.Object obj = ... String str = orb.object_to_string(obj); String to object org.omg.CORBA.Object obj = orb.string_to_object(str); Copyright © 1998 Purple Technology, Inc Visigenic: Caffeine Java to IDL compiler Copyright © 1998 Purple Technology, Inc Symantec: Visual Café 3.0 Enterprise Suite Java to IDL compiler Automatic client adapter bean generation Makes a JavaBean that’s a proxy to a CORBA object Distributed debugging Follow call chain, examine variables, et al. Across many VMs, many hosts, many OSs Copyright © 1998 Purple Technology, Inc Part III: Example Application Copyright © 1998 Purple Technology, Inc Publish-Subscribe System Channel: an avenue for real-time data exchange Consumers can subscribe to arbitrary data channels Producers can publish data on channels Invokes callback method on consumer Copyright © 1998 Purple Technology, Inc Object Model PSServer Channel creates getChannel(String channelName) channel if it doesn’t already exist Channel void subscribe(Subscriber sub) void publish(Object data) Subscriber void dataArrived(Object data) Copyright © 1998 Purple Technology, Inc Flow: Subscriber-side Client acquires PSServer reference Client acquires channel from PSServer Client creates subscriber locally, passing reference to channel Subscriber registers self with channel channel.subscribe(this) Client waits for callback to its dataArrived method Copyright © 1998 Purple Technology, Inc Flow: Publisher-side Client acquires PSServer reference Client acquires channel from PSServer Client creates publisher locally, passing reference to channel Publisher acquires data From a database From a data feed Publisher calls channel.publish(data) Copyright © 1998 Purple Technology, Inc Example Application: Stock data Channel name = stock symbol name Source code available Copyright © 1998 Purple Technology, Inc Design issues Name space for channels TIBCO et al. use hierarchical directory structure Caching prior messages Subscribe should spawn a thread that sends previous N messages Copyright © 1998 Purple Technology, Inc Design issues Maintain local cache of data sent Don’t want to go back across the network every time you draw a graph Create local version of class Copyright © 1998 Purple Technology, Inc Part IV: Advanced Topics Copyright © 1998 Purple Technology, Inc Exceptions CORBA exceptions are mapped to Java exceptions System Exceptions They’re subclasses of RuntimeException, so the compiler won’t complain if you forget to catch them Minor codes additional information vendor-specific :-( Completion Status Copyright © 1998 Purple Technology, Inc Exceptions (cont.) User Exceptions Generated by idltojava Subclasses of Exception (declared) Copyright © 1998 Purple Technology, Inc Dynamic Invocation Interface (DII) CORBA is fully self-aware Methods for acquiring List of all services List of known objects Interfaces of known objects Etc. Well-documented elsewhere Copyright © 1998 Purple Technology, Inc Interface Repositories JavaIDL clients do not typically need or use an Interface Repository All of the needed type information is available in the stubs or is resolved by an object's server JavaIDL supports access to Interface Repository information made available by other CORBA object implementations. Copyright © 1998 Purple Technology, Inc Implementation Repository contains information that allows the ORB to locate and activate implementations of objects also store additional information associated with implementations of ORB objects. Debugging information Administrative control Resource allocation Security Copyright © 1998 Purple Technology, Inc Value Objects CORBA 3.0 Blobs Avoids network latency of pass-byreference objects Copyright © 1998 Purple Technology, Inc RMI over IIOP In Development Uses IIOP as transport protocol Uses Value Objects to pass Java serialized objects Copyright © 1998 Purple Technology, Inc CORBA via RMI Possible using middleware server RMI from client to middleware IIOP from middleware to other servers Can use Servlet as middleware Copyright © 1998 Purple Technology, Inc CORBA and EJB Transport EJB uses RMI interface, RMI uses IIOP CORBA 3.0 promises object compatibility with EJB Not quite sure what that means Some All EJB Servers contain an ORB EJB Objects are also CORBA objects Copyright © 1998 Purple Technology, Inc CORBA and EJB (Cont.) All EJB Servers use CORBA Transactions (via JTS) That means that any client can make a distributed transaction that includes both CORBA and EJB Objects Not an either-or decision You can have both EJB and CORBA working together in a single system Copyright © 1998 Purple Technology, Inc Java Transactions Java Transaction Service (JTS) A standard Java mapping of the OMG Object Transaction Service (OTS) packages org.omg.CosTransaction and org.omg.CosTSPortability Java Transaction API (JTA) High-level transaction management specification package javax.transaction Copyright © 1998 Purple Technology, Inc Object Transaction Service (OTS) Distributed Part transaction specification of CORBA, but also standalone Transactions can span multiple queries multiple objects multiple servers multiple databases multiple vendors’ products Copyright © 1998 Purple Technology, Inc OTS Features Distributed Flat transactions or nested transactions Two-phase Vendor commit interoperability (?) Copyright © 1998 Purple Technology, Inc OTS Object Model Transactional Can Object participate in a transaction Recoverable Object Actually performs commit or rollback on its own data Resource A system or server that can commit or rollback data stored inside it E.g. a database server Copyright © 1998 Purple Technology, Inc OTS Object Model (Cont.) Current Reference/wrapper to currently active transaction Control / Coordinator / Terminator Registers objects Performs distributed commit/rollback Synchronization An object that gets informed of the progress of the ongoing transaction Implements callback methods Copyright © 1998 Purple Technology, Inc Part V: CORBA/Java Case Studies Copyright © 1998 Purple Technology, Inc. CORBA Case Study Kaiser Permanente Northern California KAHUNA a/k/a WebChart http://www.javaworld.com/jw-111998/jw-11-kaiser.html?101698txt Copyright © 1998 Purple Technology, Inc Problem: Specific Medical records, patient histories, clinical schedules, lab results, and medical images all stored in disparate databases Many patients per doctor, many doctors per patient Need immediate access to all information Copyright © 1998 Purple Technology, Inc Problem: General getting data from a multitude of sources in a multitude of media putting into data a single system distributing data to a wide variety of desktops throughout a very large company Copyright © 1998 Purple Technology, Inc Solution: Java/CORBA “Not only did Java/CORBA solve all these problems, but Java/CORBA development is cheap, fast, scalable and works over the Internet.” Copyright © 1998 Purple Technology, Inc WebChart Architecture Copyright © 1998 Purple Technology, Inc This is your brain on Java. Any questions? Copyright © 1998 Purple Technology, Inc Conclusion Copyright © 1998 Purple Technology, Inc. Where to Get More Information Orfali & Harkey, Client/Server Programming with Java and CORBA (Wiley) Orfali, Harkey & Edwards, Instant CORBA (Wiley) Copyright © 1998 Purple Technology, Inc More Info: Links This http://www.purpletech.com/ JDK Presentation 1.2 CORBA documentation http://java.sun.com/products/jdk/1.2/docs/guide/idl/ Glerum, WebChart serves up Kaiser patients, JavaWorld http://www.javaworld.com/jw-11-1998/jw-11kaiser.html?101698txt Copyright © 1998 Purple Technology, Inc More Info: Links Object Management Group - http://www.omg.org Java Transactions http://java.sun.com/products/jta/ http://java.sun.com/products/jts/ ftp://www.omg.org/pub/docs/formal/97-12-17.pdf Copyright © 1998 Purple Technology, Inc