presentation 18: rmi introduction. goals of this lesson after this 35 min. lesson you will be:...
TRANSCRIPT
Presentation 18:RMI introduction
Goals of this lesson
• After this 35 min. lesson you will be:• Introduced to Java RMI• Ready to present RMI’s position in the Middleware
technology family on class
• You will not:• Be an RMI expert. More practice and theory is required
• Later in RMI:• We will look at more advanced issues• Activation, Callbacks, RMI over IIOP, tunneling
Outline
• Theory: (35x2 min.) • Introduction to Java RMI
• Group work: (35 min.)• Pro’s & con’s of Java RMI vs. SOAP
• When to use which technology…• Differences and equalities SOAP & RMI
• Plenum: (35 min.)• Discussion of group work
• One group will present … so prepare!
Java RMI
• In Java 1.0 object communication was confined to objects in one Virtual Machine (VM)
• Sun decided to introduce inter VM communication• Remote Method Invocation (RMI) from Java 1.1
supports communication between different VMs, potentially across the network
• Provides tight OO integration with Java• Work in heterogeneous environment (servers)• BUT ONLY with Java (so far) – so no language
transparency
Java RMI features
• Build on Java’s existing object model -> easy• No need for IDL – use Java interfaces• Arguments & return values can be all types specializing
java.io.Serializable or java.rmi.Remote• Dynamic loading of classes• Use of build-in Java Security Manager• Distributed Garbage Collection• Integrates with CORBA (later)• BUT NOT IN J2ME!!! (use SOAP)
• J2ME CDC has an RMI profile!
Java RMI position Middleware
•Transaction-Oriented•IBM CICS•BEA Tuxedo•Encina
•Message-Oriented•IBM MQSeries•DEC Message Queue•NCR TopEnd•(SOAP)
•RPC Systems•ANSA•Sun ONC•OSF/DCE•(SOAP)
•Object-Oriented•OMG/CORBA•DCOM•Java/RMI•(SOAP)
Wire Protocol
• Java RMI wire protocol: • JRMP (Java Remote Method Protocol) OR• IIOP (Internet Inter-ORB Protocol) for CORBA
connectivity• Both build on top of TCP/IP• JRMP more advanced than IIOP
• Other Java RMI specification implementors• Historic: BEA Weblogic, Object Voyager, NinjaRMI• Object Voyager’s was JRMP compatible• Others were not• IIOP compatibility can not be guaranteed
Local Java call vs. Java RMI call
CalledCalledCalledCalled
StubStub
StubStubStubStub
CallerCaller
CalledCalledCalledCalled
CallerCallerCallerCaller
Transport Layer (e.g. TCP or UDP)Transport Layer (e.g. TCP or UDP)Transport Layer (e.g. TCP or UDP)Transport Layer (e.g. TCP or UDP)
Similar to SOAP and CORBA – using Proxy
InterfaceDefinition
Design
Server StubGeneration
Client StubGeneration
ServerCoding
ClientCoding
ServerRegistration
Development Steps – RMI & CORBA & SOAP
SOAP: WSDLSOAP: WSDLJava2WSDLJava2WSDL
WSDL2JAVAWSDL2JAVA
AXISSOAPAXISSOAP
RMI: JAVARMI: JAVA
J2SE JDKJ2SE JDK
Start with Server Interface Coding: JAVA
Start with Server Interface Coding: JAVA
rmiregistryrmiregistry
CORBACORBA
CORBA: IDLCORBA: IDL
CORBA: IDLCCORBA: IDLC
ORBORB
RMI: JAVA interfaceRMI: JAVA interface
C++, Java …C++, Java …
C++, Java …C++, Java …
RMI: rmicRMI: rmic
Team.wsdlTeam.wsdl
included ingeneratesreads
WSDL-compiler
Teamcl.hh
Teamcl.cc Teamsv.cc
Teamsv.hh
Stub Generation - in SOAP & CORBA
Team.idlTeam.idl
package examples.hello;
import java.rmi.Remote; import java.rmi.RemoteException;
public interface Hello extends Remote {String sayHello() throws RemoteException;void someOther(String param) throws RemoteException;
}
rmic Compiler
HelloImpl_Stub.class HelloImpl_Skeleton.class
Stub Generation in Java RMI
NOTE: In fact, it is theHelloImpl that is used!NOTE: In fact, it is theHelloImpl that is used!Hello.javaHello.java
Must Extend fromInterface RemoteMust Extend fromInterface Remote
From RMI v. 1.2 no skeleton is generatedFrom RMI v. 1.2 no
skeleton is generated
From Java v. 1.5 no rmic comp is neededFrom Java v. 1.5 no rmic comp is needed
Java compiler - javac
Server
HelloClient.javaHelloClient.javaHelloImpl.javaHelloImpl.java
Java compiler - javacJava compiler - javac
Client
Hello.javaHello.java
included ingeneratesreads
rmic Compiler
RMI Client and ServerImplementation
HelloImpl_Stub.classHelloImpl_Stub.class HelloImpl_Skeleton.classHelloImpl_Skeleton.class
package examples.hello;
import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException { super(); }
public String sayHello() {return "Hello World! ;
} public static void main(String args[]) { // Create and install a security manager //if (System.getSecurityManager() == null) { // System.setSecurityManager(new RMISecurityManager()); //} try { HelloImpl obj = new HelloImpl();
// Bind this object instance to the name "HelloServer" Naming.rebind("rmi://192.168.1.101/HelloServer", obj);
System.out.println("HelloServer bound in registry"); } catch (Exception e) { System.out.println("HelloImpl err: " + e.getMessage()); e.printStackTrace(); } } }
Server object(HelloImpl.java)
Security manager needs a security policy – for access control (i.e. file system).
Security manager needs a security policy – for access control (i.e. file system).
Instantiate a new object and register (bind it) in the ”rmiregistry”
Instantiate a new object and register (bind it) in the ”rmiregistry”
Implement all methodsfrom interface Hello.javaImplement all methods
from interface Hello.java
Extend UnicastRemoteand implemet Hello Interfacet
Extend UnicastRemoteand implemet Hello Interfacet
”rmiregistry” is a simpel name server with methods to bind objects (bind/rebind) – and
Find them again (lookup) –> client
”rmiregistry” is a simpel name server with methods to bind objects (bind/rebind) – and
Find them again (lookup) –> client
package examples.hello;
import java.rmi.Naming;import java.rmi.RemoteException;
public class HelloClient {
public static void main(String args[]) { try { Hello obj = (Hello)Naming.lookup("rmi://192.168.1.101/HelloServer"); String message = obj.sayHello(); System.out.println(message); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getMessage()); e.printStackTrace(); } }
}
”lookup” the HelloServer – and call Method sayHello() on Stub
”lookup” the HelloServer – and call Method sayHello() on Stub
Client object(HelloClient.java)
Remember – that the stuband skeleton classes get generated
by the ”rmic” compiler
Remember – that the stuband skeleton classes get generated
by the ”rmic” compiler
AND THAT’S IT!AND THAT’S IT!
Architecture
ServerClient
Stub RegistryInterfaces
Skeleton ActivationInterfaces
RMI Runtime (rmid,rmiregistry)
coded manuallycoded manually
rmic generatedrmic generated rmic generatedrmic generated
bindbindlookuplookup
Things to Remember
• No attributes / properties in Java Interfaces -> RMI does not support attributes
• Attributes must be represented as set and get operations by the designer
Things to remember II
• Parameter passing different than normal Java in single VM
• Atomic types are passed by value• Remote objects are passed by reference• Non-Remote objects are passed by value!• Reflexive: can return references to other objects• And of course – if an object is not on the client – the
ByteCode gets transferred (the class incl. implementation) – if a codebase is defined
Key Points
• True and beautiful OO Middleware• Easy to learn – for Java developers• No need for a separate IDL (use Java Interfaces)• Distributed Garbage Collection• ByteCode transfers automatically (if codebase is defined)• Works in heterogene environments – but only with Java• No build-in services (except for the registry)• Depends on other API’s – JavaSpaces, JINI, JDBC, EJB, JDO
etc. – integrated into a framework• Not ”firewall friendly”
Exercise
• Discuss for 20 minutes:• At your table 2 and 2• How Access Transparent is Java RMI?• How Location Transparent?• How about the other levels of transparency?• How is Heterogenity supported?• Where might Java RMI be used?• What deployment issues do you see?• Strengths & Weakness’ compared to Web services
• Plenum:• Let’s discuss your results
Excerice 2
• Discuss for 15 minutes• In your assignment groups:• Map out and discuss how you may extend your code
design from assignment 2 – to include a Java RMI façade (server-side)
• Discuss what you should change in your Java clients to use Java RMI as well as Web services
• Discuss how you might get your .NET or C++ client to communicate with Java RMI
• Plenum:• Let’s discuss your results