new - mwt labmanual v 2.0
DESCRIPTION
mwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt labmwt lab manual manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt labmwt lab manual manualmwt lab manuamwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt labmwt lab manual manualmwt lab manuamwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt labmwt lab manual manualmwt lab manuamwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt lab manualmwt labmwt lab manual manualmwt lab manuaTRANSCRIPT
B.E. 4/4 – I semester
BIT 432 MIDDLEWARE TECHNLOGIES LABORATORY
List of Experiments Prescribed by Osmania University
1. Creation of a Distributed Name Server, using RMI
2. Creation of a Java Bean application for displaying graphical shapes
3. Developing an EJB for Student Information System.
4. Developing an EJB for Library Information System.
5. Creation of an ActiveX control for Time Table.
6. Developing a component for converting currency values using COM/.NET.
7. Developing a component for browsing the CD catalog using COM/.NET
8. Developing a component for retrieving information from message box using
DCOM/.NET.
9. Developing a Middleware component for retrieving Stock Market Exchange
information using CORBA
10. Developing a Middleware component for retrieving Bank Balance using CORBA.
Page 1 of 88
MIDDLEWARE TECHNOLOOGIES LAB
CONTENTS
S No Title Pg No
1 Creation of a Distributed Name Server, Using RMI 3
2 Creation of a Distributed Name Server, Using RMI to design a calculator 11
3 Creation of Distributed Name Server Using RMI to Access the Database
Server
17
4 Creation of a Java Bean Application for Displaying Graphical Shapes using
BDK
23
5 Creation of a Java Bean Application for Displaying Graphical Shapes without
using BDK
28
6 Developing an EJB for Displaying a Message Using Stateless Session Bean 32
7 Developing an EJB for a Calculator Using Stateless Session Bean 38
8 Developing an EJB for Student Information system Using Stateless Session
Bean
45
9 Developing an EJB for Library Information system Using State full Session
Bean
52
10 Creation of an Active-x Control for Time Table 60
11 Developing A Component for Converting Currency Values Using COM/.NET 63
12 Developing a Component for Browsing the CD Catalog Using COM/.NET 65
13 Developing a Component for Retrieving Information from Message Box
Using DCOM/.NET
68
14 Developing a Middleware Component for Retrieving Message from Server
Using CORBA
70
15 Developing a Middleware Component for Retrieving Stock Market Exchange
Information Using CORBA
76
16 Developing a Middleware component for retrieving Bank Balance using
CORBA
81
Page 2 of 88
1. Creation of a Distributed Name Server, Using RMI.
AIM: Creation of a Distributed Name Server, Using RMI for displaying the string on
client console.
Software Required: J2SDK 1.4 or above, RMI compiler, JAVA compiler, JAVA
runtime, Notepad
Theory:
Remote Method Invocation (RMI)
1. In Java distributed object model, a remote object is one whose methods can be
invoked from another Java Virtual Machine.
2. Allows object-to-object communication between Java Virtual Machines.
3. RMI is the action of invoking a method of a remote interface on a remote
object.
4. A remote object is always accessed via its remote interface.
5. In RMI the terms ‘server’ and ‘client’ refer to objects, but not physical
machines.
6. The stubs/skeletons layer intercepts method calls made by the client to the
interface reference and redirects these calls to a remote object. Stubs are specific to
the client side, whereas, skeletons are found on the server side.
7. The remote reference layer handles the details relating to interpreting and
managing references made by clients on the remote objects. It connects clients to
remote objects that are running and exported to a server by a one-to-one connection
link.
8. The transport layer is based on TCP/IP connections between machines in a
network.
Algorithm:
Page 3 of 88
Remote Method Invocation (RMI)
Allows object-to-object communication between Java Virtual Machines.
RMI is the action of invoking a method of a remote interface on a remote object.
A remote object is always accessed via its remote interface.
In RMI the terms ‘server’ and ‘client’ refer to objects, but not physical machines.
Procedure:
The basic steps involved in writing client-server applications using RMI:
1. Defining a remote interface
2. Implementing the remote interface
3. Writing the client that uses the remote objects
4. Connecting stubs and skeletons
5. Starting the registry and registering the object
6. Running the server and the client.
Defining the Remote interface:
1. The remote interface must be declared public
2. The remote interface must extend java.rmi.Remote interface
3. Each method must throw a java.rmi.RemoteException
Page 4 of 88
Client invoking method on the remote object
Stub
Remote Reference Layer
TCP
IP
Hardware Interfaces
Remote Object on Server
Skeleton
Remote Reference Layer
TCP
IP
Hardware InterfacesPhysical Layer
4. If the remote methods have any remote objects as parameters or return
types, they must be interface types not the implementation classes.
5. java.rmi.Remote interface has no methods
Programming:
// Program to create a remote interface
import java.rmi.*;
public interface MyRemoteInterface extends java.rmi.Remote
{
public String displayDate() throws RemoteException;
}
Implementing the Remote Interface:
1. The implementation class provides the implementation for methods defined in the
remote interface.
2. The generic java.rmi.server.RemoteObject is an abstract class and describes the
behavior for remote objects.
3. The abstract class java.rmi.server.RemoteServer describes the behavior associated
with the server implementation and provides the basic semantics to support remote
references.
4. java.rmi.server.RemoteServer has two subclasses :
java.rmi.server.UnicastRemoteObject
java.rmi.activation.Activatable
// Program for implementation of the Remote Interface
import java.io.*;
import java.util.Date;
import java.rmi.server.*;
import java.rmi.*;
public class MyImplementor extends UnicastRemoteObject implements
MyRemoteInterface
{
Page 5 of 88
public MyImplementor() throws RemoteException
{
super();
}
public String displayDate() throws RemoteException
{
System.out.println(“Hello! The date is “ + new Date());
}
}
A remote class can define any methods, but only methods in th remote interface can be
invoked remotely.
The Client application
// Program to generate the client
import java.rmi.*;
import java.io.*;
public class MyRemoteClient
{
public static void main(String[] args)
{
/*if (System.getSecurityManager() == null)
{
System.setSecurityManager(new SecurityManager());
}*/
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
try
{
System.out.println("Enter IP Address: ");
String ipaddr = br.readLine();
/*System.out.println("Enter value2 : ");
Page 6 of 88
int value2 = Integer.parseInt(br.readLine());
System.out.println("The values are : " + value1 + " " + value2);
MyRemoteServer mobj = new MyRemoteServer();
Naming.rebind("/MyRemoteServer",mobj);*/
MyRemoteInterface mobj = (MyRemoteInterface)
Naming.lookup("rmi://localhost:1099/RemoteService");
String msg1 = mobj.displayDate();
String msg2 = mobj.displayHostname(ipaddr);
System.out.println(msg1);
System.out.println(msg2);
}
catch (RemoteException re)
{
System.err.println("Client Exception : " + re);
}
catch (IOException ioe)
{
System.err.println("The exception is : " + ioe);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
The Server application
// Program to implement the remote interface
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
import java.rmi.Naming;
Page 7 of 88
public class MyRemoteServer
{
public MyRemoteServer()
{
try
{
MyRemoteInterface c = new MyRemoteImplementer();
Naming.rebind("rmi://localhost:1099/RemoteService", c);
}
catch (Exception e)
{
System.out.println("Trouble: " + e);
}
}
public static void main(String args[])
{
new MyRemoteServer();
}
}
javac *.java – to compile all the java files
rmic Myimplementor – to generate stubs and skeletons
start rmiregistry
java MyRemoteServer
java MyRemoteClient
Observations:
The actual DNS application involves the following modifications to the above mentioned
sample program:
Page 8 of 88
1) The services to be provided are to be declared in the remote interface declared by the
user. The services could be: getIPAddress, getDomainName, returnIPAddress,
returnDomainName
2) The above-mentioned services are to be implemented in the implementer class. As
part of implementation the database is to be accessed to retrieve the DNS information,
for which JDBC is to be made use of.
3) The client program would have code to get connected to the server and make the
remote calls to the server for the required services.
4) The server program would create an instance of the remote implementer and would
provide the services requested services to the client.
Steps to be followed for execution:
1) All the programs are to be compiled using the command javac.
2) The stub is to be generated by compiling the implementer class using the
command rmic <implementerclassname>.
3) The RMI registry service is then started using the command :
start rmiregistry.
4) Then the server is registered with the RMI registry by running the server program
using the command java.
5) The client is also then run using the command java.
Result: If the input to the application is an IP Address, then, it should return back the
Domain Name and vice versa.
Page 9 of 88
PreLab Questions:
1. Why do we get an exception for an unexpected hostname and/or port number when
we call Naming.lookup?
2. Do we need to install the XXX_Stub file in the client's CLASSPATH?
3. Does RMI require use of HTTP server?
4. Why we get ClassNotFoundException?
5. Will there be debugging mechanisms built into RMI?
6. Why do we get a java.lang.ClassMismatchError while running the program?
7. While sending an array of remote objects and receive an ArrayStoreException.
What's going on?
8. If we get a ClassNotFoundException for stub class when we try to register a remote
object in the registry. What's happening?
9. If server is died. Can we get a trace of the server activity?
Page 10 of 88
2. Creation of a Distributed Name Server, Using RMI to design a calculator
AIM: Creation of a Distributed Name Server, Using RMI for adding two numbers
(passed by client) on the server console and to return the value to client console.
Software Required: J2SDK 1.4 or above, rmi compiler, java compiler, Notepad
Theory:
Remote Method Invocation (RMI)
1. In Java distributed object model, a remote object is one whose methods can be
invoked from another Java Virtual Machine.
2. Allows object-to-object communication between Java Virtual Machines.
3. RMI is the action of invoking a method of a remote interface on a remote object.
4. A remote object is always accessed via its remote interface.
5. In RMI the terms ‘server’ and ‘client’ refer to objects, but not physical machines.
6. The stubs/skeletons layer intercepts method calls made by the client to the interface
reference and redirects these calls to a remote object. Stubs are specific to the client
side, whereas, skeletons are found on the server side.
7. The remote reference layer handles the details relating to interpreting and managing
references made by clients on the remote objects. It connects clients to remote objects
that are running and exported to a server by a one-to-one connection link.
8. The transport layer is based on TCP/IP connections between machines in a network.
Page 11 of 88
Procedure:
The basic steps involved in writing client-server applications using RMI:
1. Defining a remote interface
2. Implementing the remote interface
3. Writing the client that uses the remote objects.
4. Creating and Connecting stubs and skeletons.
5. Starting the registry and registering the object.
6. Running the server and the client.
Programming:
Defining the Remote interface:
1. The remote interface must be declared public.
2. The remote interface must extend java.rmi.Remote interface.
3. Declare a remote method double add (double b1, double b2).
4. Each method must throw a java.rmi.RemoteException
5. java.rmi.Remote interface has no methods
// Program to create a remote interface
import java.rmi.*;
public interface AddServerIntf extends Remote {
double add(double d1, double d2) throws RemoteException;
}
Implementing the Remote Interface, and binding the remote object with registry:
1. The implementation class provides the implementation for methods defined in the
remote interface.
2. The generic java.rmi.server.RemoteObject is an abstract class and describes the
behavior for remote objects.
3. The abstract class java.rmi.server.RemoteServer describes the behavior associated
with the server implementation and provides the basic semantics to support remote
references.
4. Provide a default constructor to handle the exceptions thrown by super class.
Page 12 of 88
5. Implement the method double add(double b1, double b2).
6. In main() method create the new object for the class and invoke the
rebind(“BindName”, object) method on Naming class.
// Program for implementation of the remote Interface and binding the remote
object with the RMI Registry
import java.rmi.*;
import java.rmi.server.*;
public class AddServerImpl extends UnicastRemoteObject
implements AddServerIntf {
public AddServerImpl() throws RemoteException {
}
public double add(double d1, double d2) throws RemoteException {
}
public static void main(String args[]) {
try {
AddServerImpl addServerImpl = new AddServerImpl();
Naming.rebind("AddServer", ServerImpl);
}
catch(Exception e) {
System.out.println("Exception: " + e);
}
}
}
A remote class can define any methods, but only methods in the remote interface can be
invoked remotely.
The Client application:
1. The client application must import java.rmi packeage.
2. Create the object reference for remote interface by invoking the lookup() method on
Naming Interface by passing the object bindName as a parameter.
3. Perform the casting to Interface type.
4. Enter the values to be added.
Page 13 of 88
// Program to generate the client
import java.rmi.*;
public class AddClient {
public static void main(String args[]) {
try {
AddServerIntf addServerIntf =
(AddServerIntf)Naming.lookup(addServerURL);
System.out.println("The first number is: " + args[1]);
double d1 = Double.valueOf(args[1]).doubleValue();
System.out.println("The second number is: " + args[2]);
double d2 = Double.valueOf(args[2]).doubleValue();
System.out.println("The sum is: " + addServer.add(d1, d2));
}
catch(Exception e) {
System.out.println("Exception: " + e);
}
}
}
Steps to be followed for execution:
1. All the programs are to be compiled using the command javac.
2. The stub is to be generated by compiling the implementer class using the command
rmic <implementerclassname>.
3. The RMI registry service is then started using the command : start rmiregistry.
4. Then the server is registered with the RMI registry by running the server program
using the command java.
5. The client is also then run using the command java.
Observations:
1. The actual DNS application involves the following modifications to the above
mentioned sample program:
Page 14 of 88
2. The services to be provided are to be declared in the remote interface declared by
the user. The services could be: getIPAddress, getDomainName, returnIPAddress,
returnDomainName
3. The above-mentioned services are to be implemented in the implementer class. As
part of implementation the database is to be accessed to retrieve the DNS
information, for which JDBC is to be made use of.
4. The client program would have code to get connected to the server and make the
remote calls to the server for the required services.
5. The server program would create an instance of the remote implementer and
would provide the services requested services to the client.
Result: If the input to the application is an IP Address, then, it should return back the
Domain Name and vice versa.
PreLab Questions:
1. Where can we find a list of system properties that might be useful for implementing
and debugging RMI applications?
Page 15 of 88
2. How do RMI clients contact remote RMI servers?
3. Why does remote method or "callback" routine fail with a nested
java.net.UnknownHostException?
4. How does RMI obtain a server hostname in each of the versions of the JDK?
5. Why do Naming.bind and Naming.lookup take an extraordinarily long time on
Windows?
6. Why do we get the exception "java.net.SocketException: Address already in use"
when we try to run the registry?
7. How can we use RMI through a firewall?
8. How can we make outgoing RMI calls through a local firewall?
9. How can we receive incoming RMI calls through a local firewall?
Page 16 of 88
3. Creation of Distributed Name Server Using RMI to Access the Database Server
AIM: Creation of a Distributed Name Server, Using RMI for accessing the oracle
database server using jdbc type 4 driver to retrieve the table data.
Software Required: J2SDK 1.4 or above, RMI compiler, JAVA compiler, JAVA
runtime, Notepad, Oracle 9i and above, jdbc type 4 driver
Theory:
Remote Method Invocation (RMI)
1. In Java distributed object model, a remote object is one whose methods can be
invoked from another Java Virtual Machine.
2. Allows object-to-object communication between Java Virtual Machines.
3. RMI is the action of invoking a method of a remote interface on a remote object.
4. A remote object is always accessed via its remote interface.
5. In RMI the terms ‘server’ and ‘client’ refer to objects, but not physical machines.
6. The stubs/skeletons layer intercepts method calls made by the client to the interface
reference and redirects these calls to a remote object. Stubs are specific to the client
side, whereas, skeletons are found on the server side.
7. The remote reference layer handles the details relating to interpreting and managing
references made by clients on the remote objects. It connects clients to remote objects
that are running and exported to a server by a one-to-one connection link.
8. The transport layer is based on TCP/IP connections between machines in a network.
Page 17 of 88
Procedure:
The basic steps involved in writing client-server applications using RMI:
1. Defining a remote interface
2. Implementing the remote interface
3. Writing the client that uses the remote objects
4. Connecting stubs and skeletons
5. Starting the registry and registering the object
6. Running the server and the client.
Programming:
Defining the Remote interface:
1. The remote interface must be declared public
2. The remote interface must extend java.rmi.Remote interface
3. Each method must throw a java.rmi.RemoteException
4. Declare a method in interface String details() to give the rows of the table to client.
5. java.rmi.Remote interface has no methods
// Program to create a remote interface
public interface DbIface extends java.rmi.Remote
{
public String details() throws java.rmi.RemoteException;
}
Implementing the Remote Interface:
1. The implementation class provides the implementation for methods defined in the
remote interface.
2. The generic java.rmi.server.RemoteObject is an abstract class and describes the
behavior for remote objects.
3. The abstract class java.rmi.server.RemoteServer describes the behavior associated
with the server implementation.
4. The class must import java.sql package for necessary database calls.
5. Load the driver class by invoking Class.forName(“The Driver Class to be loaded”).
Page 18 of 88
6. Obtain the connection with database by invoking
getConnection(url,userid,password) on DriverManager Interface.
7. Send the SQL statements to DB Engine using excuteQuery(“SQL Statement”).
8. Access the database rows using ResultSet interface
// Program for implementation of the remote Interface
import java.rmi.*;
import java.rmi.server.*;
import java.sql.*;import java.io.*;import java.util.*;
public class DbImpl extends UnicastRemoteObject
{
public DbImpl() throws RemoteException
{ }
public String details()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException ce){
System.out.println("Unable to find the driver");
}
try
{
Connection
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521 ","scott","tiger");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select *from emp");
while(rs.next())
{
String name=rs.getString(2);
System.out.println("The Name is:"+name);
Page 19 of 88
details=details+name;
}
con.close();
}catch(SQLException se){System.out.println("Nothing done");}
return details;
}
public static void main(String[] args)
{
try
{
DbImpl obj=new DbImpl();
Naming.rebind("Arvind",obj);
}catch(Exception e){System.out.println("Error Occured");}
}
}
A remote class can define any methods, but only methods in the remote interface can be
invoked remotely.
The Client application:
5. The client application must import java.rmi packeage.
6. Create the object reference for remote interface by invoking the lookup() method on
Naming Interface by passing the object bindName as a parameter.
7. Perform the casting to Interface type.
8. Invoke the remote method using the object of interface type.
// Program to generate the client
import java.rmi.*;
public class Dbclient
{
public static void main(String[] args)
{
Page 20 of 88
try
{
DbIface obj=Naming.lookup(addURL);
System.out.println(obj.details());
}
catch(Exception e)
{
System.out.println("Eror");
}
}
}
Steps to be followed for execution:
1. All the programs are to be compiled using the command javac.
2. The stub is to be generated by compiling the implementer class using the command
rmic <implementerclassname>.
3. The RMI registry service is then started using the command : start rmiregistry.
4. Then the server is registered with the RMI registry by running the server program
using the command java.
5. The client is also then run using the command java.
Observations:
6. The actual DNS application involves the following modifications to the above
mentioned sample program:
7. The services to be provided are to be declared in the remote interface declared by
the user. The services could be: getIPAddress, getDomainName, returnIPAddress,
returnDomainName
8. The above-mentioned services are to be implemented in the implementer class. As
part of implementation the database is to be accessed to retrieve the DNS
information, for which JDBC is to be made use of.
9. The client program would have code to get connected to the server and make the
remote calls to the server for the required services.
Page 21 of 88
10. The server program would create an instance of the remote implementer and
would provide the services requested services to the client.
Result: If the input to the application is an IP Address, then, it should return back the
Domain Name and vice versa.
PreLab Questions:
1. Will there be debugging mechanisms built into RMI?
2. Why do we get a java.lang.ClassMismatchError while running the program?
3. While sending an array of remote objects and receive an ArrayStoreException.
What's going on?
4. If we get a ClassNotFoundException for stub class when we try to register a remote
object in the registry. What's happening?
5. If server is died. Can we get a trace of the server activity?
6. How do RMI clients contact remote RMI servers?
7. Why does remote method or "callback" routine fail with a nested
java.net.UnknownHostException?
8. How does RMI obtain a server hostname in each of the versions of the JDK?
Page 22 of 88
4. Creation of a Java Bean Application for Displaying Graphical Shapes using BDK
AIM: Creation of a Java Bean Application for Displaying Graphical Shapes using Bean
Development Kit 1.1
Apparatus: J2SDK 1.4 and above, Bean Development Kit 1.1, Notepad
Flow/Algorithm:
Java Bean
1. A Java Bean is an independent and reusable software component that can be
manipulated visually in a builder tool.
2. A bean is represented by an interface that is seen by the users. The environment must
connect to the interface, if it wants to interact with this bean. Beans consist of three
general-purpose interfaces: events, properties and methods.
3. Bean events are the mechanism for sending asynchronous messages between beans,
and, between beans and containers.
4. The Java Beans architecture communicates primarily using event listener interfaces
that extend EventListener
5. The properties of a bean can be changed .at runtime through their get and set
methods.
6. The JavaBean introspection process exposes the properties, methods and events of a
bean and also any global information about a bean. This is done through the BeanInfo
interface, provided by the Java Beans API.
Procedure:
1. For displaying the various graphical shapes, the classes from the AWT package can
be used.
2. The code relevant to this can be put as part of an applet and can be executed in a Java
enabled web browser.
3. The application can also be implemented using any of the builder tools like the
Eclipse or the NetBeans.
4. The expected output from the application to be done is that it should display various
graphical shapes in the browser or in the tool used.
Page 23 of 88
Programming:
The following is a sample application that is used to display colors using a bean:
// Program to test beans
import java.awt.*;
public class Bean01
{
int b;Color c;
public Bean()
{
setVisible(true);
setSize(200,200);
c=Color.yellow;
}
public int getShape()
{
return b;
}
public void setShape()
{
c=Color.red;
repaint();
}
public void paint(Graphics g)
{
Dimension d=getSize();
int w=d.width;int h=d.height;
g.setColor(c);
if(b==0)
{
g.drawLine(0,0,w,h);
}
Page 24 of 88
else if(b==1)
{
g.fillRect(0,0,w,h);
}
else if(b==2)
{
g.fillOval(0,0,w,h);
}
else if(b==3)
{
g.fillRoundRect(0,w,h,50,50);
}
else if(b==4)
{
g.fillOval(0,w-100,h);
}
}
}
// Program to test beans
import java.awt.*;
import java.beans.*;
public class IntrospectorDemo
{
public static void main(String[] args)
{
try
{
Class c = Class.forName("MyColors");
BeanInfo beanInfo = Introspector.getBeanInfo(c);
System.out.println("properties:");
Page 25 of 88
PropertyDescriptor propertyDescriptor[] =
beanInfo.getPropertyDescriptors();
for( int i=0; i < propertyDescriptor.length; i++)
{
System.out.println("\t" + propertyDescriptor[i].getName());
}
System.out.println("events:");
EventSetDescriptor eventsetDescriptor[] =
beanInfo.getEventSetDescriptors();
for(int i =0; i < eventsetDescriptor.length; i++)
{
System.out.println("\t" + eventsetDescriptor[i].getName());
}
}
catch (Exception e)
{
System.out.println("Exception caught. " + e);
}
}
}
Steps to be followed for execution:
1. Compile the java source file
2. create the jar file which includes the class file
3. Open the BDK1.1
4. Load the jar file, if it is successful then it will be displayed in ToolBox window.
5. Click on the jar file in the ToolBox and drag it into BeanBox window
6. Change the value of property of the bean, i.e. change the value of shape property
value from 0 to suitable number.
Page 26 of 88
Results:
Observations & Result: The expected output from the application to be done is that it
should display various graphical shapes in the browser or in the tool used.
PreLab Questions:
1. Where can we find the API docs for the JavaBeans Activation Framework?
2. What is the correct way to invoke Beans.instantiate()?
3. Where to find the BeanInfo classes for the Swing componentsWhat is
introspection in JavaBeans?
4. How can a JavaBean be used as a distributed object in RMI or CORBA?
5. Are there tools to package existing C++ objects as Java Beans?
6. How to instantiate a serialized JavaBean into an applet if .ser file is in jar or zip
archive?
7. What is the intention of the EventListener interface as it seems that it actually has
no abstract methods no abstract attributes
8. How to read the initialization parameters for a bean, similar to what happens in
servlets when we user the ServletConfig class and then use it's
etInitParameter()Can we specify a custom class loader to load any beans?
9. With regards to JavaBeans, what is a manifest file and how is it used?
Page 27 of 88
5. Creation of a Java Bean Application for Displaying Graphical Shapes without
using BDK
AIM: Creation of a Java Bean Application for Displaying Graphical Shapes without
using BDK
Software Required: J2SDK 1.4 or above, apletviewer, Internet Explorer or any Browser
Flow/Algorithm:
Java Bean
1. A Java Bean is an independent and reusable software component that can be
manipulated visually in a builder tool.
2. A bean is represented by an interface that is seen by the users. The environment
must connect to the interface, if it wants to interact with this bean. Beans consist of
three general-purpose interfaces: events, properties and methods.
3. Bean events are the mechanism for sending asynchronous messages between beans,
and, between beans and containers.
4. The Java Beans architecture communicates primarily using event listener interfaces
that extend EventListener
5. The properties of a bean can be changed .at runtime through their get and set
methods.
6. The JavaBean introspection process exposes the properties, methods and events of a
bean and also any global information about a bean. This is done through the
BeanInfo interface, provided by the Java Beans API.
Programming:
The following is a sample application that is used to display colors using a bean:
// Program to test beans
import java.awt.*;
import java.awt.event.*;
import java.io.Serializable;
import java.applet.*;
public class MyBean extends Applet implements Serializable
{
Page 28 of 88
transient private Color color;
private boolean rect,flag;
public MyBean()
{
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent me)
{
change();
}
});
rect=false;
setSize(300,300);
change();
}
public boolean getRect()
{
return rect;
}
public void setRect(boolean flag)
{
this.rect=flag;
repaint();
}
public void change()
{
color=randomColor();
repaint();
}
private Color randomColor()
{
Page 29 of 88
int r=(int)(255*Math.random());
int g=(int)(255*Math.random());
int b=(int)(255*Math.random());
return new Color(r,g,b);
}
public void paint(Graphics g)
{
Dimension d=getSize();
int h=d.height;
int w=d.width;
g.setColor(color);
if(rect)
{
g.fillRect(10,10,40,40);
g.fillOval(100,10,20,20);
g.drawLine(0,0,10,50);
}
else
{
g.drawRect(10,10,40,40);
g.drawOval(100,10,20,20);
g.drawRoundRect(0,0,100,100,150,150);
}
}
}
Procedure:
Steps to be followed for execution:
1. Create a root directory and place the java source file in it.
2. Compile the java source file
3. Create a file with .html/.htm extension and write the following contents in it
<applet code="MyBean" width=500 height =500>
Page 30 of 88
</applet>
4. Open the html file and observe that with mouse clicks the color of the graphical
shapes will change.
Observations & Result: The expected output from the application to be done is that it
should display various graphical shapes in the browser or in the tool used.
PreLab Questions:
1. How do we generate an application when using the bean box tool?
2. What is the difference between an ActiveX control and a JavaBean component?
3. How to access EJBs from JavaBeans Components?
4. Is a Java Bean a server side component or client side component?
5. What is the difference between a JavaBean and a traditional AWT object?
6. What is a serialized bean?
7. What is the difference between Java Beans and just normal classes?
8. Why do we need a no argument constructor in a JavaBean component?
9. What is a property editor?
10. How do we create an event to be used in a JavaBeans component?
11. What is a JavaBeans property?
12. Are Enterprise JavaBeans and JavaBeans the same thing?
Page 31 of 88
6. Developing an EJB for Displaying a Message Using Stateless Session Bean
AIM: Developing an stateless session EJB for displaying a message on client side
Software Requirements: J2SDK 1.4 or above, Web-logic application server 8.1 or
above, java compiler, notepad.
Theory: Stateless session EJBs have the following behavior:
1. provide a single use service
2. do not maintain state on behalf of the client
3. are relatively short lived
4. do not survive EJB server crashes
5. any two instances of the same stateless session EJB type are always identical
6. each instance can be shared by multiple clients
Stateless Session EJBs View:
Algorithm/Steps to develop EJB:
Page 32 of 88
EJB Remote Interface:
EJB remote interfaces extends javax.ejb.EJBObject
EJB remote interfaces
1. provide business-specific functionality of an EJB
2. are similar to RMI Remote interface
//Program for EJB Remote Interface
public interface Hello extends javax.ejb.EJBObject
{
public String sayHello()throws java.rmi.RemoteException;
}
EJB Home Interface:
EJB home interfaces extends javax.ejb.EJBHome
EJB home interfaces provide operations for clients to
1. create EJBs
2. remove EJBs
3. find handles to EJB remote interface objects
4. have its stub placed into JNDI at startup
//Program to write EJB Home Interface
public interface HelloHome extends javax.ejb.EJBHome
{
public Hello create()throws javax.ejb.CreateException;
}
EJB Implementation:
Class in which EJB developer codes the business methods defined in the bean’s
component interface(s) to provide any application specific
1. business method invocation
2. creation
3. removal
4. Database loading logic.
Page 33 of 88
5. The Container has already reference to the bean. The bean interacts with the
Container through SessionContext and
retrieves home interfaces
gets and sets transactions attributes
obtains security attribute
The setSessionContext() method is used to inform the bean about the session context
//Program to write EJB Bean implementation class
import java.rmi.RemoteException;
import javax.ejb.*;
public class HelloBean implements SessionBean {
SessionContext context;
public void setSessionContext()
throws EJBException {
}
public void ejbRemove() throws EJBException, RemoteException {
}
public void ejbActivate() throws EJBException, RemoteException {
}
public void ejbPassivate() throws EJBException, RemoteException {
}
public void ejbCreate() throws CreateException {
}
public String sayHello() throws EJBException {
return "Arvind";
}
}
Client Program:
import java.util.Hashtable;
import javax.naming.*;
public class HelloClient {
public static void main(String[] args) {
Page 34 of 88
try {
Hashtable ht=new Hashtable ();
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
InitialContext ct=new InitialContext(ht);
HelloHome hoh.ct.lookup("HelloBean2");
Hello h=hoh.create();
System.out.println(h.sayHello());
}catch(Exception e) {
e.printStackTrace();
}
}
}
Weblogic descriptor files:
ejb-jar
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>HelloBean</ejb-name>
<home>HelloHome</home>
<remote>Hello</remote>
<ejb-class>HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
weblogic-ejb-jar
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>Hello</ejb-name>
<jndi-name>Hello</jndi-name>
Page 35 of 88
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
Procedure:
1. Compile the java source files and place all the .class files in it.
2. Now configure the weblogic server and start the server.
3. Open the weblogic builder IDE to create the deployment descriptors
4. Create the jar file with root directory contents
5. Deploy the jar file into weblogic configured domain
6. Run the client, get the results.
Results:
H:\MWT Lab 2010-11\EXP6\client>java HelloClient
Arvind
H:\MWT Lab 2010-11\EXP6\client>
PreLab Questions:
1. The EJB specification says that we cannot use Bean Managed Transaction in
Entity Beans. Why
2. Can we invoke Runtime.gc() in an EJB?
3. What is the advantage of using Entity bean for database operations, over directly
using JDBC API to do database operations? When would I use one over the
other?
Page 36 of 88
4. What is the role of serialization in EJB?
5. What is EJB QL?
6. What is the relationship between local interfaces and container-managed
relationships?
7. What does a remove method do for different cases of beans?
8. How does a container-managed relationship work?
9. What are the basic classes required in the client for invoking an EJB?
10. What is Vertical Scaling?
11. What is Horizontal Scaling?
12. What is a Clone?
Page 37 of 88
7. Developing an EJB for a Calculator Using Stateless Session Bean
AIM: Developing a stateless session EJB for a calculator that adds two numbers and
subtracts them.
Software Requirements: J2SDK 1.4 or above, Web-logic application server 8.1 or
above, java compiler, notepad.
Theory: Stateless session EJBs have the following behavior:
1. provide a single use service
2. do not maintain state on behalf of the client
3. are relatively short lived
4. do not survive EJB server crashes
5. any two instances of the same stateless session EJB type are always identical
6. each instance can be shared by multiple clients
Stateless Session EJBs View:
Algorithm/Steps to develop EJB:
Page 38 of 88
EJB Remote Interface:
EJB remote interfaces extends javax.ejb.EJBObject
EJB remote interfaces
1. provide business-specific functionality of an EJB
2. are similar to RMI Remote interface
//Program for EJB Remote Interface
public interface AddEjb extends javax.ejb.EJBObject
{
public float addNum(float num1,float num2)
throws java.rmi.RemoteException;
public float subNum(float num1,float num2)
throws java.rmi.RemoteException;
}
EJB Home Interface:
EJB home interfaces extends javax.ejb.EJBHome
EJB home interfaces provide operations for clients to
1. create EJBs
2. remove EJBs
3. find handles to EJB remote interface objects
4. have its stub placed into JNDI at startup
//Program to write EJB Home Interface
public interface AddEjbHome extends javax.ejb.EJBHome
{
public AddEjb create()
throws javax.ejb.CreateException,
java.rmi.RemoteException;
}
Page 39 of 88
EJB Implementation:
Class in which EJB developer codes the business methods defined in the bean’s
component interface(s) to provide any application specific
1. business method invocation
2. creation
3. removal
4. finding
5. The Container has already reference to the bean. The bean interacts with the
Container through SessionContext and
retrieves home interfaces
gets and sets transactions attributes
obtains security attribute
The setSessionContext() method is used to inform the bean about the session context
//Program to write EJB Bean implementation class
//Bean Development
import java.rmi.RemoteException;
import javax.ejb.*;
public class AddEjbBean implements SessionBean {
public void setSessionContext()
throws EJBException {
System.out.println("Inside the Context Method");
}
public void ejbRemove() throws EJBException, RemoteException {
System.out.println("Inside the ejbremove()");
}
public void ejbActivate() throws EJBException, RemoteException {
System.out.println("Inside the ejbActivate()");
}
public void ejbPassivate() throws EJBException, RemoteException {
System.out.println("Inside the ejbPassivate()");
Page 40 of 88
}
public void ejbCreate() throws CreateException {
System.out.println("Inside the ejbCreate()");
}
public float addNum(float num1,float num2)
{
return (num1+num2);
}
public float subNum(float num1,float num2)
{
return (num1-num2);
}
}//end of class
Client Program:
import java.util.*;
import javax.naming.*;
public class AddEjbClient {
public static void main(String[] args) {
try {
Hashtable ht=new Hashtable();
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
Context ct=new InitialContext();
AddEjbHome adhome=(AddEjbHome)ct.lookup("AddEjb");
AddEjb adrem=adhome.create();
float num1=Float.parseFloat(args[0]);
float num2=Float.parseFloat(args[1]);
float addition=adrem.addNum(num1,num2);
float substract=adrem.subNum(num1,num2);
System.out.println(addition);
System.out.println(substract);
Page 41 of 88
}catch(Exception e) {
e.printStackTrace();
}
}
}
Weblogic descriptor files:
ejb-jar
<ejb-jar> <enterprise-beans> <session> <ejb-name>AddEjb</ejb-name> <home>AddEjbHome</home> <remote>AddEjb</remote> <ejb-class>AddEjbBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans></ejb-jar>
weblogic-ejb-jar
<weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>AddEjb2</ejb-name> <stateless-session-descriptor> </stateless-session-descriptor> <jndi-name>AddEjbJndi</jndi-name> </weblogic-enterprise-bean></weblogic-ejb-jar>
Procedure:
1. Compile the java source files and place all the .class files in it.
2. Now configure the weblogic server and start the server.
3. Open the weblogic builder IDE to create the deployment descriptors
4. Create the jar file with root directory contents
5. Deploy the jar file into weblogic configured domain. Run the client
Results:
H:\MWT Lab 2010-11\EXP7\client>java AddEjbClinet 100 20
Page 42 of 88
The Addition is 120
The Sustraction is 80
H:\MWT Lab 2010-11\EXP7\client>
PreLab Questions:
1. Does RMI-IIOP support code downloading for Java objects sent by value across
an IIOP connection in the same way as RMI does across a JRMP connection?
2. The EJB container implements the EJBHome and EJBObject classes. For every
request from a unique client, does the container create a separate instance of the
generated EJBHome and EJBObject classes?
3. What is the advantage of putting an Entity Bean instance from the “Ready State”
to “Pooled state”?
4. Can a Session Bean be defined without ejbCreate() method?
5. Are enterprise beans allowed to use Thread.sleep()?
6. Is it possible to write two EJB’s that share the same Remote and Home interfaces,
and have different bean classes? if so, what are the advantages/disadvantages?
7. Is it possible to specify multiple JNDI names when deploying an EJB? an Entity
Bean to store itself to the db?
8. Is there a guarantee of uniqueness for entity beans?
9. Will an attribute like “Required” lock out other readers until I’m finished
updating?
Page 43 of 88
10. Can the primary key in the entity bean be a Java primitive type such as int?
implementations does RMI have?
11. What is the need of Remote and Home interfaces. Why can’t there be one?
12. What is the difference between Java Beans and EJB?
13. With regard to Entity Beans, what happens if both my EJB Server and Database
crash, what will happen to unsaved changes? Is there any transactional log file
used?
14. Does RMI-IIOP support dynamic downloading of classes?
15. Does EJB 1.1 support mandate the support for RMI-IIOP ? What is the meaning
of “the client API must support the Java RMI-IIOP programming model for
portability, but the underlying protocol can be anything” ?
Page 44 of 88
8. Developing an EJB for Student Information system Using Stateless Session Bean
AIM: Developing a stateless session EJB for student information system stored as data in
application.
Software Requirements: J2SDK 1.4 or above, Web-logic application server 8.1 or
above, java compiler, notepad.
Theory: Stateless session EJBs have the following behavior:
1. provide a single use service
2. do not maintain state on behalf of the client
3. are relatively short lived
4. do not survive EJB server crashes
5. any two instances of the same stateless session EJB type are always identical
6. each instance can be shared by multiple clients
Stateless Session EJBs View:
Algorithm/Steps to develop EJB:
Page 45 of 88
EJB Remote Interface:
EJB remote interfaces extends javax.ejb.EJBObject
EJB remote interfaces
1. provide business-specific functionality of an EJB
2. are similar to RMI Remote interface
//Program for EJB Remote Interface
//remote Interface
import java.util.*;
public interface Student extends javax.ejb.EJBObject
{
public ArrayList details()
throws java.rmi.RemoteException;
}
EJB Home Interface:
EJB home interfaces extends javax.ejb.EJBHome
EJB home interfaces provide operations for clients to
1. create EJBs
2. remove EJBs
3. find handles to EJB remote interface objects
4. have its stub placed into JNDI at startup
//Program to write EJB Home Interface
public interface StudentHome extends javax.ejb.EJBHome
{
public Student create()
throws javax.ejb.CreateException,
java.rmi.RemoteException;
}
Page 46 of 88
EJB Implementation:
Class in which EJB developer codes the business methods defined in the bean’s
component interface(s) to provide any application specific
1. business method invocation
2. creation
3. removal
4. Database loading logic.
5. The Container has already reference to the bean. The bean interacts with the
Container through SessionContext and
retrieves home interfaces
gets and sets transactions attributes
obtains security attribute
The setSessionContext() method is used to inform the bean about the session context
//Program to write EJB Bean implementation class
//Bean Development
import java.rmi.RemoteException;
import java.sql.*;
import javax.ejb.*;
import java.util.*;
public class StudentBean implements SessionBean {
ArrayList v=new ArrayList();
public void setSessionContext()
throws EJBException {
context = newContext;
System.out.println("Inside the Context Method");
}
public void ejbRemove() throws EJBException, RemoteException {
System.out.println("Inside the ejbremove()");
}
public void ejbCreate() throws CreateException {
System.out.println("Inside the ejbCreate()");
Page 47 of 88
}
public ArrayList details() throws EJBException {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection
("jdbc:oracle:thin:@xe","scott","tiger");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select *from Student");
System.out.println("After query excuted");
while(rs.next())
{
v.add(rs.getString(1));
v.add(rs.getString(2));
v.add(rs.getString(3));
}//end of while
con.close();
}catch(Exception e) {
e.printStackTrace();
}//end of try-catch
return v;
}//end of details() method
}//end of class
Client Program:
import java.util.*;
import javax.naming.*;
public class StudentClient {
public static void main(String[] args) {
try {
Hashtable ht=new Hashtable();
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
Page 48 of 88
Context ct=new InitialContext();
StudentHome lb=ct.lookup("StudentJndi");
Student l=lb.create();
ArrayList ar=(ArrayList)l.details();
Iterator itr=ar.iterator();
while(itr.hasNext())
{
System.out.println(el);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
Weblogic descriptor files:
ejb-jar
<ejb-jar> <enterprise-beans> <session> <ejb-name>StudentBean</ejb-name> <home>StudentHome</home> <remote>Student</remote> <ejb-class>StudentBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans></ejb-jar>weblogic-ejb-jar
<weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>StudentBean2</ejb-name> <stateless-session-descriptor> </stateless-session-descriptor> <jndi-name>Student</jndi-name> </weblogic-enterprise-bean></weblogic-ejb-jar>
Page 49 of 88
Procedure:
1. Create a root directory with name EXP8 and place all the source files in it.
2. Compile the java source files and place all the .class files in it.
3. Now configure the weblogic server and start the server.
4. Open the weblogic builder IDE to create the deployment descriptors
5. Create the jar file with root directory contents
6. Deploy the jar file into weblogic configured domain
7. Run the client, get the results.
Observations:
For the Student and Library information systems, the services to be provided are to be
declared in the remote interface.
The services are to be implemented in the bean classes.
For the implementation part, the data retrieval is to be done by getting connected to
the database using JDBC.
For the Student Information System, the input would be the student ID and the output
would be the relevant information of the student.
Results: In case of the Library System, the book-ID would be given as input and the
relevant information of the book is to be retrieved as output.
Name: Arvind
Id: 12345
Dept: ECE
Page 50 of 88
PreLab Questions:
1. Is possible for an EJB client to marshal an object of class java.lang.Class to an
EJB?
2. Is it legal to have static initializer blocks in EJB?
3. Is it possible to stop the execution of a method before completion in a
SessionBean? -
4. What is the default transaction attribute for an EJB? - There is no default
transaction
5. What is the difference between session and entity beans? When should I use one
or the other?
6. Why is ejbFindByPrimaryKey mandatory?
7. Why do we have a remove method in both EJBHome and EJBObject?
8. How can I call one EJB from inside of another EJB?
9. What is the difference between a Server, a Container, and a Connector?
10. How is persistence implemented in enterprise beans?
11. What is an EJB Context?
12. Is method overloading allowed in EJB?
13. Should synchronization primitives be used on bean methods?
14. Are we allowed to change the transaction isolation property in middle of a
transaction?
15. For Entity Beans, What happens to an instance field not mapped to any persistent
storage, when the bean is passivated?
Page 51 of 88
9. Developing an EJB for Library Information system Using State full Session Bean
AIM: Developing a state full session EJB for library information system stored as data in
oracle table.
Software Requirements: J2SDK 1.4 or above, Web-logic application server 8.1 or
above, java compiler, notepad.
Theory: Statefull session EJBs have the following behavior:
1. provide a single use service
2. Maintain the state on behalf of the client
3. are relatively short lived
4. do not survive EJB server crashes
5. any two instances of the same statefull session EJB type are always identical
6. each instance can be shared by multiple clients
Statefull Session EJBs View:
Algorithm/Steps to develop EJB:
Page 52 of 88
EJB Remote Interface:
EJB remote interfaces extends javax.ejb.EJBObject
EJB remote interfaces
1. provide business-specific functionality of an EJB
2. are similar to RMI Remote interface
//Program for EJB Remote Interface
//remote Interface
public interface Library extends javax.ejb.EJBObject
{
public void libraryInfo()throws java.rmi.RemoteException;
}
EJB Home Interface:
EJB home interfaces extends javax.ejb.EJBHome
EJB home interfaces provide operations for clients to
1. create EJBs
2. remove EJBs
3. find handles to EJB remote interface objects
4. have its stub placed into JNDI at startup
//Program to write EJB Home Interface
public interface LibraryHome extends javax.ejb.EJBHome
{
public void create()throws javax.ejb.CreateException;
}
EJB Implementation:
Class in which EJB developer codes the business methods defined in the bean’s
component interface(s) to provide any application specific
1. business method invocation
2. creation
3. removal
4. finding
Page 53 of 88
5. activation
6. passivation, database storage
7. Database loading logic.
8. The Container has already reference to the bean. The bean interacts with the
Container through SessionContext and
retrieves home interfaces
gets and sets transactions attributes
obtains security attribute
The setSessionContext() method is used to inform the bean about the session context
//Program to write EJB Bean implementation class
//Bean Development
import java.rmi.RemoteException;
import java.sql.*;
import javax.ejb.*;
import java.util.*;
public class LibraryBean implements SessionBean {
String bookid;
Connection con;Vector v=new Vector();
public void setSessionContext()
throws EJBException {
context = newContext;
}
public void ejbRemove() throws EJBException, RemoteException {
}
public void ejbActivate() throws EJBException, RemoteException {
}
public void ejbPassivate() throws EJBException, RemoteException {
}
public void ejbCreate(String param) throws CreateException {
}
Page 54 of 88
public void libraryInfo() throws EJBException {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger"
);
PreparedStatement stmt=con.prepareStatement("select *from
library where bid=?");
stmt.setString(1,bookid);
ResultSet rs=stmt.executeQuery();
System.out.println("After query excuted");
while(rs.next())
{
v.add(rs.getString(1));
v.add(rs.getString(2));
v.add(rs.getString(3));
}
con.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}//end of class
Client Program:
import java.util.*;
import javax.naming.*;
public class LibraryClient {
public static void main(String[] args) {
try {
Hashtable ht=new Hashtable();
Page 55 of 88
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
Context ct=new InitialContext();
LibraryHome libraryHome=(LibraryHome)ct.lookup("Library");
String number=args[0];
Library library=libraryHome.create(args[0]);
System.out.println(library.libraryInfo());
Iterator itr=library.libraryInfo().iterator();
while(itr.hasNext())
{
String el=(String)itr.next();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
Weblogic descriptor files:
ejb-jar
<ejb-jar> <enterprise-beans> <session> <ejb-name>EXP9</ejb-name> <home>LibraryHome</home> <remote>Library</remote> <ejb-class>LibraryBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor></ejb-jar>
Page 56 of 88
weblogic-ejb-jar
<weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>EXP9</ejb-name> <jndi-name>ejb/Library</jndi-name> </weblogic-enterprise-bean></weblogic-ejb-jar>
Procedure:
1. Create a root directory with name EXP6 and place all the source files in it.
2. Compile the java source files and place all the .class files in it.
3. Now configure the weblogic server and start the server.
4. Open the weblogic builder IDE to create the deployment descriptors
5. Create the jar file with root directory contents
6. Deploy the jar file into weblogic configured domain
7. Run the client, get the results.
Observations:
For the Student and Library information systems, the services to be provided are to be
declared in the remote interface.
The services are to be implemented in the bean classes.
For the implementation part, the data retrieval is to be done by getting connected to
the database using JDBC.
For the Student Information System, the input would be the student ID and the output
would be the relevant information of the student.
Results:
In case of the Library System, the book-ID would be given as input and the relevant
information of the book is to be retrieved as output.
Page 57 of 88
PreLab Questions:
1. What is the difference between URL instance and URLConnection instance?
2. What’s the difference between JNDI lookup(), list(), listBindings(), and search()
3. Components of JNDI
4. What is the Max amount of information that can be saved in a Session Object?
5. What is the function of T3 in WebLogic Server?
6. Can you briefly describe local interfaces?
7. What are the special design care that must be taken when you work with local
interfaces?
8. What happens if remove( ) is never invoked on a session bean?
9. What is the difference between creating a distributed application using RMI and
using a EJB architecture?
10. Can the bean class implement the EJBObject class directly? If not why?
11. What does isIdentical() method return in case of different type of beans
12. What is the difference between session and entity bean?
13. What is a JavaBean?
14. What is EJB
15. What is EJB role in J2EE?
Page 58 of 88
16. What is the difference between EJB and Java beans?
17. What are the key features of the EJB technology?
18. What are the key benefits of the EJB technology?
19. What is Entity Bean and Session Bean
Page 59 of 88
10. Creation of an Active-x Control for Time Table
AIM: Creation of an Active-x Control for Time Table
Apparatus: Microsoft Visual Studio 2005
Programming:
TIME TABLE PROGRAM
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace TimeTable
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case 0:
comboBox2.Items.Clear();
comboBox2.Items.Add("1styear");
comboBox2.Items.Add("2ndyear");
comboBox2.Items.Add("3rdyear");
Page 60 of 88
break;
case 1:
comboBox2.Items.Clear();
comboBox2.Items.Add("1styear");
comboBox2.Items.Add("2ndyear");
break;
case 2:
comboBox2.Items.Clear();
comboBox2.Items.Add("1styear");
comboBox2.Items.Add("2ndyear");
comboBox2.Items.Add("3rdyear");
comboBox2.Items.Add("4thyear");
break;
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
OleDbConnection cn = new OleDbConnection("user
id=scott;password=tiger;provider=msdaora.1");
string t = "select * from " + comboBox1.SelectedItem +
comboBox2.SelectedItem;
//MessageBox.Show(t);
OleDbDataAdapter da = new OleDbDataAdapter(t, cn);
DataSet ds = new DataSet();
da.Fill(ds, "timetable");
dataGridView1.DataSource = ds.Tables["timetable"];
}
private void label1_Click(object sender, EventArgs e)
Page 61 of 88
11. Developing A Component for Converting Currency Values Using
COM/.NET
AIM: Developing a component for converting currency values using com .net
Apparatus: Microsoft Visual Studio 2005
Programming:
CURRENCY TRANSLATOR PROGRAM
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace currencytranslator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = ((Double.Parse(textBox1.Text))/43.50).ToString();
}
private void button2_Click(object sender, EventArgs e)
{
textBox4 .Text = ((Double.Parse(textBox3.Text)) * 43.50).ToString();
}
private void Form1_Load(object sender, EventArgs e)
Page 63 of 88
12. Developing a Component for Browsing the CD Catalog Using COM/.NET
AIM: Developing a component for browsing the CD catalog using com .net
Apparatus: Microsoft Visual Studio 2005
Programming:
CD CATALOGUE PROGRAM
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace CDCatalogue
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string s = comboBox1.SelectedItem.ToString();
listBox1.Items.Clear();
label2.Text = s;
try
Page 65 of 88
{
string[] x = Directory.GetDirectories(s);
for (int i = 0; i < x.Length; i++)
{
DirectoryInfo di = new DirectoryInfo(x[i]);
listBox1.Items.Add(di.Name );
}
}
catch (IOException io)
{
MessageBox.Show(io.Message);
}
}
private void Form1_Load(object sender, EventArgs e)
{
string x = "D:\\";
string[] f = Directory.GetDirectories(x);
for (int i = 0; i < f.Length; i++)
{
comboBox1.Items.Add(f[i]);
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
listBox2.Items.Clear();
string t = comboBox1.SelectedItem + "\\" + listBox1.SelectedItem;
label3.Text = t;
string[] x = Directory.GetFiles(t);
for (int i = 0; i < x.Length; i++)
{
FileInfo f = new FileInfo(x[i]);
Page 66 of 88
listBox2.Items.Add(f.Name);
}
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
Result & Observations:
Page 67 of 88
13. Developing a Component for Retrieving Information from Message Box
Using DCOM/.NET
AIM: developing a component for retrieving information from message box using .net
Apparatus: Microsoft Visual Studio 2005
Programming:
///Message Box Program
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace msgbox
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(textBox1.Text);
MessageBox.Show("Successfully submitted.");
}
}
}
Page 68 of 88
14. Developing a Middleware Component for Retrieving Message from Server Using
CORBA
Aim: To developing a Middleware component for retrieving message from server using
CORBA
Software required: j2sdk 1.4 or above, Notepad
Theory: CORBA (Common Object Request Broker Architecture)
1. CORBA is a specification that defines how distributed objects can interoperate.
2. CORBA specification is controlled by OMG.
3. CORBA objects can be written in almost any language and can exist on almost any
platform.
4. Language Independence is possible using the construction of interfaces to objects
using the Interface Definition Language (ICL). The only requirement is a bridge
between the natural language and IDL.
5. ORB (Object Request Broker) is at the core of CORBA. This is the principal
component for the transmission of information between the client and the server of
the CORBA application.
6. The Java IDL enables distributed Java applications to transparently invoke operations
or remote network services, using the industry standard IDL and IIOP.
Architecture: This figure shows how a one-method distributed object is shared between
a CORBA client and server to implement the classic "Hello World" application.
A one-method distributed object shared between a CORBA client and server.
Procedure: We will build the "Hello World" program as a distributed application. The
"Hello World" program has a single operation that returns a string to be printed.
The following steps provide a general guide to designing and developing a distributed
object application with Java IDL:
1. Define the remote interface
2. Compile the remote interface
Page 70 of 88
3. Implement the server
4. Implement the client
5. Start the applications
Programming:
//Define the remote interface:
module HelloApp
{
interface Hello
{
string sayHello();
}
}
//Implementation of Server Application
The server consists of two classes, the servant and the server. The HelloServer
class has the server's main() method, which:
1. Creates and initializes an ORB instance
2. Gets a reference to the root POA and activates the POAManager
3. Creates a servant instance (the implementation of one CORBA Hello object) and
tells the ORB about it
4. Creates a tie with the servant being the delegate
5. Gets a CORBA object reference for a naming context in which to register the tie.
This step also implicitly activates the object. See the POA topic for more
information on POA policies and activations.
6. Gets the root naming context
7. Registers the new object in the naming context under the name "Hello"
8. Waits for invocations of the new object from the client
// HelloServer.java
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
Page 71 of 88
import org.omg.CORBA.*;
import java.util.*;
class HelloImpl extends HelloPOA {
public String sayHello() {
return "\nHello Arvind !!\n";
}
}
public class HelloServer {
public static void main(String args[]) {
try{
// create and initialize the ORB
ORB orb = ORB.init(args,pr);
// get reference to rootpoa & activate the POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
// create servant and register it with the ORB
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB();
// get remote object reference from the servant
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref);
// get the root naming context. NameService invokes the name service
org.omg.CORBA.Object objRef = orb.resolve_initial_references("Service");
// Use NamingContextExt which is part of the Interoperable Naming Service pecification.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// bind the Object Reference in Naming
NameComponent path[] = ncRef.to_name("Hello");
ncRef.rebind(path, href);
System.out.println("HelloServer ready and waiting ...");
// wait for invocations from clients
}
catch (Exception e) {
Page 72 of 88
e.printStackTrace(System.out);
}
System.out.println("HelloServer Exiting ...");
}
}
Client Application in Java
1. Creates and initializes an ORB
2. Obtains a reference to the root naming context
3. Looks up "Hello" in the naming context and receives a reference to that
CORBA object
4. Invokes the object's sayHello() and shutdown() operations and prints the
result
// HelloClient.java
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
public class HelloClient
{
public static void main(String args[])
{
try{
// create and initialize the ORB
ORB orb = ORB.init(args,pr);
// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("Service");
// Use NamingContextExt.This is part of the
//Interoperable naming Service.
NamingContextExt ncRef =
Page 73 of 88
NamingContextExtHelper.narrow(objRef);
// resolve the Object Reference in Naming
hello = HelloHelper.narrow(ncRef.resolve_str("Hello"));
System.out.println(hello.sayHello());
//hello.shutdown();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Execution Steps:
The following steps are to be carried out to execute the above application:
1. Firstly, the IDL file is to be converted into a Java format. For doing so the following
command is used - idlj -fall -oldImpBase hello.idl.
2. After this a set of Java classes are created in a separate folder by name Hello.
3. All the java files, including those in the Hello folder, are to be compiled using the
following command - javac *.java hello\*.java.
4. The ORB directory service is now started using the following command - start orbd -
ORBIntitialPort
5. The server is then started using the command - java HelloServer -ORBIntitialPort
6. The client is then started using the command - java HelloCli -ORBIntitialPort
Observations& results:
1. For the applications of Stock Market Exchange information and Bank balance
retrieval, the services are to be declared in the IDL nad to be implemented in the
implementation class.
2. A connection to the database is to be made, using JDBC, in the implementation
class, to retrieve the data.
3. Clients may be written in any of the natural languages and are to converted into
the IDL form using the compatible tools.
Page 74 of 88
CORBA PreLab Question
1. Why do we get this message when trying to run HelloServer: Exception in thread
"main" java.lang.NoClassDefFoundError: HelloServer/java
2. If existing programs aren't running using J2SE 1.4.2. Are there any compatibility
issues that could affect this?
3. Why can't we connect using IOR's from a Linux server when the IOR contains
127.0.0.0 as the host address?
4. What does this minor code mean?
5. How to add multiple classpaths when starting a server using servertool?
6. What is the thread model supported by the JDK 1.4.2 CORBA implementation?
7. Does Java IDL contain notification/event services? an Interface Repository?
8. How to run the Hello World example on two machines?
9. Is Java IDL compliant with OMG CORBA specifications?
Page 75 of 88
15. Developing a Middleware Component for Retrieving Stock Market Exchange
Information Using CORBA
AIM: developing a middleware component for retrieving stock market exchange
information using CORBA
Software required: j2sdk 1.4 or above, Notepad
Flow:
CORBA (Common Object Request Broker Architecture)
1. CORBA is a specification that defines how distributed objects can interoperate.
2. CORBA specification is controlled by OMG.
3. CORBA objects can be written in almost any language and can exist on almost any
platform.
4. Language Independence is possible using the construction of interfaces to objects
using the Interface Definition Language (ICL). The only requirement is a bridge
between the natural language and IDL.
5. ORB (Object Request Broker) is at the core of CORBA. This is the principal
component for the transmission of information between the client and the server of
the CORBA application.
6. The Java IDL enables distributed Java applications to transparently invoke operations
or remote network services, using the industry standard IDL and IIOP.
Programming:
The following is a sample application using CORBA:
module stock
{
// this is a interface and all the method which are called from client and executed
at the server are define in it.
interface stock
{
// the return type and parameter (in , out , inout ) are idl data type
string displayDate();
float displayResult(in float f1, in float f2);
};
Page 76 of 88
// an interface can have more than one method
};
// A module can have more than one interface
// implementation class
import stock.*;
import org.omg.CORBA.*;
import java.util.*;
public class stock Impl extends _ stock ImplBase
{
public String displayDate()
{
return " " + new Date();
}
public float displayResult(float f1, float f2)
{
return f1 * f2;
}
}
// Program to implement the Client
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import java.io.*;
public class stock Client
{
static stock stock Impl;
public static void main(String args[])
{
try
{
// create and initialize the ORB
Page 77 of 88
ORB orb = ORB.init(args, null);
// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// resolve the Object Reference in Naming
NameComponent nc = new NameComponent("Date", "");
NameComponent path[] = {nc};
stock stock Impl = stock Helper.narrow(ncRef.resolve(path));
System.out.println(stockImpl.displayDate());
BufferedReader br = new BufferedReader( new
InputStreamReader(System.in));
System.out.println("Enter the first float value : ");
float f_val1 = Float.parseFloat(br.readLine());
System.out.println("Enter the second float value : ");
float f_val2 = Float.parseFloat(br.readLine());
System.out.println("The result is : " +
stockImpl.displayResult(f_val1,f_val2));
}
catch (Exception e)
{
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
}
}
// Program to implement the Server
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;import java.util.Properties;
public class stockServer
Page 78 of 88
{
public static void main(String args[])
{
try
{
// create and initialize the ORB
ORB orb = ORB.init(args, null);
// create servant and register it with the ORB
stockImpl stockImpl = new stockImpl();
// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
stock href = stockHelper.narrow(helloImpl);
// bind the Object Reference in Naming
NameComponent nc = new NameComponent("Date", "");
NameComponent path[] = {nc};
ncRef.rebind(path, href);
System.out.println("HelloServer ready and waiting ...");
// wait for invocations from clients
orb.run();
}
catch (Exception e)
{
e.printStackTrace(System.out);
}
System.out.println("HelloServer Exiting ...");
}
}
Procedure:
The following steps are to be carried out to execute the above application:
Page 79 of 88
1) Firstly, the IDL file is to be converted into a Java format. For doing so the following
command is used - idlj -fall -oldImpBase hello.idl.
2) After this a set of Java classes are created in a separate folder by name Hello.
3) All the java files, including those in the Hello folder, are to be compiled using the
following command - javac *.java hello\*.java.
4) The ORB directory service is now started using the following command - start orbd -
ORBIntitialPort
5) The server is then started using the command - java HelloServer -ORBIntitialPort
6) The client is then started using the command - java HelloCli -ORBIntitialPort
Observations& results:
1. For the applications of Stock Market Exchange information and Bank balance
retrieval, the services are to be declared in the IDL and to be implemented in the
implementation class.
2. A connection to the database is to be made, using JDBC, in the implementation
class, to retrieve the data.
3. Clients may be written in any of the natural languages and are to converted into
the IDL form using the compatible tools.
PreLab Questions:
1. Can we add multiple classpaths when starting a server using servertool?
2. What is the thread model supported by the JDK 1.4.2 CORBA implementation?
3. Does Java IDL contain notification/event services? an Interface Repository?
4. How to run the Hello World example on two machines?
5. Is Java IDL technology compliant with CORBA specifications?
6. What is the difference between Java IDL and Java RMI-IIOP?
7. What are the options for developing CORBA applications using Java technology?
8. Can we use the Java IDL ORB with a C++ CORBA server? (Interoperability)
9. Any examples that use a CORBA client and an EJB server application?
10. How to test whether JDK ORB Client can communicate with another company's
ORB implementation?
Page 80 of 88
16. Developing a Middleware component for retrieving Bank Balance using CORBA
AIM: To Developing a Middleware component for retrieving Bank Balance using
CORBA
Software Required: J2sdk 1.4 or above, Notepad
Theory: Java IDL is a technology for distributed objects--that is, objects interacting on
different platforms across a network. Java IDL enables objects to interact regardless of
whether they're written in the Java programming language or another language such as C,
C++, COBOL, or others.
CORBA (Common Object Request Broker Architecture)
1. CORBA is a specification that defines how distributed objects can interoperate.
2. CORBA specification is controlled by OMG.
3. CORBA objects can be written in almost any language and can exist on almost
any platform.
4. Language Independence is possible using the construction of interfaces to objects
using the Interface Definition Language (ICL). The only requirement is a bridge
between the natural language and IDL.
5. ORB (Object Request Broker) is at the core of CORBA. This is the principal
component for the transmission of information between the client and the server
of the CORBA application.
6. The Java IDL enables distributed Java applications to transparently invoke
operations or remote network services, using the industry standard IDL and IIOP.
Architecture:
This figure shows how a one-method distributed object is shared between a CORBA
client and server to implement the classic "Hello World" application.
A one-method distributed object shared between a CORBA client and server.
Procedure for developing the application:
Page 81 of 88
The following steps provide a general guide to designing and developing a distributed
object application with Java IDL.
1. Define the remote interface
2. Compile the remote interface
3. Implement the server
4. Implement the client
5. Start the applications
IDL to Java Language Mapping:
IDL Type Java Type module package String, wstring java.lang.String float float sequence, array array interface signature interface, helper class, holder class exception class operation method
Programming:
1. Define the remote interface
To create the Hello.idl file,
Create a new directory, named Hello, for this application.
Start your favorite text editor and create a file named Hello.idl in this directory.
In your file, enter the code for the interface definition, Hello.idl:
module BankApp
{
interface Bank
{
//string deposit(in long acno,in long amt);
//void withdraw(in long acno,in long amt);
long showBalance(in long acno);
}
2. Implement the server
The server class has the server's main() method, which:
1. Creates and initializes an ORB instance
Page 82 of 88
2. Gets a reference to the root POA and activates the POAManager
3. Creates a servant instance (the implementation of one CORBA Hello object) and
tells the ORB about it
4. Gets a CORBA object reference for a naming context in which to register the new
CORBA object
5. Gets the root naming context
6. Registers the new object in the naming context under the name "Hello"
7. Waits for invocations of the new object from the client
// BankServer.java
import BankApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import java.sql.*;
class BankImpl {
ResultSet rs;PreparedStatement pstmt;
BankImpl()throws Exception
{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger"
);
}
public String deposit(int acno,int amt) {
try{
pstmt=con.prepareStatement("select amt from banktab where acno=?");
pstmt.setInt(1,acno);
rs=pstmt.executeQuery();
while(rs.next()) {
int v=rs.getInt("amt");
Page 83 of 88
v+=amt;
pstmt=con.prepareStatement("update banktab set amt=? where
acno=?");
pstmt.setInt(1,v);
pstmt.setInt(2,acno);
pstmt.executeUpdate();
}
con.close();
}
catch (Exception e) {
System.out.println("Nothing done");
}
return v;
}
//end of deposit()
public int showBalance(int acno)
{
int v=0;
try
{
pstmt=con.prepareStatement("select amt from banktab where acno=?");
pstmt.setInt(1,acno);
rs=pstmt.executeQuery();
while(rs.next())
{
v=rs.getInt("amt");
}
}
catch (Exception e)
Page 84 of 88
{
v=0;
e.printStackTrace();
}
return v;
}//end of showBalance()
}//end of Servent
public class BankServer {
public static void main(String args[]) {
try{
// create and initialize the ORB
Properties pr=new Properties();
pr.put("org.omg.CORBA.ORBInitialPort","1050");
pr.put("org.omg.CORBA.ORBInitialHost","localhost");
ORB orb = ORB.init(args,pr);
// get reference to rootpoa & activate the POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// create servant and register it with the ORB
BankImpl bankImpl = new BankImpl();
bankImpl.setORB(orb);
// get remote object reference from the servant
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(bankImpl);
Bank href = BankHelper.narrow(ref);
// get the root naming context. NameService invokes the name service
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// Use NamingContextExt which is part of the Interoperable Naming Service
specification.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// bind the Object Reference in Naming
NameComponent path[] = ncRef.to_name("Bank");
Page 85 of 88
ncRef.rebind(path, href);
System.out.println("HelloServer ready and waiting ...");
// wait for invocations from clients
orb.run();
}
catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace();
}
System.out.println("HelloServer Exiting ...");
}
}
3. Implement the client
To create HelloClient.java,
Start your text editor and create a file named BankClient.java in your main project
directory, Hello.
Enter the following code for BankClient.java in the text file. The following
section, Understanding BankClient.java, explains each line of code in some detail.
// BankClient.java
import BankApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
public class BankClient
{
static Bank bank;
public static void main(String args[])
{
try{
// create and initialize the ORB
ORB orb = ORB.init(args,pr);
// get the root naming context
Page 86 of 88
org.omg.CORBA.Object objRef = orb.resolve_initial_references("Service");
// Use NamingContextExt.This is part of the Interoperable naming Service.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// resolve the Object Reference in Naming
bank = BankHelper.narrow(ncRef.resolve_str("BankIdl"));
System.out.println("The amount in account is");
System.out.println(bank.showBalance(1234));
}
catch (Exception e) {
System.out.println("ERROR : " + e) ;
}
}
}
Procedure:
The following steps are to be carried out to execute the above application:
1) Firstly, the IDL file is to be converted into a Java format. For doing so the following
command is used - idlj -fall -oldImpBase hello.idl.
2) After this a set of Java classes are created in a separate folder by name Hello.
3) All the java files, including those in the Hello folder, are to be compiled using the
following command - javac *.java hello\*.java.
4) The ORB directory service is now started using the following command - start orbd -
ORBIntitialPort
5) The server is then started using the command - java HelloServer -ORBIntitialPort
6) The client is then started using the command - java HelloCli -ORBIntitialPort 1200.
Observations& results:
1. For the applications of Bank Information and Bank balance retrieval, the services
are to be declared in the IDL to be implemented in the implementation class.
2. A connection to the database is to be made, using JDBC, in the implementation
class, to retrieve the data.
Page 87 of 88
3. Clients may be written in any of the natural languages and are to converted into
the IDL form using the compatible tools.
PreLab Questions:
1. How to specify a different ORB?
2. How to test whether my JDK ORB Client can communicate with another vendor's
ORB implementation?
3. List any examples that use a CORBA client and a Java server application?
4. How to connect to a 3rd-party Naming Service from Sun's ORB?
5. How use the Java IDL ORB with a C++ CORBA server? (interoperability)
6. What are the options for developing CORBA applications using Java technology?
7. What is the difference between Java IDL and Java RMI-IIOP?
8. What are the limitations of Java IDL and Java RMI-IIOP in this release?
9. Why to get this message when trying to run HelloServer: "Exception in thread
"main" java.lang.NoClassDefFoundError: HelloServer/java"
10. If existing programs aren't running using J2SE 1.4.2. Are there any compatibility
issues that could affect this?
Page 88 of 88