快速业务通道

循速渐进学用Session Bean(五) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25

循速渐进学用Session Bean(五)

时间:2008-05-07

创建一个实用的Session Bean

HelloWorldSession例子的主要目的是帮助你熟悉一个session bean的整体结构。现在你已经熟悉了session bean的结构,你可以写一个更实用的bean了。特别地,你可以写一个由数据库中接收数据的bean。

以下的例子,假定你拥有一个SQL表格,里面包含有产品的代码和价格,你也可以使用以下SQL命令建立它:

create table price(product_code varchar(10) not null primary key,price decimal(10,2) not null)

Pricing session bean可以列出全部有效的产品代码,并且可以返回某个产品代码的价格,该代码由Remote接口指定,如6.9列表所示:

Listing 6.9 Source Code for Pricing.javapackage usingj2ee.pricing;import java.rmi.*;import javax.ejb.*;/** Defines the methods you can call on a Pricing session */public interface Pricing extends EJBObject{/** Returns all the available product codes */public String[] getProductCodes() throws RemoteException;/** Returns the price for a specific product code */public double getPrice(String productCode)throws RemoteException, InvalidProductCodeException;}

Pricing session bean并不需要记得某个客户的任何信息,所以可以用一个无状态的session bean实现。PricingHome接口如列表6.10所示,它仅需要一个create方法。

Listing 6.10 Source Code for PricingHome.javapackage usingj2ee.pricing;import java.rmi.*;import javax.ejb.*;/** Defines the methods for creating a Pricing session */public interface PricingHome extends EJBHome{/** Creates a Pricing session bean */public Pricing create() throws RemoteException, CreateException;}

当一个session bean需要访问一个数据库连接时,它通常在setSessionContext方法中分配一个连接,最后在ejbRemote方法中释放它。当然,如果你拥有一个数据库的连接,在容器调用ejbPassivate方法时,你必须准备关闭它,在容器调用ejbActivate时,重新得到连接。

你将会发现大部分的EJB开发者使用一个方法来返回一个连接;这样你就以后就可以修改得到连接的方法,而不会影响使用这些连接的代码。你也应该使用DataSource对象来创建连接。DataSource让修改数据库的驱动变得容易,并且可以在需要的时候使用连接池。

列表6.11展示了Pricing session bean的实现类PricingImpl

Listing 6.11 Source Code for PricingImpl.javapackage usingj2ee.pricing;import java.rmi.*;import java.util.*;import javax.ejb.*;import java.sql.*;import javax.sql.*;import javax.naming.*;/** The implementation class for the Pricing bean */public class PricingImpl implements SessionBean{/** The session context provided by the EJB container. A session bean musthold on to the context it is given. */private SessionContext context;/** The database connection used by this session */private Connection conn;/** An EJB must have a public, parameterless constructor */public PricingImpl(){}/** Called by the EJB container to set this session''s context */public void setSessionContext(SessionContext aContext){context = aContext;}/** Called by the EJB container when a client calls the create() method inthe Home interface */public void ejbCreate()throws CreateException{try{// Allocate a database connectionconn = getConnection();}catch (Exception exc){throw new CreateException

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号