9,修改方法ejbCreate(),setSessioncontext(),addItem(),removeItem()方法,修改后完整代码如下:
/**
*
*/
package j2ee;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionContext;
import java.util.*;
/**
*
* <!-- begin-user-doc -->
* A generated session bean
* <!-- end-user-doc -->
* *
* <!-- begin-xdoclet-definition -->
* @ejb.bean name="Cart"
* description="An EJB named Cart"
* display-name="Cart"
* jndi-name="Cart"
* type="Stateful"
* transaction-type="Container"
*
* <!-- end-xdoclet-definition -->
* @generated
*/
public abstract class CartBean implements javax.ejb.SessionBean {
/**
*
* <!-- begin-xdoclet-definition -->
* @ejb.create-method view-type="remote"
* <!-- end-xdoclet-definition -->
* @generated
*
* //TODO: Must provide implementation for bean create stub *
*/
SessionContext sessionContext;
String cardHolderName;
Vector items = new Vector();
String creditCardNumber;
public void ejbCreate(String cardHolderName, String creditCardNumber) {
this.cardHolderName = cardHolderName;
this.creditCardNumber = creditCardNumber;
}
/**
*
* <!-- begin-xdoclet-definition -->
* @ejb.interface-method view-type="remote"
* <!-- end-xdoclet-definition -->
* @generated
*
* //TODO: Must provide implementation for bean method stub
*/
public String foo(String param) {
return null;
}
/* (非 Javadoc)
* @see javax.ejb.SessionBean#ejbActivate()
*/
public void ejbActivate() throws EJBException, RemoteException {
// TODO 自动生成方法存根
}
/* (非 Javadoc)
* @see javax.ejb.SessionBean#ejbPassivate()
*/
public void ejbPassivate() throws EJBException, RemoteException {
// TODO 自动生成方法存根
}
/* (非 Javadoc)
* @see javax.ejb.SessionBean#ejbRemove()
*/
public void ejbRemove() throws EJBException, RemoteException {
// TODO 自动生成方法存根
}
/* (非 Javadoc)
* @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
*/
public void setSessionContext(SessionContext sessionContext)
throws EJBException,
RemoteException {
// TODO 自动生成方法存根
this.sessionContext = sessionContext;
}
/**
*
*/
public CartBean() {
// TODO 自动生成构造函数存根
}
/**
* Business method
* @ejb.interface-method view-type = "remote"
*/
public void addItem(Item item) {
// TODO Auto-generated method stub
items.addElement(item);
}
/**
* Business method
* @ejb.interface-method view-type = "remote"
*/
public void removeItem(Item item) {
// TODO Auto-generated method stub
Enumeration elements = items.elements();
while (elements.hasMoreElements()) {
Item current = (Item) elements.nextElement();
if (item.getClass().equals(current.getClass())
&& item.getTitle().equals(current.getTitle())) {
items.remove(current);
return;
}
}
}
/**
* Business method
* @ejb.interface-method view-type = "remote"
*/
public float getTotalPrice() {
// TODO Auto-generated method stub
float totalPrice= 0f ;
Enumeration elements=items.elements();
while (elements.hasMoreElements()) {
Item current=(Item)elements.nextElement();
totalPrice+=current.getPrice();
}
return (long)(totalPrice*100)/ 100f ;
}
}
10,打开CartHome.java,CartLocalHome.java,将其中create()方法修改为create(String cardHolderName, String creditCardNumber)
11,编写客户端测试程序。新建EJB Client Test,名为:EjbTest如图1-7
12,具体设置如下图1-8
13,打开EjbTest.java,在文件末尾添加main()方法。具体代码如下:
package j2ee;
import junit.framework.TestCase;
import java.util.Hashtable;
import javax.rmi.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.rmi.*;
/**
* EJB Test Client
*/
public class EjbTest extends TestCase {
public EjbTest() {
// TODO 自动生成构造函数存根
}
/** Home interface */
protected j2ee.CartHome home;
/**
* Get the initial naming context
*/
protected Context getInitialContext() throws Exception {
Hashtable props = new Hashtable();
props.put(
Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(
Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
Context ctx = new InitialContext(props);
return ctx;
}
/**
* Get the home interface
*/
protected j2ee.CartHome getHome() throws Exception {
Context ctx = this.getInitialContext();
Object o = ctx.lookup("Cart");
j2ee.CartHome intf = (j2ee.CartHome) PortableRemoteObject.narrow(
o,
j2ee.CartHome.class);
return intf;
}
/**
* Set up the test case
*/
protected void setUp() throws Exception {
this.home = this.getHome();
}
public static void main(String[] args){
Cart bean=null;
EjbTest client=new EjbTest();
float result= 0f ;
try {
bean=client.getHome().create("Benson", "1234");
Item item1=new Item("Master EJB", 65.00f );
Item item2=new Item("Master JSP", 60.00f );
Item item3=new Item("Master Spring", 45.00f );
bean.addItem(item1);
bean.addItem(item2);
bean.addItem(item3);
bean.removeItem(item2);
result=bean.getTotalPrice();
System.out.println("TotalPrice :"+result);
} catch (RemoteException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
14,右击项目MySessionEjb,在弹出菜单中选择”导出”,在导出对话框选择”J2EE-EAR file”,如图1-9
单击下一步,将部署位置设置为”%Jboss_Home%/server/default/deploy”,若该目录已存在EAR文件,则应欢迎勾选”Overwrite existing file”,单击完成.设置如图1-10
15,在右下角Server视图,启动Jboss 4.0,右击Test.java文件,选择”运行方式-Java应用程序”.若控制台出现” TotalPrice : 110.0 ” 字样,说明调用成功。