Client.java
上传用户:dinglihq
上传日期:2013-02-04
资源大小:99958k
文件大小:7k
源码类别:

Java编程

开发平台:

Java

  1. package examples.dualpersistent;
  2. import java.rmi.RemoteException;
  3. import java.util.Collection;
  4. import java.util.Properties;
  5. import java.util.Vector;
  6. import java.util.Iterator;
  7. import javax.ejb.CreateException;
  8. import javax.ejb.EJBException;
  9. import javax.ejb.FinderException;
  10. import javax.ejb.ObjectNotFoundException;
  11. import javax.ejb.RemoveException;
  12. import javax.naming.Context;
  13. import javax.naming.InitialContext;
  14. import javax.naming.NamingException;
  15. import javax.rmi.PortableRemoteObject;
  16. /**
  17.  * This class demonstrates calling an entity EJBean.
  18.  * <p>
  19.  * <p>
  20.  * This class also illustrates how to lookup an EJB home in the JNDI tree. 
  21.  * 
  22.  * @author Copyright (c) 1998 by WebLogic, Inc. All Rights Reserved.
  23.  * @author Copyright (c) 1998-2000 by BEA Systems, Inc. All Rights Reserved.
  24.  */
  25. public class Client {
  26.   private String url;
  27.   
  28.   private AccountHome home;
  29.   public Client(String url)
  30.     throws NamingException
  31.   {
  32.     this.url       = url;
  33.     
  34.     home = lookupHome();
  35.   }
  36.   /**
  37.    * Create a new account with the given id and balance
  38.    */
  39.   private Account createAccount(String id, double balance)
  40.     throws CreateException, RemoteException
  41.   {
  42.     log("Creating account " + id + " with a balance of " +
  43.       balance + "...");
  44.     Account ac = (Account) PortableRemoteObject.narrow(home.create(id, balance),
  45.                                                        Account.class);
  46.     log("Account " + id + " successfully created");
  47.     return ac;
  48.   }
  49.   public void example() 
  50.     throws CreateException, RemoteException, FinderException,
  51.            RemoveException
  52.   {
  53.     int numBeans = 20;
  54.     Account [] accounts = new Account [numBeans];
  55.     // Create 20 accounts
  56.     for (int i=0; i<numBeans; i++) {
  57.       accounts [i] = findOrCreateAccount(Integer.toString(i), i * 1000);
  58.     }
  59.     // print out the account balances
  60.     for (int i=0; i<numBeans; i++) {
  61.       log("Account: :"+accounts[i].getPrimaryKey()+
  62.         " has a balance of "+accounts[i].balance());
  63.     }
  64.     // find all accounts with a balance > 5000
  65.     findBigAccounts(5000.0);
  66.     // Remove our accounts
  67. //    log("Removing beans...");
  68.  //   for (int i=0; i<numBeans; i++) {
  69.   //    accounts[i].remove();
  70.   //  }
  71.   }
  72.   /**
  73.    * List all accounts with a balance greater than the parameterized amount.
  74.    * This finder illustrates a Finder Method that returns a Collection.
  75.    */
  76.   private void findBigAccounts(double balanceGreaterThan)
  77.     throws RemoteException, FinderException
  78.   {
  79.     log("nQuerying for accounts with a balance greater than " +
  80.       balanceGreaterThan + "...");
  81.     Collection col = home.findBigAccounts(balanceGreaterThan);
  82.     if(col.isEmpty()) {
  83.       log("No accounts were found with a balance greater that "+balanceGreaterThan);
  84.     }
  85.     
  86.     Iterator it = col.iterator();
  87.     while (it.hasNext()) {
  88.       Account accountGT =
  89.         (Account) PortableRemoteObject.narrow(it.next(),Account.class);
  90.       log("Account " + accountGT.getPrimaryKey() + "; balance is $" + accountGT.balance());
  91.     }
  92.   }
  93.   /**
  94.    * If there already exists an account for this id, we will return
  95.    * it.  Otherwise we will create a new account.
  96.    */
  97.   private Account findOrCreateAccount(String id, double balance)
  98.     throws CreateException, RemoteException, FinderException
  99.   {
  100.     try {
  101.       log("Trying to find account with id: "+id);
  102.       return (Account) PortableRemoteObject.narrow(home.findByPrimaryKey(id),
  103.                                                          Account.class);
  104.     } catch (ObjectNotFoundException onfe) {
  105.       // the account id does not yet exist so create it.
  106.       return (Account) PortableRemoteObject.narrow(home.create(id, balance),
  107.                                                          Account.class);
  108.     } 
  109.   }
  110.   /**
  111.    * Get an initial context into the JNDI tree.
  112.    *
  113.    * Java2 clients can use the jndi.properties file to set the
  114.    * INITIAL_CONTEXT_FACTORY and the PROVIDER_URL
  115.    *  private Context getInitialContext() throws NamingException {
  116.    *    return new InitialContext();
  117.    *  }
  118.    *
  119.    *
  120.    * Using a Properties object will work on JDK 1.1.x and Java2
  121.    * clients
  122.    */
  123.   private Context getInitialContext() throws NamingException {
  124.     
  125.     try {
  126.       // Get an InitialContext
  127.       Properties h = new Properties();
  128.       h.put(Context.INITIAL_CONTEXT_FACTORY,
  129.         "weblogic.jndi.WLInitialContextFactory");
  130.       h.put(Context.PROVIDER_URL, url);
  131.       return new InitialContext(h);
  132.     } catch (NamingException ne) {
  133.       log("We were unable to get a connection to the WebLogic server at "+url);
  134.       log("Please make sure that the server is running.");
  135.       throw ne;
  136.     }
  137.   }
  138.   private static void log(String s) {
  139.     System.out.println(s);
  140.   }
  141.   /**
  142.    * Look up the bean's home interface using JNDI.
  143.    */
  144.   private AccountHome lookupHome()
  145.     throws NamingException
  146.   {
  147.     Context ctx = getInitialContext();
  148.    
  149.     try {
  150.       Object home = ctx.lookup("dualPersistent");
  151.       return (AccountHome) PortableRemoteObject.narrow(home, AccountHome.class);
  152.     } catch (NamingException ne) {
  153.       log("The client was unable to lookup the EJBHome.  Please make sure " +
  154.       "that you have deployed the ejb with the JNDI name " + 
  155.       "ejb20-dualPersistent-AccountHome on the WebLogic server at "+url);
  156.       throw ne;
  157.     }
  158.   }
  159.   /**
  160.    * Runs this example from the command line. Example:
  161.    * <p>
  162.    * <tt>java examples.ejb20.basic.beanManaged.Client "t3://localhost:7001"</tt>
  163.    * <p>
  164.    * The parameters are optional, but if any are supplied,
  165.    * they are interpreted in this order:
  166.    * <p>
  167.    * @param url               URL such as "t3://localhost:7001" of Server
  168.    */
  169.   public static void main(String[] args) throws NamingException {
  170.     System.out.println("nBeginning dualPersistent.Client...n");
  171.     String url       = "t3://localhost:7001";
  172.          
  173.     // Parse the argument list 
  174.      if (args.length != 1) {
  175.       System.out.println("Usage: java examples.ejb20.basic.dualPersistent.Client t3://hostname:port");   
  176.       return;
  177.     } else {
  178.       url = args[0];
  179.     }
  180.     
  181.     Client client = null;
  182.     try {
  183.       client = new Client(url);
  184.     } catch (NamingException ne) {
  185.       log("Unable to look up the beans home: " + ne.getMessage());
  186.       System.exit(1);
  187.     }
  188.     try {
  189.       client.example();
  190.     } catch (Exception e) {
  191.       log("There was an exception while creating and using the Accounts.");
  192.       log("This indicates that there was a problem communicating with the server: "+e);
  193.     } 
  194.     System.out.println("nEnd dualPersistent.Client...n");
  195.   }
  196. }