Make your own free website on Tripod.com

Java Data Objects (JDO)

EJB and JDO

Session EJB Facade to JDO Objects

Gopalan Suresh Raj

Note
To work with any of these samples, you will need the following:
.........................................JDK 1.2 or higher (I use JDK 1.3.1)
.........................................PE:JTM - The Productivity Environment for JavaTM (from HYWY Software Corporation)

 

Note: This article assumes that the reader has already created simple bank project using PE:J and JDO.

 

com\hywy\samples\ejb20\session\stateless\Client.java
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
/**
* The following example illustrates
* a Session Facade to a JDO object
*
* author: Gopalan Suresh Raj
* Copyright (c), 2002. All Rights Reserved.
* URL: http://gsraj.tripod.com/
* email: gopalan@gmx.net
*/


package com.hywy.samples.ejb20.session.stateless;

import java.util.Properties;
import java.util.ArrayList;
import java.util.Iterator;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

import com.hywy.pej.persistence.oidserver.Oid;

/**
* This class illustrates calling a stateless Session Bean and performing
* the following exercises:
* <ul>
* <li> Create a Teller
* <li> Create accounts using the Teller
* <li> Transfer Money using the Teller
* <li> Remove the Teller
* </ul>
*
* @author Gopalan Suresh Raj
*/


public class Client {

  private static final String JNDI_NAME_ = "TellerHome";

  private String url_;
  private TellerHome home_;

  public Client(String url) throws NamingException {

    this.url_ = url;
    home_ = lookupHome();
  }

  /**
   * Runs this example from the command linamingException. Example:
   * <p>
   * <tt>java com.hywy.samples.ejb20.session.stateless.Client "t3://localhost:7001"</tt>
   * <p>
   * The parameters are optional, but if any are supplied,
   * they are interpreted in this order:
   * <p>
   * @param url URL such as "t3://localhost:7001" of Server
   */

  public static void main(String[] args) throws Exception {

    log("\nBeginning stateless.Client...\n");

    String url = "t3://localhost:7001";

    // Parse the argument list
    if (args.length != 1) {
      System.out.println("Usage: java com.hywy.samples.ejb20.session.stateless.Client t3://hostname:port");
      return;
    } else {
      url = args[0];
    }

    Client client = null;
    try {
      client = new Client(url);
    } catch (NamingException namingException) {
      System.exit(1);
    }

    try {
      client.example();
    } catch (Exception exception) {
      log("There was an exception while creating and using the Teller.");
      log("This indicates that there was a problem communicating with the server: "+exception);
    }

    log("\nEnd stateless.Client...\n");
  }

  /**
   * Runs this example.
   */

  public void example() throws CreateException, RemoteException, RemoveException {

    // create a Teller
    log("Creating a Teller");
    Teller teller = (Teller) narrow(home_.create(), Teller.class);

    /////////////////////////////
    // Invoke the Servant
    /////////////////////////////

    // try creating new accounts
    try {
      System.out.println("Create Checking Account for Gopalan Suresh Raj");
      teller.createAccount("Gopalan Suresh Raj", 10000000, true);
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
    try {
      System.out.println("Create Checking Account for Athul Suresh Raj");
      teller.createAccount("Athul Suresh Raj", 20000000, true);
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }

    try {
      System.out.println("Create Savings Account for Gopalan Suresh Raj");
      teller.createAccount("Gopalan Suresh Raj", 910000000, false);
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }

    try {
      System.out.println("Create Savings Account for Athul Suresh Raj");
      teller.createAccount("Athul Suresh Raj", 2000000000, false);
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }

    Iterator iterator = null;
    Object oid = null;

    // List of Checking accounts
    ArrayList checkingAccountList = teller.listAllCheckingAccounts();
    System.out.println("The size of checkingAccountList is :"+checkingAccountList.size());
    iterator = checkingAccountList.iterator();
    System.out.println("_______________________________________");
    System.out.println("     List of Checking Accounts");
    System.out.println("_______________________________________");
    while(iterator.hasNext()) {
      oid = iterator.next();
      if(oid != null) {
        System.out.println("Checking Account Number :"+oid.toString());
      }
    }
    System.out.println("_______________________________________");

    // List of Savings accounts
    ArrayList savingsAccountList = teller.listAllSavingsAccounts();
    System.out.println("The size of savingsAccountList is :"+savingsAccountList.size());
    iterator = savingsAccountList.iterator();
    System.out.println("_______________________________________");
    System.out.println("     List of Savings Accounts");
    System.out.println("_______________________________________");
    while(iterator.hasNext()) {
      oid = iterator.next();
      if(oid != null) {
        System.out.println("Savings Account Number :"+oid.toString());
      }
    }
    System.out.println("_______________________________________");

    Long longValue = null;
    // Try deleting the first 2 accounts
    if((checkingAccountList.size() > 0)&&(savingsAccountList.size() > 0)) {
      try {
        Oid checkingOid = (Oid)checkingAccountList.get(0);
        if(checkingOid != null) {
          System.out.println("Delete Checking Account Number :"+checkingOid.toString());
          teller.deleteAccount(checkingOid.toLong());
          checkingAccountList.remove(checkingOid);
          System.out.println("The size of checkingAccountList is now :"+checkingAccountList.size());
        }
        Oid savingsOid = (Oid)savingsAccountList.get(0);
        if(savingsOid != null) {
          System.out.println("Delete Savings Account Number :"+savingsOid.toString());
          teller.deleteAccount(savingsOid.toLong());
          savingsAccountList.remove(savingsOid);
          System.out.println("The size of savingsAccountList is now :"+savingsAccountList.size());
        }
      }
      catch (Exception exception) {
        exception.printStackTrace();
      }
    }

    // Try transfering money from one account to the other
    if((checkingAccountList.size() > 0)&&(savingsAccountList.size() > 0)) {
      try {
        Oid fromOid = (Oid)checkingAccountList.get(0);
        Oid toOid = (Oid)savingsAccountList.get(0);
        if((fromOid != null) && (toOid != null)) {
          System.out.println("Transfer Money - 100 from Checking Account :"+
                             fromOid.toString()+
                             " to Savings Account :"+
                             toOid.toString());
          boolean result = teller.transferMoney(fromOid.toLong(),
                                                toOid.toLong(),
                                                100);
          if(result == true) {
            System.out.println("The Money Transfer was a SUCCESS");
          }
          else {
            System.out.println("The Money Transfer was a FAILURE");
          }
        }
      }
      catch (Exception exception) {
        exception.printStackTrace();
      }
    }


    // remove the Teller
    log("Removing the teller");
    teller.remove();

  }

  /**
   * RMI/IIOP clients should use this narrow function
   */

  private Object narrow(Object reference, Class classReference) {
    return PortableRemoteObject.narrow(reference, classReference);
  }

  /**
   * Lookup the EJBs home_ in the JNDI tree
   */

  private TellerHome lookupHome() throws NamingException {
    // Lookup the beans home_ using JNDI
    Context context = getInitialContext();

    try {
      Object home = context.lookup(JNDI_NAME_);
      return (TellerHome) narrow(home, TellerHome.class);
    } catch (NamingException namingException) {
      log("The client was unable to lookup the EJBHome.  Please make sure ");
      log("that you have deployed the ejb with the JNDI name "+JNDI_NAME_+" on the WebLogic server at "+url_);
      throw namingException;
    }
  }

  /**
   * Using a Properties object will work on JDK 1.1.x and Java2
   * clients
   */

  private Context getInitialContext() throws NamingException {

    try {
      // Get an InitialContext
      Properties properties = new Properties();
      properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
      properties.put(Context.PROVIDER_URL, url_);
      return new InitialContext(properties);
    } catch (NamingException namingException) {
      log("We were unable to get a connection to the WebLogic server at "+url_);
      log("Please make sure that the server is running.");
      log(namingException.toString());
      throw namingException;
    }
  }

  /**
  * This is the Java2 version to get an InitialContext.
  * This version relies on the existence of a jndi.properties file in
  * the application's classpath.
  *
  */

  //    private static Context getInitialContext()
  //      throws NamingException
  //    {
  //      return new InitialContext();
  //    }

  private static void log(String string) {
    System.out.println(string);
  }

}

 

Session EJB Facade to JDO Objects
 Teller.java
 TellerHome.java
 TellerBean.java
 Client.java
 build.xml
 application.xml
 ejb-jar.xml
 weblogic-ejb-jar.xml

 

click here to go to
My JDO 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 has co-authored a number of books including "Professional JMS", "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://gsraj.tripod.com/) or mail him at gopalan@gmx.net.

Go to the Component Engineering Cornucopia page

This site was developed and is maintained by Gopalan Suresh Raj

This page has been visited times since February 26,2002.

Last Updated : Feb 26, 2002

If you have any questions, comments, or problems regarding this site, please write to me I would love to hear from you.


Copyright (c) 1997-2002, Gopalan Suresh Raj - All rights reserved. Terms of use.

All products and companies mentioned at this site are trademarks of their respective owners.