Developing
Entity Beans
Gopalan Suresh Raj
Note |
To
work with any of these samples, you will need the
following: .........................................JDK 1.1.6 or higher (I use JDK 1.1.7B) .........................................Swing 1.1 or higher for JDK 1.1 (required if you wanna use the HomeBase GUI) .........................................The HomeBase (Scunthorpe version 0.5.1) - a free EJB Server from Iona To work with the EJB Servlet client, you will need .........................................JSDK 2.0 or higher |
The Steps involved in developing and deploying an Entity Bean is
1. Set up your Data Source to the Database
2. Define your Home Interface.
3. Define your Remote Interface.
4. Develop your EntityBean
5. Define a Primary Key class
*** Note : From this point onwards, whatever we do becomes vendor (HomeBase) specific ***
6. Define your Deployment Descriptor
7. Compile your classes and generate the Container code using the tools provided by the vendor
8. Startup your Server
A four-tier Architecture for a Typical Bank
Figure shows what we are trying to ultimately accomplish in these pages here.
1. Set up your Data Source to the Database
The example program requires a database table named CHECKINGS --the DML of which is shown below-- with the following fields:
CREATE TABLE CHECKINGS ACCOUNT_NUMBER Number CUSTOMER_NAME Text BALANCE Currency *primary key (ACCOUNT_NUMBER)
2. Define your Home Interface
Bank\CheckingsHome.java |
package Bank; import
javax.ejb.*; public
interface CheckingsHome extends EJBHome
{ |
3. Define your Remote Interface
Bank\Checkings.java |
package Bank; import
javax.ejb.*; public
interface Checkings extends EJBObject
{ |
4. Develop your EntityBean
Bank\CheckingsBean.java |
package Bank; import
java.rmi.*; public
class CheckingsBean implements EntityBean
{
public void credit ( double amount ) {
public void debit ( double amount ) {
public double getBalance () {
public CheckingsBean () {
//
Container managed beans return void
System.out.println
("======================================================");
public void ejbPostCreate ( int accountNo, String
customer)
public void ejbCreate( int accountNo, String
customer, double balance)
public void ejbPostCreate ( int accountNo, String
customer, double balance)
public void ejbActivate () throws RemoteException
{
public void ejbLoad () throws RemoteException
{
public void ejbPassivate () throws
RemoteException {
public void ejbRemove () throws RemoteException,
RemoveException {
public void ejbStore () throws RemoteException
{
public void setEntityContext (EntityContext
context) throws RemoteException {
public void unsetEntityContext () throws
RemoteException {
private void jbInit () throws Exception
{ |
5. Define a Primary Key class
Bank\CheckingsPK.java |
package Bank; import
java.util.*;
public CheckingsPK() {
public CheckingsPK(int accountNo) { |
*** Note : From this point onwards, whatever we do becomes vendor (HomeBase) specific ***
6. Write the Deployment Descriptor for your Server
Note that the deployment descriptor also specifies the properties of a certain Savings Entity Bean and a Teller Session Bean. Don't be surprised. The code for the Savings Entity Bean is included in the zip file and can be downloaded and is very similar to the Checkings Entity Bean. The steps to develop the Teller Session Bean can be seen at the Developing a Session Bean link. I am using two entity beans (Checkings and Savings) to show how workflow between two entity beans can be co-ordinated and managed by a single session bean (Teller) that creates and manages the entity beans.
conf\Bank.ejbml |
<ejbml> <!---------------------------------------------------------->
<entity-bean
<!---------------------------------------------------------->
<entity-bean
<!---------------------------------------------------------->
<session-bean |
7. Compile your classes and generate the Container code using the tools provided by the vendor
MS-DOS Command Prompt |
E:\MyProjects\AccountEJB>cd Bank E:\MyProjects\AccountEJB\Bank>javac *.java E:\MyProjects\AccountEJB\Bank>cd .. E:\MyProjects\AccountEJB>java com.ejbhome.Deployer .\conf\Bank.ejbml EJBHome EJB Deployer version 0.5.1 (Scunthorpe) (c) Copyright IONA Technologies PLC 1999. All Rights Reserved. Windows NT x86 4.0 A nonfatal internal JIT (3.00.072b(x)) error 'regvarHI' has occurred in : 'com/ejbhome/Deployer.<init> (Ljava/util/Properties;Ljava/util/Vector;)V': Please report this error in detail to http://java.sun.com/cgi-bin/bugreport Deploying: Checkings... Generating: IonaCheckingsHome...done. Generating: IonaRemoteCheckings...done. Generating: IonaCheckingsBean...done. Generating: IonaCheckingsContext...done. Implementing Communications: Home Stubs & Skels...done. Implementing Communications: Remote Stubs & Skels...done. Compiling: IonaCheckingsHome.java...done. Compiling: IonaRemoteCheckings.java...done. Compiling: IonaCheckingsBean.java...done. Compiling: IonaCheckingsContext.java...done. Compiling: IonaCheckingsHome_Stub.java...done. Compiling: IonaCheckingsHome_Skel.java...done. Compiling: IonaRemoteCheckings_Stub.java...done. Compiling: IonaRemoteCheckings_Skel.java...done. Deploying: Savings... Generating: IonaSavingsHome...done. Generating: IonaRemoteSavings...done. Generating: IonaSavingsBean...done. Generating: IonaSavingsContext...done. Implementing Communications: Home Stubs & Skels...done. Implementing Communications: Remote Stubs & Skels...done. Compiling: IonaSavingsHome.java...done. Compiling: IonaRemoteSavings.java...done. Compiling: IonaSavingsBean.java...done. Compiling: IonaSavingsContext.java...done. Compiling: IonaSavingsHome_Stub.java...done. Compiling: IonaSavingsHome_Skel.java...done. Compiling: IonaRemoteSavings_Stub.java...done. Compiling: IonaRemoteSavings_Skel.java...done. Deploying: Teller... Generating: IonaTellerHome...done. Generating: IonaRemoteTeller...done. Generating: IonaTellerBean...done. Generating: IonaTellerContext...done. Implementing Communications: Home Stubs & Skels...done. Implementing Communications: Remote Stubs & Skels...done. Compiling: IonaTellerHome.java...done. Compiling: IonaRemoteTeller.java...done. Compiling: IonaTellerBean.java...done. Compiling: IonaTellerContext.java...done. Compiling: IonaTellerHome_Stub.java...done. Compiling: IonaTellerHome_Skel.java...done. Compiling: IonaRemoteTeller_Stub.java...done. Compiling: IonaRemoteTeller_Skel.java...done. E:\MyProjects\AccountEJB> |
8. Startup your Server
MS-DOS Command Prompt |
E:\MyProjects\AccountEJB> E:\MyProjects\AccountEJB>java com.ejbhome.Server com.ejbhome.server.EnterpriseServer, initializing. com.ejbhome.server.EnterpriseServer.fireContainerAdded() at (Compiled Code) com.ejbhome.VendorConfiguration.<init>() at (VendorConfiguration.java:57) com.ejbhome.VendorConfiguration.getSystemCodeHelper() at (VendorConfiguration.java:174) com.ejbhome.VendorConfiguration.getTransactionCodeHelper() at (VendorConfiguration.java:138) com.ejbhome.VendorConfiguration.getCommsCodeHelper() at (VendorConfiguration.java:163) com.ejbhome.VendorConfiguration.getTracingCodeHelper() at (VendorConfiguration.java:152) com.ejbhome.VendorConfiguration.getPersistenceCodeHelper() at (VendorConfiguration.java:125) com.ejbhome.VendorConfiguration.getSessionPassivationCodeHelper() at (VendorConfiguration.java:185) com.ejbhome.VendorConfiguration.getVendorPrefix() at (VendorConfiguration.java:100) starting RMI registry on port 1099... RMI registry on port 1099, has started. com.ejbhome.server.EnterpriseServer.bindDataSources() at (Compiled Code) com.ejbhome.naming.spi.rmi.RMICtx.<init>() at (RMICtx.java:20) registering XA data sources com.ejbhome.sql.XADataSourceImpl.<init>(jdbc:odbc:Checkings,{password=mouse, user=user}) at (XADataSourceImpl.java:75) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) com.ejbhome.server.EnterpriseServer.fireDataSourceAdded() at (Compiled Code) registered: Checkings -> jdbc:odbc:Checkings, as an XA pooled data source [main] com.ejbhome.sql.XADataSourceImpl.<init>(jdbc:odbc:Savings,{password=mouse, user=user}) at (XADataSourceImpl.java:75) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) com.ejbhome.server.EnterpriseServer.fireDataSourceAdded() at (Compiled Code) registered: Savings -> jdbc:odbc:Savings, as an XA pooled data source [main] com.ejbhome.naming.spi.rmi.RMICtx.<init>() at (RMICtx.java:20) loading beans from: Bank.ejbml com.ejbhome.server.EnterpriseServer$2.startElement(ejbml) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(entity-bean) at (EnterpriseServer.java:228) com.ejbhome.VendorConfiguration.getHomeContainerClassName() at (VendorConfiguration.java:226) com.ejbhome.VendorConfiguration.getVendorPrefix() at (VendorConfiguration.java:100) com.ejbhome.container.AbstractEJBHome.<init>() at (AbstractEJBHome.java:136) com.ejbhome.naming.spi.rmi.RMICtx.<init>() at (RMICtx.java:20) com.ejbhome.naming.spi.rmi.RMICtx.lookup("Checkings") at (RMICtx.java:35) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) registered Bank.IonaCheckingsHome, as: Checkings. com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(container-managed) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(entity-bean) at (EnterpriseServer.java:228) com.ejbhome.VendorConfiguration.getHomeContainerClassName() at (VendorConfiguration.java:226) com.ejbhome.VendorConfiguration.getVendorPrefix() at (VendorConfiguration.java:100) com.ejbhome.container.AbstractEJBHome.<init>() at (AbstractEJBHome.java:136) com.ejbhome.naming.spi.rmi.RMICtx.<init>() at (RMICtx.java:20) com.ejbhome.naming.spi.rmi.RMICtx.lookup("Checkings") at (RMICtx.java:35) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) registered Bank.IonaSavingsHome, as: Savings. com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(container-managed) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(session-bean) at (EnterpriseServer.java:228) com.ejbhome.VendorConfiguration.getHomeContainerClassName() at (VendorConfiguration.java:226) com.ejbhome.VendorConfiguration.getVendorPrefix() at (VendorConfiguration.java:100) com.ejbhome.container.AbstractEJBHome.<init>() at (AbstractEJBHome.java:136) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) registered Bank.IonaTellerHome, as: Teller. finished loading beans from: Bank.ejbml loading beans from: Checkings.ejbml com.ejbhome.server.EnterpriseServer$2.startElement(ejbml) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(entity-bean) at (EnterpriseServer.java:228) com.ejbhome.VendorConfiguration.getHomeContainerClassName() at (VendorConfiguration.java:226) com.ejbhome.VendorConfiguration.getVendorPrefix() at (VendorConfiguration.java:100) com.ejbhome.container.AbstractEJBHome.<init>() at (AbstractEJBHome.java:136) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) registered Bank.IonaCheckingsHome, as: checkings. com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(container-managed) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (EnterpriseServer.java:228) finished loading beans from: Checkings.ejbml loading beans from: Savings.ejbml com.ejbhome.server.EnterpriseServer$2.startElement(ejbml) at (EnterpriseServer.java:228) com.ejbhome.server.EnterpriseServer$2.startElement(entity-bean) at (EnterpriseServer.java:228) com.ejbhome.VendorConfiguration.getHomeContainerClassName() at (VendorConfiguration.java:226) com.ejbhome.VendorConfiguration.getVendorPrefix() at (VendorConfiguration.java:100) com.ejbhome.container.AbstractEJBHome.<init>() at (AbstractEJBHome.java:136) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) registered Bank.IonaSavingsHome, as: savings. com.ejbhome.server.EnterpriseServer$2.startElement(property) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(property) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(container-managed) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(field) at (Compiled Code) finished loading beans from: Savings.ejbml loading beans from: Teller.ejbml com.ejbhome.server.EnterpriseServer$2.startElement(ejbml) at (Compiled Code) com.ejbhome.server.EnterpriseServer$2.startElement(session-bean) at (Compiled Code) com.ejbhome.VendorConfiguration.getHomeContainerClassName() at (VendorConfiguration.java:226) com.ejbhome.VendorConfiguration.getVendorPrefix() at (VendorConfiguration.java:100) com.ejbhome.container.AbstractEJBHome.<init>() at (AbstractEJBHome.java:136) com.ejbhome.naming.spi.rmi.RMICtx.bind() at (RMICtx.java:168) registered Bank.IonaTellerHome, as: teller. finished loading beans from: Teller.ejbml |
The Server is now up and ready and is waiting for connections from the client.
click here to go to
My EJB
HomePage...
click here to go
to
My
Advanced Java Tutorial Page...
About the Author... |
Gopalan Suresh Raj is a Software Architect, Developer and an active Author. He is contributing author to a couple of books "Enterprise Java Computing-Applications and Architecture" and "The Awesome Power of JavaBeans". His expertise spans enterprise component architectures and distributed object computing. Visit him at his Web Cornucopia© site (http://www.execpc.com/~gopalan) or mail him at gopalan@execpc.com. |
This site was developed and is maintained by Gopalan Suresh Raj This page has been visited |
Last Updated : Mar 27, '99 |
Copyright (c) 1997-99, Gopalan Suresh Raj - All rights reserved. Terms of use. |
All products and companies mentioned at this site are trademarks of their respective owners. |