CSDN博客

img sinapaper

我的EJB学习历程(八)

发表于2004/7/15 15:43:00  2528人阅读

大笑微笑生气吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头吐舌头生气微笑大笑


偷笑我爱北京天安门偷笑


偷笑天安门上太阳升偷笑


偷笑伟大领袖毛主席偷笑


偷笑指引我们向前进偷笑

偷笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑偷笑

<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">这个礼拜发生了好多事情啊。所以一直没有时间写。不过好多人问我怎么不写了啊?我是要写的,现在就开始写。(五)里边有个弟兄问我的<span lang="EN">IBM的网站在哪儿,我的收藏夹被DEL了,在GOOGLE上找了好久也没找到,等我找到了,再发上去!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">不过我以后会把我所有引用网址都给打上去。<span lang="EN"><o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">好了,现在进入我的第<span lang="EN">4章咯。<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">开发<span lang="EN">EJB1.1实体BEAN,好象关于EJB实体BEAN还要分版本的,不过现在我也不清楚为什么分版本。<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">由于数据库<span lang="EN">BEAN这个地方的部署我也没有搞清楚,所以我找了LOMBOZ上边有个示例程序,咱们先把这个实验好了,然后再照书做,OK?<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">摘自:<span lang="EN">http://www.objectlearn.com/support/docs/cmp.jsp<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1-9步和我以前写的一样,是如何建立J2EE项目的,这在我以前的我文章里有写。<o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">从第<span lang="EN">10步开始写吧:<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><img alt="" hspace="0" src="/images/blog_csdn_net/sinapaper/24486/r_ejb1.jpg" align="baseline" border="0" /></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">现在选中<span lang="EN">CMP这一项。 然后打上你自己中意的名字和包名,做NEXT。<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">然后就会进入到<span lang="EN">CMP这个界面了:其实这个界面一看就知道是怎么回事:<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p></o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p><img alt="" hspace="0" src="/images/blog_csdn_net/sinapaper/24486/r_ejb2.jpg" align="baseline" border="0" />&nbsp;</o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">写上表名,加上字段,一切简单的<span lang="EN">OK了。记得啊,这里DATASOURCE一定要和表里边的字段一样。<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">还有对应的数据类型。可以加好多的字段,但是这个例子里边就给了两个字段,我们也姑且用他这两个字段。<span lang="EN"><o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">对对了,还有就是设置一个<span lang="EN">PRIMARY KEY。搞定。FINISH。<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">这个时候<span lang="EN">ECLIPSE会自己就把你刚才建立的AddressBean给打开。<o:p></o:p></span></span></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">然后你照着这个例子改代码,其实不讲为什么这么改大家也都能明白:<span lang="EN"><o:p></o:p></span></span></p> <p><b><span lang="EN" style="BACKGROUND: white; COLOR: #7f0055; FONT-FAMILY: Courier">package</span></b><span lang="EN" style="BACKGROUND: white; FONT-FAMILY: Courier"> com.testing.cmp;</span><span lang="EN"><o:p></o:p></span></p> <p><b><span lang="EN" style="BACKGROUND: white; COLOR: #7f0055; FONT-FAMILY: Courier">import</span></b><span lang="EN" style="BACKGROUND: white; FONT-FAMILY: Courier"> javax.ejb.EntityBean;</span><span lang="EN"><o:p></o:p></span></p> <p><font face="宋体"><span lang="EN" style="COLOR: #3399ff">/**<br />* @ejb.bean name="Address"<br />* jndi-name="AddressBean"<br />* type="CMP"<br />* primkey-field="name"<br />* schema="addressSchema" <br />* cmp-version="2.x"<br />* <br />* @ejb.persistence <br />* table-name="address" <br />* <br />* @ejb.finder <br />* query="SELECT OBJECT(a) FROM addressSchema as a" <br />* signature="java.util.Collection findAll()"
*
**/

public abstract class AddressBean implements EntityBean {

...

 

Modify the ejbCreate and ejbPostcreate methods to accepts two parameters:

/**
* The ejbCreate method.
*
* @ejb.create-method
*/

public java.lang.String ejbCreate(String name, String phone)
     throws javax.ejb.CreateException {
        setName(name);
        setPhone(phone);
        return null;
}

/**
* The container invokes this method immediately after it calls ejbCreate.
*
*/

public void ejbPostCreate(String name, String phone) throws javax.ejb.CreateException {
}

必须改POST和CREATE方法的内容啊。等下再告诉你们为什么要这样做,对了,他里边还都帮你写好了

setName();

setPhone();方法。直接用就好了。

 

然后SAVE,把刚才写的BEAN加到EJB里边,就是用J2EE->Add Ejb to Modules ,然后选择你刚才建立的EJB就好了。

 

下边是最讨厌的东西了,就是写个EJBDOCLET,示例给的是要改ejbGenerate.xmlNND,我根本就没有这个文件,后来查了好多的资料,才知道,原来他那个是旧版本,郁闷~~~~~~旧版本还要往上贴。

 

我们3.X要改的是xdoclet.xml这个文件,这个文件保证有,大家找到之后就能看见,他里边有好多种配置服务器的数据库的XML,我用的是JBOSS,所以就改这块了。

< jboss

            version="3.0"

            unauthenticatedPrincipal="nobody"

            xmlencoding="UTF-8"

            destdir="${ejb.dd.dir}"

            validatexml="false"

            datasource="java:/MySqlDS"

            datasourcemapping="mySQL"

            preferredrelationmapping="PLEASE_MODIFY_THIS"

/ >

 

对了对了,说到这我找到了文章也不错,是个小J写的。给你们地址:
http://nemuneko.com/jboss/lomboz_cmp.html

因为我最近在学日语,所以能看明白点,看不明白的就看图理解咯~~~~~

 

注意啊,这里是最关键的地方,我觉得,可能是因为我比较的笨。呵呵。

 

这里的MySqlDS是我在(7)里边写的在JBOSS里边配置的DEFUALT DATASOUCE,对了,我按照7里边写的把mysql-service.xml这个配置文件放的位置好象不可以,我查了好久才找到,原来是你的EJB部署到哪个文件夹下,这个mysql-service.xml文件就要跟着放到那个文件夹下,我机器上的是:D:/jboss-3.0.8/server/default/deploy

这个文件夹。最后就是把你的DB DRIVER放在和这个文件夹对应的LIB里边。

我机器上是这个:

D:/jboss-3.0.8/server/default/lib

 

我用的是Mysql 的driver,没有问题的。

 

这样配置就应该是没问题了。

对了,把建表的语句也给你们:create table address ( name varchar(40) , phone varchar(40));

 

然后SAVE你的XDOCLET.XML。做GENERATE EJB FILES,和DEPLOY。

假如你成功的话,就能看见这么一段的输出:

 

22:50:11,031 INFO [MainDeployer] Starting deployment of package: mybeans.jar
22:50:11,302 INFO [EjbModule] Creating
22:50:11,342 INFO [EjbModule] Deploying Address
22:50:11,392 INFO [EjbModule] Created
22:50:11,392 INFO [EjbModule] Starting
22:50:11,822 INFO [Address] Table 'ADDRESS' already exists
22:50:11,842 INFO [EjbModule] Started
22:50:11,842 INFO [MainDeployer] Deployed package: mybeans.jar

 

一定要看输出啊!很关键的地方。

 

这样就完成了我们的EJB CMP的BEAN了。再写个CLIENT测试他就OK了。

 

把我的CLIENT程序给你们。

 

public void testBean() {

            try {
                Address address = getHome().create("John Smith", "+212 223 4455");
                Collection all = getHome().findAll();
                Iterator it = all.iterator();
                while (it.hasNext()) {
                    Address element = (Address) it.next();
                    System.out.println("Name:" +
                        element.getName() + " Phone: " +element.getPhone() );
                 }

            } catch (Exception e) {

                  e.printStackTrace();

            }

      }

IMPORT自己记得加啊~哈哈。

运行,成功!!!!!!

 

下次又的写些理论上的东西,说实话,我最讨厌理论的东西,因为看上去真的很头大!~~

 

 

 

http://nemuneko.com/jboss/lomboz_cmp.html

 

下边这段文字是在CN-JAVA下COPY过来的。(http://www.cn-java.com/target/news.php?news_id=2174)

一、entity Bean 代表了以持久存储机制保存的一个实体,通常为一个DB。客户机通过entity beanremote接口访问它,实现该remote接口的对象被称为EJB对象。每一个
entity
对象都有一个标识符。
Entity Bean
的特征:持久的(分为BMPCMP),允许共享访问,并且有一个主键。
二、编写规则:
 
 1.(1)实现EntityBean的接口。
  (2).类定义为PUBLIC
  (3).类不能定义为abstract final
  (4).实现finaler方法(仅用于BMP)
  (5).实现商业方法。
(6).
含有一个空构造器。
(7).
不能实现finalize方法。
 2.ejbCreate应满足的规则:
  (1).访问控制修饰符必须为public
(2).
返回类型必为主键(仅对于BMP)
(3).
参数必须为佥的JAVA RMI类型。
(4).
方法修饰符不能为finalstatic
(5).throws
子句可以包括CreateException以及应用程序中指定的其它异常。
3.ejbPostCreate:
每一个ejbCreate必须对应一个ejbPostCreate方法,通常为空。
(1).
参数的数量和类型必与相应ejbCreate方法匹配。
(2).
访问控制修饰符必须为public
(3).
方法修饰符不能为final static
(4).
返回类型必须为void
(5).throws
子句包括CreateException以及应用程序中指定的其它Exception
  4.ejbRemove方法:当EJB客户调用此方法时,将删除DB中该实体的状态或EntityBean
    被一个DB删除直接移走。
  5.ejbLoad方法:利用DB刷新实体变量。
   ejbStore方法:将变量写到DB中。
这两个方法用于同步与存贮在DB中的值所对应的EntityBean实体变量。
  6.finder方法的规则:
(1).
必须ejbFindByPrimaryKey方法。
(2).finder
方法务必须以ejbFind为前缀。
(3).
访问控制修饰符必须为public
(4).
方法修饰符不能为final static
(5).
参数必须是合法的Java RMI类型。
(6).
返回类型必须为主键或主键的集合。
(7).throws
子句包括FinderException以及应用程序中指定的其它Exception
  7.商业方法
(1).
方法名不能与EJB结构定义的方法名冲突。
(2).
访问控制修饰必为public.
(3).
方法修饰不能final static
(4).
参数必须为合法的Java RMI类型。
.Home接口的编写规则:
1.Create
方法的编写规则:
(1).
它与enterprise Bean类中对应的方法一样,含有相同的参数。
(2).
返回Remote接口类型。
(3).throws
子句包括对应的ejbCreate ejbPostCreate方法的异常。
2.finder
讲法的编写规则:
(1).Remote
接口中的每一个方法必须与enterpriseBean类中的方法匹配。
(2).
每个方法命名规则与enterprise Bean类中的方法的命名规则一样。
(3).
参数和返回类型必须是合法的Java RMI类型。
(4).throws
子句包括RemoteException

0 0

相关博文

我的热门文章

img
取 消
img