Oracle8i Enterprise JavaBeans Developer's Guide and Reference
Release 3 (8.1.7)

Part Number A83725-01

Library

Solution Area

Contents

Index

Go to previous page Go to beginning of chapter Go to next page

Container-Managed Entity Bean Example

Client

import customer.Customer;
import customer.CustomerHome;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.rmi.RemoteException;
import javax.ejb.RemoveException;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import java.util.Enumeration;
import oracle.aurora.jndi.sess_iiop.ServiceCtx;
import java.util.Hashtable;
import javax.naming.Context;

public class CustomerClient
{
  public static void main(String[] argv)
  {
                
    System.out.println("client is running");
    try
      {
	if (argv.length != 4) {
	  System.out.println("usage: Client serviceURL 
objectName user password"); System.exit(1); } String serviceURL = argv [0]; String objectName = argv [1]; String user = argv [2]; String password = argv [3]; Hashtable env = new Hashtable(); env.put(Context.URL_PKG_PREFIXES, "oracle.aurora.jndi"); env.put(Context.SECURITY_PRINCIPAL, user); env.put(Context.SECURITY_CREDENTIALS, password); env.put(Context.SECURITY_AUTHENTICATION, ServiceCtx.NON_SSL_LOGIN); Context ic = new InitialContext (env); CustomerHome ch = (CustomerHome)ic.lookup (serviceURL + objectName); Customer cust = ch.create("Jake Terwilliger", "Pine Drive"); System.out.println("created " + cust.getName()); System.out.println (" address = " + cust.getAddress()); String pk = (String) cust.getPrimaryKey(); System.out.println("Primarykey = " + pk); //imagine that time passes here, or this program is //finished, and a later program wants to use the //primary key Customer cust1 = ch.create("Al Smith", "Sesame Street"); Customer cust2 = ch.create("Bob Davidson", "Elm Street"); Customer cust3 = ch.create("Carol Fernandez", "Cedar Blvd"); cust = null; cust = ch.findByPrimaryKey(pk); System.out.println("Found by primary key lookup"); System.out.println (" name = " + cust.getName()); System.out.println (" address = " + cust.getAddress()); cust.remove(); System.out.println("removed bean"); cust = ch.findByWhere("where cust_addr = 'Elm Street'"); System.out.println("Found by findByWhere"); System.out.println (" name = " + cust.getName()); System.out.println (" address = " + cust.getAddress()); cust.remove(); System.out.println("removed bean"); Enumeration e = ch.findAllCustomers(""); while(e.hasMoreElements()) { cust = (Customer) e.nextElement(); System.out.println (" name = " + cust.getName()); System.out.println (" address = " + cust.getAddress()); } } catch (RemoveException e) { System.out.println("RemoveException caught:" + e); e.printStackTrace(); } catch (NamingException e) { System.out.println("NamingException caught:" + e); e.printStackTrace(); } catch (FinderException e) { System.out.println("FinderException caught:" + e); e.printStackTrace(); } catch (CreateException e) { System.out.println("CreateException caught:" + e); e.printStackTrace(); } catch (RemoteException e) { System.out.println("RemoteException caught:" + e); e.printStackTrace(); } } }

Home Interface

package customer;
import javax.ejb.EJBHome;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.FinderException;

public interface CustomerHome extends EJBHome
{
  public Customer findByPrimaryKey(String pk) throws RemoteException, 
FinderException; public Customer findByWhere(String whereString) throws RemoteException,
FinderException; public java.util.Enumeration findAllCustomers(String whereString) throws
RemoteException, FinderException; public Customer create(String custname, String custaddr) throws
RemoteException, CreateException; }

Remote Interface

package customer;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;

public interface Customer extends EJBObject
{
  public String getName() throws RemoteException;
  public String getAddress() throws RemoteException;
  public void setAddress(String addr) throws RemoteException;
}

Bean Implementation

package customerServer;
import customer.*;
import javax.ejb.*;
import java.sql.*;
import java.util.*;
import java.rmi.RemoteException;
import java.io.Serializable;

public class CustomerBean implements EntityBean
{
  private transient EntityContext ctx;
  public String name;
  public String addr;

  public String getName() throws RemoteException
  {
    return name;
  }
  public void setName(String name) throws RemoteException
  {
    this.name = name;
  }
  public String getAddress() throws RemoteException
  {
    return addr;
  }
  public void setAddress(String addr) throws RemoteException
  {
    this.addr = addr;
  }
  public void setEntityContext(EntityContext ctx)
  {
    this.ctx = ctx;
    Properties props = ctx.getEnvironment();

  }
  public void unsetEntityContext()
  {
    this.ctx = null;
  }

  public String ejbCreate(String custname, String custaddr) throws 
CreateException, RemoteException
  {
    try {
      setName(custname);
      setAddress(custaddr);
    } catch (java.rmi.RemoteException e) {
      throw new CreateException();
    }
      return null;
  }

public String ejbFindByPrimaryKey(String pk) throws RemoteException, 
FinderException {
  return null;
}


  public void ejbPostCreate(String custname, String custaddr) throws 
CreateException
  {
    // get primarykey
    String pk = (String)ctx.getPrimaryKey();
  }


  public void ejbActivate()
  {

  }

  public void ejbPassivate()
  {

  }

  public void ejbRemove()
  {
  }

  public void ejbLoad()
  {
    // You can get to the primary key
    String pk = (String)ctx.getPrimaryKey();
  }

  public void ejbStore()
  {
  }

}

XML Deployment Descriptor

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems Inc.//DTD Enterprise JavaBeans 1.1
//EN" "ejb-jar.dtd">
<ejb-jar>
   <enterprise-beans>
      <entity>
         <ejb-name>customerbean</ejb-name>
         <home>customer.CustomerHome</home>
         <remote>customer.Customer</remote>
         <ejb-class>customerServer.CustomerBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.String</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-field><field-name>name</field-name></cmp-field>
         <cmp-field><field-name>addr</field-name></cmp-field>
         <primkey-field>name</primkey-field>
         <env-entry>
           <env-entry-name>realmName</env-entry-name>
           <env-entry-type>java.lang.String</env-entry-type>
           <env-entry-value>my.realm</env-entry-value>
         </env-entry>
         <env-entry>
           <env-entry-name>customerBean.databaseURL</env-entry-name>
           <env-entry-type>java.lang.String</env-entry-type>
           <env-entry-value>jdbc:oracle:kprb:</env-entry-value>
         </env-entry>
         <env-entry>
           <env-entry-name>customerBean.JDBCDriverName</env-entry-name>
           <env-entry-type>java.lang.String</env-entry-type>
           <env-entry-value>oracle.jdbc.driver.OracleDriver</env-entry-value>
         </env-entry>
      </entity>
   </enterprise-beans>
   <assembly-descriptor>
      <security-role>
         <role-name>PUBLIC</role-name>
      </security-role>
      <method-permission>
         <role-name>PUBLIC</role-name>
         <method>
            <ejb-name>test/customer</ejb-name>
            <method-name>*</method-name>
         </method>
      </method-permission>
      <container-transaction>
         <method>
            <ejb-name>test/customer</ejb-name>
            <method-name>*</method-name>
         </method>
         <trans-attribute>RequiresNew</trans-attribute>
      </container-transaction>
   </assembly-descriptor>
</ejb-jar>

Oracle-Specific Deployment Descriptor

<?xml version="1.0"?>
<!DOCTYPE oracle-descriptor PUBLIC "-//Oracle Corporation.//DTD Oracle 1.1//EN" 
"oracle-ejb-jar.dtd">
<oracle-descriptor>
<mappings>
  <ejb-mapping>
     <ejb-name>customerbean</ejb-name>
     <jndi-name>test/customer2</jndi-name>
  </ejb-mapping>
</mappings>

<persistence-provider>
  <persistence-name>psi-ri</persistence-name>
  <persistence-deployer>oracle.aurora.ejb.persistence.ocmp.OcmpEntityDeployer
</persistence-deployer> </persistence-provider> <persistence-descriptor> <ejb-name>customerbean</ejb-name> <persistence-name>psi-ri</persistence-name> <psi-ri> <schema>SCOTT</schema> <table>customers</table> <attr-mapping> <field-name>name</field-name> <column-name>cust_name</column-name> </attr-mapping> <attr-mapping> <field-name>addr</field-name> <column-name>cust_addr</column-name> </attr-mapping> </psi-ri> </persistence-descriptor> </oracle-descriptor>

Database Table Updates

connect scott/tiger

drop table CUSTOMERS;

create table CUSTOMERS (CUST_NAME VARCHAR(64) NOT NULL, CUST_ADDR VARCHAR(64), 
CUST_SERIALIZE LONG RAW );


Go to previous page
Go to beginning of chapter
Go to next page
Oracle
Copyright © 1996-2000, Oracle Corporation.

All Rights Reserved.

Library

Solution Area

Contents

Index