2. 数据库的建立:Entity Beans代表了Database中的数据,所以需要数据库支持,但一般情况下,我们知道,可以根据容器管理的Entity Beans导出SQL DDL。另一方面,可以根据SQL DDL生成容器管理的Entity Beans。两种方法都可以。比如JBuilder 7两种方法都提供了。但我想,信息模型(数据库)的建立在编码之前就应该存在,所以建议采用第二种办法。当然有些时候第一种会较为合理些,因为并不是表中所有的字段都会映射到Entity Beans中。该例子中建立了这样这样一个Table: /*===================================================*//* Table : techniquespec *//*===================================================*/create table techniquespec (techniqueitem char(100) not null,units char(10) null,minvalue decimal(16,6) null,maxvalue decimal(16,6) null,types char(1) null,signon char(1) null,constraint PK_TECHNIQUESPEC primary key (techniqueitem))其中,开发人员在建表的过程中,不需要手工去写SQL DDL语句,一般都可以借助于工具进行,比如PowerDesigner、ERWin等工具。用用就会了,不要对工具产生不好的情绪,但前提是你熟悉数据库理论。用户建好Table后,可以填入数据,中文的也可以。3. 容器管理的Entity Beans的开发:JBuilder对EJB开发支持的比较好,提供了图形化的方式。由于我们已经建立好了Database,前面的techniquespec表,我们可以借助于Import Schema From Database,将SQL DLL引入进来。(由于这里不能贴出操作图片,所以只能用文字说明梗概,大家在设计过程中有什么问题,可以发邮件给我,我尽力而为。)在这个过程中,一定要注意JNDI的名字和数据源中的JNDI要一致。得到SQL DLL后,我们可以根据techniquespec表生成CMP 2.0 Entity Beans,在这里我们采用LocalHome访问Entity Beans,为什么采用?后续文章中都会详细阐述。现在想返回表techniquespec中列techniqueitem的所有内容。首先,真假一个findByTypes Finder方法,EJB QL语句为: SELECT OBJECT(p) from Techniquespec AS p,其中返回值为Collection。下面给出代码。 LocalHome接口: package cacdsystem; import javax.ejb.*;import java.util.*; public interface TechniquespecHome extends javax.ejb.EJBLocalHome{ public Techniquespec create(String techniqueitem) throws CreateException; public Collection findByTypes() throws FinderException;//添加的Finder方法 public Techniquespec findByPrimaryKey(String techniqueitem) throws FinderException;} Local接口: package cacdsystem; import javax.ejb.*;import java.util.*;import java.math.*; public interface Techniquespec extends javax.ejb.EJBLocalObject{ public String getTechniqueitem(); public void setUnits(String units); public String getUnits(); public void setMinvalue(BigDecimal minvalue); public BigDecimal getMinvalue(); public void setMaxvalue(BigDecimal maxvalue); public BigDecimal getMaxvalue(); public void setTypes(String types); public String getTypes(); public void setSignon(String signon); public String getSignon();} bean类: package cacdsystem; import javax.ejb.*; abstract public class TechniquespecBean implements EntityBean{ EntityContext entityContext; public java.lang.String ejbCreate(java.lang.String techniqueitem) throws CreateException { setTechniqueitem(techniqueitem); return null; } public void ejbPostCreate(java.lang.String techniqueitem) throws CreateException { } public void ejbRemove() throws RemoveException { } public abstract void setTechniqueitem(java.lang.String techniqueitem); public abstract void setUnits(java.lang.String units); public abstract void setMinvalue(java.math.BigDecimal minvalue); public abstract void setMaxvalue(java.math.BigDecimal maxvalue); public abstract void setTypes(java.lang.String types); public abstract void setSignon(java.lang.String signon); public abstract java.lang.String getTechniqueitem(); public abstract java.lang.String getUnits(); public abstract java.math.BigDecimal getMinvalue(); public abstract java.math.BigDecimal getMaxvalue(); public abstract java.lang.String getTypes(); public abstract java.lang.String getSignon(); public void ejbLoad() { } public void ejbStore() { } public void ejbActivate() { } public void ejbPassivate() { } public void unsetEntityContext() { this.entityContext = null; } public void setEntityContext(EntityContext entityContext) { this.entityContext = entityContext; }}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货