Lecture 13
Download
1 / 52

Lecture 13 - PowerPoint PPT Presentation


  • 128 Views
  • Uploaded on

CS441 CURRENT TOPICS IN PROGRAMMING LANGUAGES. Lecture 13. George Koutsogiannakis/Summer 2011. Topics. Performance comparison between RMI and RMI over IIOP. Example of Applet and Servlet Communications. Example of applet/servlet/RMI over IIOP server communications.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Lecture 13' - maine


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Lecture 13

CS441

CURRENT TOPICS IN PROGRAMMING LANGUAGES

Lecture 13

George Koutsogiannakis/Summer 2011


Topics
Topics

  • Performance comparison between RMI and RMI over IIOP.

  • Example of Applet and Servlet Communications.

  • Example of applet/servlet/RMI over IIOP server communications.

  • Java Beans in Standard Edition jdk.

  • Using Net Beans


Rmi and rmi over iiop performance
RMI and RMI over IIOP Performance

  • In general RMI over IIOP is slower than RMI because of :

    • The IDL conversions needed.

    • The additional layers in the architecture of RMI over IIOP.

  • It is, however, depended on the amount of data transferred during each invocation, and the type of data being transferred.

    • IIOP packets can carry more data than RMI packets (approximately 80% more).

    • The set up for the packets is, however, greater for IIOP than it is for RMI (because of the additional layers).


Rmi and rmi over iiop performance1
RMI and RMI over IIOP Performance

  • There is a point where for large amounts of data transfers IIOP can become more efficient than RMI but it also depends on the number of invocations that need to be made.

  • Because of the Distributed Garbage Collector RMI invocations can take a longer time than RMI over IIOP invocations.

  • Therefore for large amounts of data to be transferred over a small number of invocations ,RMI over IIOP may be more effective.


Rmi and rmi over iiop performance2
RMI and RMI over IIOP Performance

Time

increases

RMI over IIOP

RMI

Size of data increases

This graph applies for a specific data type of data


Example of applet and servlet communications
Example of Applet and Servlet Communications

  • The following example illustrates how an applet (client side execution) can communicate with a servlet (server side execution).

    • The example web application is called LoginAppletNORMI and it is posted on the examples page of the course ‘s web site.

  • Architecture:

Web Server

Web App: LoginAppletNORMI

LoginApplet.html

LoginApplet.jar

WEB-INF

web.xml

classes

TestLoginServlet .class

Browser


Example of applet and servlet communications1
Example of Applet and Servlet Communications

  • Develop web application outside Tomcat in some folder with the name of the web application:

    • i.e. folder name: LoginAppletNORMI

  • jar the applet .class files and place them in the web application folder.

  • Make sure that you have the directory structure required for a web application:

    • i.e WEB-INF folder with the web.xml inside and another folder name d: classes.

    • Place the servlet class in the classes folder.

    • You can also create a folder named lib and place a copy of the jar file there.


Example of applet and servlet communications2
Example of Applet and Servlet Communications

  • Create a war file:

    • Open a DOS window with the path inside the web application folder. Type the command:

      >C:\web application folder> jar LoginAppletNORMI.war .

    • Notice that the name of the war file war file is the same as the name of the web application folder.

  • Go to: http://localhost:8080/manager and log in as an administrator.

    • At the bottom of the page browse to where the war file is located and then press deploy.

    • You web application is now deployed in Tomcat.


Example of applet and servlet communications3
Example of Applet and Servlet Communications

  • You can now test it by:

    • Opening a Browser instance and typing:

      http://localhost:8080/LoginAppletNORMI/LoginApplet.html.


Example of applet and servlet communications4
Example of Applet and Servlet Communications

  • LoginApplet.html file:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    <html>

    <head>

    <title>Untitled</title>

    </head>

    <body><p>I am calling Applet</p>

    <applet code="LoginApplet.class" archive="LoginApplet.jar” Width="500" Height="500"></applet>

    </body>

    </html>


Example of applet and servlet communications5
Example of Applet and Servlet Communications

LoginApplet.java code:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.net.*;

import java.io.*;

public class LoginApplet extends JApplet

{

Container c;

JTextField ltf=new JTextField();;

String login;

JButton exitbutton, submitbutton;


Example of applet and servlet communications6
Example of Applet and Servlet Communications

public void init()

{

c=getContentPane();

ltf.setEditable(true);

BorderLayout bl=new BorderLayout();

setLayout(bl);

c.add(ltf, BorderLayout.NORTH);

exitbutton=new JButton("Exit");

MyPanel mp=new MyPanel();

c.add(exitbutton, BorderLayout.SOUTH);

c.add(mp, BorderLayout.CENTER);

Handler h=new Handler();

ltf.addActionListener(h);

submitbutton.addActionListener(h);

exitbutton.addActionListener(h);

}


Example of applet and servlet communications7
Example of Applet and Servlet Communications

class MyPanel extends JPanel

{

public MyPanel()

{

submitbutton=new JButton("Submit");

add(submitbutton);

}

}


Example of applet and servlet communications8
Example of Applet and Servlet Communications

class Handler implements ActionListener

{

public void actionPerformed(ActionEvent e){

if(e.getSource()==exitbutton){

System.exit(0);

}

else if(e.getSource()==submitbutton){

System.out.println("Inside handler for submit button");

try{

login=ltf.getText();

URL url=new URL("http://localhost:8080/LoginAppletNORMI

/TestLoginServlet?loginname="+login);

URLConnection uc=url.openConnection();

uc.setDoOutput(true);

uc.setDoInput(true);

ltf.setText("I sent info to servlet");

InputStreamReader instream=new InputStreamReader(uc.getInputStream());

BufferedReader in=new BufferedReader(instream);

ltf.setText("I am reading input stream now");


Example of applet and servlet communications9
Example of Applet and Servlet Communications

String line;

while((line=in.readLine())!=null)

{

ltf.setText(line);

}

in.close();

System.out.println("I finished try block. Name="+" "+login);

}

catch(MalformedURLException exception){ltf.setText("Malformed exc."); }

catch(IOException exception){ltf.setText("IO exc."+exception.getMessage());}

System.out.println("I finished actionPerformed");

}

}

}

}


Example of applet and servlet communications10
Example of Applet and Servlet Communications

TestLoginServlet.java code:

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class TestLoginServlet extends HttpServlet

{

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException

{

String login=req.getParameter("loginname");

res.setContentType("text/html");

PrintWriter out=res.getWriter();

if(login.equals("george"))

out.println("The servlet verifies that your name is:"+login);

else

out.println("Wrong login name. Please try again");

out.close();

}

}


Example servletloginapplet web application
Example: ServletLoginApplet web application

  • This example simulates the communications between an applet and a servlet which acts as a client for an RMI over IIOP server.

  • The applet sends a request to the servlet.

  • The servlet in turn is a client to an RMI server. It sends a request to the RMI server. The RMI server returns a response to the servlet which in turn sends a response to the applet.


Example servletloginapplet web application1
Example: ServletLoginApplet web application

  • This application requires that:

    • Deployment in Tomcat of the web application part

      • A signed jar file for the applet.

      • A html file that calls the signed applet via the archive attribute of the applet tag.

      • A servlet under the WEB-INF/classes path.

      • The class ReverseInterface.class under the WEB-INF/classes path.

        • This is the interface file from the RMI over IIOP server


Example servletloginapplet web application2
Example: ServletLoginApplet web application

  • The stub file from the RMI over IIOP server called:

    _ReverseInterface_stub.class under the path WEB-INF/classes

  • A web.xml file under the WEB-INF folder.

  • Deploy using a war file as in previous example.

  • The RMI over IIOP server classes (interface, implementation class tie class etc.) should reside in a path outside of Tomcat.


  • Example servletloginapplet web application3
    Example: ServletLoginApplet web application

    • To test the web application certain tasks have to be done in the proper sequence:

      • From the folder where the RMI over IIOP server is located start an instance of the naming service (registry):

        C:\........>tnameserv –ORBInitialPort

      • Next start the RMI over IIOP server:

        C:\>……>java Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory -Djava.naming.provider.url=iiop://localhost:900 ReverseInterfaceImpl


    Example servletloginapplet web application4
    Example: ServletLoginApplet web application

    • Next, start an instance of the Browser and type:

      http://localhost:8080/ServletRMIIIOP/IIOPLoginApplet.html


    Example servletloginapplet web application5
    Example: ServletLoginApplet web application

    Applet streams (POST HTTP request)

    URL url=new URL("http://localhost:8080/ServletRMIIIOP/IIOPTestLoginServlet");

    qr="qr="+URLEncoder.encode(query);

    textarea.append("\n"+"The applet displays"+qr+"\n");

    URLConnection uc=url.openConnection();

    uc.setDoOutput(true);

    uc.setDoInput(true);

    uc.setUseCaches(false);

    ByteArrayOutputStream bytestream=new ByteArrayOutputStream(512);

    PrintWriter out=new PrintWriter(bytestream,true);

    out.print(qr);

    out.flush();

    //POST requests are required to have Content Length

    String lengthString=String.valueOf(bytestream.size());

    uc.setRequestProperty("Content-Length", lengthString);

    uc.setRequestProperty("Content-type", "application/x-www-form-urlencoded");

    bytestream.writeTo(uc.getOutputStream());

    out.flush();

    out.close();


    Example servletloginapplet web application6
    Example ServletLoginApplet web application

    InputStreamReader in=new InputStreamReader(uc.getInputStream());

    int chr=in.read();

    while(chr!=-1)

    {

    textarea.append(String.valueOf((char)chr));

    chr=in.read();

    }

    in.close();

    System.out.println("I finished try. Name="+" "+query);

    }

    catch(MalformedURLException exception){textarea.setText(e.toString()); }

    catch(IOException exception){textarea.setText(e.toString());}

    System.out.println("I finished actionPerformed");

    }


    Example servletloginapplet web application7
    Example: ServletLoginApplet web application

    Servelt code:

    import javax.naming.*;

    import java.util.*;

    public class IIOPTestLoginServlet extends HttpServlet

    {

    protected void doPost(HttpServletRequest req, HttpServletResponse res)

    throws ServletException, IOException

    {

    String qr=req.getParameter("qr");

    String loginmod="The name is:"+" "+qr+" "+"Therefore the servlet works with doPost";

    res.setContentType("text/html");

    PrintWriter out=res.getWriter();

    out.println(loginmod);

    out.println("The servlet captured the value of qr="+qr);


    Example servletloginapplet web application8
    Example: ServletLoginApplet web application

    ReverseInterface r;

    Hashtable env=new Hashtable();

    env.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");

    env.put("java.naming.provider.url", "iiop://localhost:900");

    try{

    out.println("TRYING TO CONTACT REGISTRY");

    Context initialNamingContext=new InitialContext(env);

    out.println("obtained InitialContext");

    r=(ReverseInterface)PortableRemoteObject.narrow(

    initialNamingContext.lookup("Reverse"), ReverseInterface.class);

    out.println("The registry lookup was successful");

    out.println("the opposite of "+qr+"is"+r.reverseString(qr));

    }

    catch (Exception e) {

    out.println("Error executing remote method or lookup 1:30 p.m.");

    out.println(e.toString());}

    out.close();

    }


    Example servletloginapplet web application9
    Example ServletLoginApplet web application

    RMI over IIOP server

    import java.rmi.Remote;

    import java.rmi.RemoteException;

    public interface ReverseInterface extends Remote

    {

    String reverseString(String originalstring) throws RemoteException;

    }


    Example servletloginapplet web application10
    Example ServletLoginApplet web application

    import java.rmi.*;

    import java.rmi.server.*;

    //add the lines below

    import javax.rmi.PortableRemoteObject;

    import javax.naming.*;

    import java.net.*;

    import javax.naming.Context;

    import javax.naming.InitialContext;

    import javax.naming.NamingException;

    public class ReverseInterfaceImpl extends PortableRemoteObject implements ReverseInterface

    {

    public ReverseInterfaceImpl() throws RemoteException

    {

    super();

    }


    Example servletloginapplet web application11
    Example ServletLoginApplet web application

    public String reverseString(String originalstring) throws RemoteException

    {

    int length=originalstring.length();

    StringBuffer temp=new StringBuffer(length);

    for (int i=length; i>0; i-- )

    {

    temp.append(originalstring.substring(i-1,i));

    }

    return temp.toString();

    }


    Example servletloginapplet web application12
    Example ServletLoginApplet web application

    public static void main(String[] args){

    try{

    ReverseInterfaceImpl r= new ReverseInterfaceImpl();

    Context initialNamingContext=new InitialContext();

    System.out.println("Binding server to registry..");

    initialNamingContext.rebind("Reverse",r);

    System.out.println("Object was registered");

    }

    catch(Exception e) {

    System.out.println("Error while binding object 11:00am");

    System.out.println(e.toString());

    }

    System.out.println("The RMI server is up and Running!");

    }

    }


    Example servletloginapplet web application13
    Example ServletLoginApplet web application

    Command to start RMI over IIOP server:

    C:\.....>java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory

    -Djava.naming.provider.url=iiop://localhost:900 ReverseInterfaceImpl

    Command to compile server with rmic compiler:

    C:\......>rmic -iiop ReverseInterfaceImpl

    Notice that the rmic command should be done after the server file has been compiled with the normal javac compiler.


    Java beans
    Java Beans

    • The Java Beans architecture is based on the component model.

      • Components are self sustained reusable software modules.

    • The idea behind Java Beans is that we can introduce customization of the component during run time (dynamically).

    • Java Beans Architecture promotes reusability but it is different than inheritance. Inheritance is introduced at compilation time. Any changes result to recompilation.

      • Java Beans, however, have their properties changed by another class dynamically during run time.

      • A java Bean can be used by another Java Bean thus resulting in a new Java Bean which is the combination of the two.

    • Java Beans expose their properties to other Beans.


    Java beans1
    Java Beans

    • Internal workings of the Java Bean are hidden from the user.

    • All the user needs to know is what functionality the Bean offers and what interface it provides.

      • The user can access and set properties of the Bean as needed during run time.

    • In Java Standard Edition Beans are supported via the packages:

      • java.beans

      • java.beans.beancontext

    • Other languages have similar concept to Beans such as Delphi and Visual Basic.


    Java beans2
    Java Beans

    Bean B

    Bean A

    Bean C

    Bean C combines the functionality of Bean A and Bean B


    Java beans3
    Java Beans

    • To write a Java Bean we need:

      • Rules that ensure consistency in writing interfaces: i.e accessor method names begin with get, mutator methods begin with set.

        • Bean properties must use get /set followed by the property’s name i.e. String LastName; public String getLastName();

        • Properties of a Bean can be:

          • Simple: String LastName ( contains a single value) .

          • Indexed: to keep track of the values of a group of properties.

          • Bound: alert other objects when its value changes.

          • Constrained: notifies other objects of impending changes

          • Read/Write, read-only, write-only


    Java beans4
    Java Beans

    • An event handling model.

    • Persistence. Retaining information about the state of an object.

    • Introspection: Discover how to access other Java Bean components.

    • We need support from a Builder IDE. The IDE will allow connection of Java Beans to produce the final application. Such an IDE can be NetBeans.


    Java beans5
    Java Beans

    • Introspector class

      • java.beans.Introspector provides a standard way for building tools to learn about the properties, events and methods supported by a target java bean.

      • The introspector will analyze the bean’s class and superclass looking for its accessor and mutator methods, event methods and so on.

      • Introspection will also look for explicit information that can be provided about a Bean via a BeanInfo class provided by the developer of the Bean.



    Java beans7
    Java Beans

    • For example, the builder tool in the previous slide shows a calculator component that is built from:

      • 16 button components,

      • a text field component,

      • and a panel upon which the buttons and a text display are placed.

      • In addition, you can see five invisible components. These specific components hold values or strings used by the calculator for intermediate calculations, operation codes, and display strings, as well a boolean flag to determine when evaluation of a new expression is started.

    • The calculator shown becomes itself a component that can be integrated in another application


    Java beans8
    Java Beans

    • More information about Java Beans is provided in the Java Beans Specification available at:

      http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html


    Java beans9
    Java Beans

    • To create a simple Bean and import it in a tool like Net Beans :

      • Create the Java Bean program. Notice that all Java Bean classes must be serializable.

      • Create a Manifest File

      • Jar the files

      • Import into the tool

        Note: A Java Bean can also be created outside the builder tool by having the developer write the code for it.


    Creating a java bean programmatically
    Creating A Java Bean programmatically

    • Java Beans are normally stored and distributed in jar files.

      • The jar file must contain a manifest file which describes the contents of the jar file.

        • Contents are defined under specific headers in the manifest file.

        • The manifest file is read by the IDE (Builder) tool when we load the Bean on the IDE.

        • To create the manifest file we can use a text editor i.e

          Main-Class: folder1.folder2.MyBean

          Name: folder1.folder2.MyBean.class

          Java-Bean: True

        • The file needs to be saved as manifest.tmp.

          >jar cmf manifest.tmp MyBean.jar MyBean.class

        • The jar utility uses the file manifest.tmp to create the file MANIFEST.MF and place it in a directory called META-INF inside the jar.

          Note: The jar file can also become an executable. In other words we can execute the program just by double clicking on the icon of the jar file (at least in Windows platforms).


    Creating a java bean programmatically1
    Creating A Java Bean programmatically

    • To confirm the file is in the jar use the command:

      >jar tvf MyBean.jar

    • The jar file can also be executed via the command:

      > java –jar MyBean.jar


    Development environments
    Development Environments

    • There are Development Environments for learning purposes.

      • A tool like that was the BDK-Bean Development Kit (not available any more) offered by SUN

      • Another tool like that offered is the BeanBuilder available at:

        https://bean-builder.dev.java.net/

    • Neither of these tools is suitable for a production environment


    Net beans ide
    Net Beans IDE

    • An IDE that allows the creation of GUIs via drop and drag actions.

    • The creation of Enterprise Java Beans.

    • A small example of how the Net Beans IDE can be used to create a GUI is described in file: netbeansGUI.doc posted in the examples page of the course’ s web site.


    Net beans ide1
    Net Beans IDE

    • Install NetBeans 6.5 or higher from the netbeans.org site. Use the choice that includes all.

    • Before installation make sure:

      • That you have installed Java SDK with EE.


    Net beans ide2
    Net Beans IDE

    • During installation of NetBeans:

      • Make sure that you choose the customization choice:

        • Add Tomcat as part of the installation

      • Make sure that you choose the SDK/jdk path as the jdk to be used by NetBeans.

        • Check PATH variable to make sure that is shown as SDK/bin


    Net beans ide3
    Net Beans IDE

    • Make sure that you record all port numbers and passwords.

    • The Tomcat passwords need to be recorded. If for some reason you forget you can recover the Tomcat passwords from file:

      C:\Users\YourUserNamefor your system\.netBeans\6.5\apatche-tomcat-6.0.18_base\conf\tomcat-users.xml


    Net beans ide4
    Net Beans IDE

    • After NetBeans installation is completed:

      • Go to services and right click to add the GlassFish 2 server as a server (or GlassFish 3).

      • You will be asked to create a Domain for your applications. Choose “Create Personal Domain”.


    Net beans ide5
    Net Beans IDE

    • Create a Folder C:\GlassFishDomains in windows explorer first.

    • In the NetBeans window type:

      C:\GlassFishDomains\Domains

    • The system will create the folder Domains and place the required files in it.

    • You will be asked to create a password to access the administrative console of GlassFish.


    Net beans ide6
    Net Beans IDE

    • Make a note of the system paths to the various installations.

    • Make a note of port numbers

      • i.e due to conflicts with exiting usages of port numbers Tomcat make work in port 8084 now.

    • If you deploy a web application using GlassFish, then you do not need to deploy it in Tomcat also.


    Net beans ide7
    Net Beans IDE

    • Notice that under services Tomcat and GlassFish appear as separate services.

      • i.e. You can deploy a web service that does not have beans in it in Tomcat and not bother with GlassFish.

      • You will deploy on Tomcat using the manager page of Tomcat and a war file.


    Study guide
    Study Guide

    • Study slides.

    • Suggest that you experiment with Bean Builder tool.

    • Download and start experimenting with Net Beans


    ad