JB7+WLS7+MYSQL 开发CMP
CMP开发其实比BMP更简单(我说的是操作上的简单),只要定义好你的业务逻辑, 在实现时其实很快的。但网上竟然找不到一任何用JB开发CMP的例子,在J道上有一篇文章竟然要收50元才教大家如何用JB开发CMP,太黑了。而且是站长发的,所以在下不敢在那儿发表这篇文章,不过请大家在别的地方相互转贴,不要让那家伙黑了心骗别人的钱。
JB开发CMP,其实方便得很,就是大多数人不知道如何操作,因为CMP不是从BEAN设计器的设计界面建立的。而且很多选项没有别人说明确实不知道选什么、前题是根据原来的那一篇配置的文章已经配置好JB7+WLS+MYSQL
现在开始,先定义CMP持久化字段的数据库,比如我们要做一个Product的BEAN,包括四个字段:
productID:产品编号(唯一)
name:产品名称
description:产品说明
basePrice:产品基价
那么先要定义好数据库:
mysql -uroot -p
111111
use ejbdb;
create table ProductBean(
productID varchar(60) not null primary key,
name varchar(60),
description varchar(200),
basePrice double(8,2) default 0。00
);
启动JB7。
File->New Project->输入工程名 如:myproject2
File->New 选择Enterprise,选择EJB2.0 Bean Designer,OK。
按New弹出EJB module Wizard,Name改为ProductApp,左边组树上出现设计器ProductApp 注意这时不要从右边的设计界面上Create EJB,双击设计器ProductApp,在组件树下面会出现DataSources,右键选择 Import Schema From Database,弹出Database Schema provider窗口在All schema前面打勾、选择Driver为 org.gjt.mm.mysql.Driver,下面的url会自动为你原来设定的URL。注意在原来设定URL时不应该加jdbc:,要不这儿就会出现jdbc:jdbc:mysql://localhost:3306/ejbdb 如果是这样去掉一个\\\"jdbc:",输入username和password(root:111111)。把jdni name中的默认值DataSource改为你在WLS中配置MYSQL时的JDIN NAME(例子中是ejbPool)。点击OK,如果连结成功在DataSources下面会出现一个ejbPool,点击它前面的+号可以看到ejbdb这个库下面的所有表,我们现在要把productbean这个表来作为持久化字段的对应关系,所以右击productbean
选把第一项Create CMP2.0 Entity Bean。注意Mysql把表名全部设为小写了,所以新建的Bean的名称为Productbean,这时右边的设计界面中产生一个Bean设计窗,名称为Productbean,左击名称,右边出现属性对话框:
Bean name:改为ProductBean。
Abstract Schema name:会自动跟着改成ProductBean。
interface:local/remote
always wrap primary key:true
classes and packages:还是的BMP一样,默认的命名是:
Bean class: com.fuck.axamn.ProductBean Home interface class: com.fuck.axamn.ProductRemoteHome local Home interface class: com.fuck.axamn.ProductHome Remote interface calss: com.fuck.axamn.ProductRemote Local interface calss: com.fuck.axamn.Product 而本例中我是这样命名的: Bean class: com.fuck.axamn.ProductBean Home interface class: com.fuck.axamn.ProductHome local Home interface class: com.fuck.axamn.ProductLocalHome Remote interface calss: com.fuck.axamn.Product Local interface calss: com.fuck.axamn.ProductLocal
CMP properties中,本例是一个BEAN对应一张表,所以先第一个Single table maping如果是一个BEAN和多表关关联选第二项,然后把左边的primary key和右边各表对应的字段用红线连一下就行了,你只要点primary key的字段拖就会出现红线。
点击左边组件树上设计器ProductApp上面的package,一级一级点开,看到生成的5个文件
ProductHome.java
ProductLocalHome.java
Product.java
ProductLocal.java
ProductBean.java
一一按本例附件中的文件内容敲进去。完成后双击设计器,让右边回到BEAN设计界面上,会看到ProductBean的finder方法有七个,findByPrimaryKey是系统自动生成系统的,这个不要你考虑、但是其它的6个系统不可能知道你是按什么条件查找,所以要手工写入EJB-QL、在各方法上点击一下就会在右边弹出对话框,别有都不动,在最下面的Query内容框中输入以下对应的内容
findByName方法:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.name=?1
findByDescription方法:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.description=?1
findByBasePrice方法:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.basePrice=?1
findExpensiveProducts:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.basePrice<?1
findCheapProducts:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.basePrice>?1
findAllProducts:SELECT OBJECT(p) FROM ProductBean AS p WHERE p.productID IS NOT NULL
右键点击工程mysproject make,如果输入没有错误,应该顺利编译。然后按F9运行。如果WLS没有启动JB会自动启动它的。
没有问题后右击设计器,选择Deploy可以顺利发布到WLS上,从http://localhost:7001/console进入后可以看到ProductApp 被发布到WLS中了。
测试:
在工程中,File->New->Enterprise->EJB test Client。名称设为ProductClient 在左边组件树中双击ProductClient.java,编辑内容为本本例提供的内容。
make ProductClient.java
run ProductClient.java
在测试文件中如何查找ProductApp这个EJB呢,其实你在左边组件树中双击设计器下面ProductBean的名称,右边会显示出这个BEAN的属性,Home JDNI NAME和Local JDNI name分别就是远程和本地的JDNI命称,你在测试文件就查找这个名称,如:
Object objref = ctx.lookup("ProductBeanRemote");
"ProductBeanRemote"就是Home JDNI NAME框中的值。