创建EJB组件

816-7864-10

Table of Contents Table of Contents

附录B


迁移和升级EJB 1.1 版企业Bean

翻译:Smiling_Sundoc:田大海

如果你用早期版本的Sun Java System Studio IDE来创建企业 bean也就是说如果企业 bean按照EJB 1.1版规范来创建,可以把它们迁移到当前版本的IDEEJB 2.0版。按照EJB 1.1 企业 bean的类型以及你要如何对它做处理,这个过程可能会自动地由IDE来完成转换。可能你要自己做一些手工改变,本附录就讨论这种情况。


了解当前发行版的有关更新

当前IDE和以前版本的不同包括container-managed persistent (CMP) 实体 bean他们的属性以及企业 bean的校验。请注意下面两点:

  • 大部分bean的转换是自动的。 大多数情况下,当你导入一个EJB 1.1 企业 bean到当前版本的IDEIDE 会自动地把它转换成EJB 2.0 企业 bean。然而,在 EJB 1.1环境中生成的CMP 实体 bean是个特例。

你可以通过版本号标签(当前版本的IDE添加的)非常容易地区分这些beanCMP 实体 bean的属性页中, CMP Version, 你可以看到在当前IDE中生成的bean有一个值2.x,而 以前版本的CMP 实体 bean具有值1.x (以前版本的beanCMP 1.x 实体 bean.)

  • EJB 校验功能增强了。当前版本的IDE中增强了校验功能,你可能会发现在以前的版本中正确的的Java代码,增强功能会指出它是错误的。一个例子就是 transient修饰符,下面将会详细讨论。

使用EJB Validate (IDE Explore中,从企业 bean的上下文菜单中选择) 或者Build All (package上下文菜单中得到) 去发现包含以前版本bean的应用程序能否部署到当前版本的IDE中。如果校验中发现了错误,请阅读下面一节。 一旦不bean校验成功,把它组装到模块(module)和应用中,试着来部署它。如果部署失败,检查是否是因为bean属性页中的改变导致的问题。

  • 去掉会话 bean中的transient 以前的IDE允许使用transient修饰符,但是当前版本会捕捉到它并发出一个错误信息。要查找、改变这个修饰符请参照避免使用transient修饰符
  • 以前版本的CMP 实体 beans开发阶段一般都没问题,但要在部署之前更新他们。 如果你已经改变了bean transient 修饰符,在开发阶段,当前版本IDE中使用CMP 1.x 实体 bean 不会出现什么问题。然而,如果你要在IDE中部署CMP 1.x 实体 bean ,你必须手工做一些改动,如下所示:
    • RI 部署要求在EJB模块里改变特定bean 的属性。 当前版本一个显著的变化是为CMP 实体 bean声明的数据源的引用部署到J2EE 参照实现application server (RI)中的方式。Bean中跟RI相关的属性现在必须设置在EJB模块里。要了解详细信息请参照把Bean的RI属性转移到EJB模块层
    • 为RI部署编辑生成的SQL语句。如果你在>RI中部署CMP 1.x实体 bean,你必须编辑RI plugin生成的SQL语句,特别是,你必须修改finder方法里的SELECT语句的WHERE子句。要了解详细信息请参照如果你的EJB模块里含有EJB 1.1 CMP 实体Bean

当你已经作出了这些改变,而CMP实体 bean依然是CMP 1.x版;它还没有转变成CMP 2.x的实体 bean。但是这个Bean的存在接口和Bean能够被当前的IDE操作和部署不会发生任何错误。假设你的应用服务器是CMP 2.0兼容的。

  • 在加入新的特性之前转化CMP实体bean.你不可能在CMP 1.x 的实体bean中加入EJB 2.0的特性,如本地接口。如果你需要这样做,你必须首先按照转换CMP 1.x 实体Bean所述将其手工转化为CMP 2.x。


进行特定的改变

在这下面一节是介绍怎样从前一个版本IDE创建的企业Bean升级 。

转化CMP 1.x 实体 Bean

有些时候你不能从头重建一个CMP 1.x的实体bean,但是你希望使用CMP 2.x的特性,如本地接口、本地参考引用、select和home方法。在这种情况下你需要手动的升级这个Bean.升级到CMP 2.x bean步骤如下:

1. 在explorer窗口,创建一个新的包。

2. 从CMP 1.x 实体bean的原来的包下拷贝文件到新建的包下面(作为拷贝而不是连接)。

3.使用EJB Builder向导,来创建一个新的CMP实体 bean。

在向导最后一个屏面,声明拷贝的类作为Bean的remote和home接口,同时声明bean class和 primary-key class。

此时,忽略IDE关于没有发现CMP域的警告。

4. 加入需要的域,修改其他属性来改正EJB校验错误。

当你引入任何其他类型EJB 1.1企业bean到当前版本的IDE中,它们会被自动升级到EJB2.0。

避免在老的Bean中使用新特性

如果你希望在老版本IDE创建的EJB bean中使用新特性,那么结果是不可预料的。 下面是两个这样的例子。

不要在CMP 1.x 实体Bean加入本地接口

当你用这个产品时,你会发现EJB 1.1 Bean有一个不同的上下文 菜单(当你右击Bean的逻辑节点,这个菜单出现在 explorer窗口中), 并且这个菜单的选项是被限制的。但是如果你选择Customize,从这个菜单,你可以看到一个窗口可以让你选择 local interface和local home文件。

这些域不能被直接编辑,这些local interface文件的路径没有出现在EJB 1.1 CMP 实体 bean 的属性页上。


caution icon

警告- 不要用这种方式增加local interface。如果你这样做,你将不能删除这些接口。CMP 实体 bean将变得无效并且不能被修复。


也不要增加EJB 本地引用

同样的告诫也适用于EJB本地引用(local EJB references)。它们不能加到CMP 1.x 实体bean中,即使Customizer窗口看上去允许这样做。如果你已经这样做了,你可以在Customizer对话框中删除它们。

EJB 2.0规范的内容非常广,其新的编码实践在新的IDE中被大大加强。在可能的情况下,你应当使用新版本IDE的EJB Builder向导重新创建以前的企业bean。仔细评估你的代码并升级它以适用当前的EJB规范。


注意 如果需要的话你可以在其他类型的EJB 1.1 企业 bean中增加本地接口和 EJB本地引用。因为IDE自动转化这些bean来适用当前的EJB规范。Customizer对话框和属性页可以用来修改这些企业 bean


改变PointBase的用户名和密码

PointBase缺省的数据库用户名和密码已经从原来的public改为pbpublic.所有的属性页都因此需要修改来反映这种变化。注意输入密码后使用Enter或Return键确认。

避免使用transient修饰符

在前一个IDE版本中,在会话bean中允许下面的声明:

public class HelloBean implements javax.ejb.SessionBean { private transient SessionContext context; 

在前一个版本中,对使用transient修饰符不作校验。在当前版本中,对它进行校验并禁止使用。

对于一个简单EJB 1.1 会话 bean的EJB校验命令也许不会校验出使用了这个修饰符。下面几步,能够确认你的bean是完全校验过的。

1. 在explorer窗口,选择需要校验的bean

2. 在主菜单,选择Build right arrow Build.

IDE构建编译(build)这个Bean的所有的类同时进行校验。编译器把构建信息输出到结果窗口,包括任何错误信息。

如果你的会话bean中transient修饰符,在构建bean或者client执行它时会出现错误信息。要改正它,从EJB Bean class中删除transient,并重新校验或构建这个bean,如果成功则重新布署它和运行客户端。

EJB 2.0规范做了如下的声明:

Bean的提供者必须假定transient域的内容可能会在ejbPassivate ejbActivate通知调用期间丢失。因此Bean的提供者不应该在transient 域中存储下列对象的引用:SessionContext对象、JNDI命名上下文或它任何的子上下文、Home interfaceremote interface以及UserTransaction

把Bean的RI属性转移到EJB模块级

对于那些部署在RI中CMP实体bean来说,你必须将其RI相关的bean一级的属性转化为EJB模块级。

企业bean的属性页变化很小。当一个企业bean调用另一个企业bean,引用在调用端创建。 要使这种应用能运行,需要做两个变化。如果不做这些变化,可能会出现不能保存部署的错误信息。它可能由于 CMP 实体 bean属性页中错误的数据库相关信息所致。下面几步可以修正这种错误:

1. 在explorer窗口,右击Bean的EJB module 节点,选择Properties。

2.转到Properties窗口的J2EE RI tabbed interface。

三个属性(他们出现在前一个版本中 J2EE RI 属性页中)出现在这里。它们代表了实体 bean中使用的数据库连接。

3. 声明每一个数据库连接的属性

如果使用PointBase数据库,请输入下列值:

  • 在数据源JNDI Name: 输入jdbc/Pointbase (这个 JNDI 名在应用服务器中存在。 Pointbase 第一个字母要大写)
  • 在数据源Password: 输入pbpublic (新的密码确省值。输入密码后按Enter Return键确认)
  • 在数据源User Name: 输入pbpublic (新的用户名确省值)

测试bean之前改变CMP 实体 Bean的属性

在以前版本的IDE中,如果CMP 企业 bean含有数据库连接的正确信息,那么为这个bean产生的测试程序不用任何改变就可以部署到RI里面。

当前版本中,你不用为会话 bean bean-managed persistent (BMP) 实体 bean产生的EJB测试应用做任何改变。

然而,对那些你向部署到RI里面对PointBase进行测试的CMP 实体 bean来讲,需要做一些改变。如上面提到的那样,数据源JNDI的名字、用户ID和密码必须从企业 bean级转到EJB模块级,PointBase缺省的用户ID和密码已经改变,EJB引用的J2EE RI tabbed interfaceJNDI名字只有一个属性。CMP bean的属性页不会自动更新。

要改变这些属性,按下列步骤来做:

1. 在Explorer窗口, 右击产生测试特性的EJB module节点,选择 Properties

2. 在属性页面, 单击J2EE RI tab页

3. 在J2EE RI tabbed interface中, 请参照把Bean的RI属性转移到EJB模块级更新三个数据源域。

如果你在设置这些属性之前,想要部署你的应用,你会得到错误信息,另外在结果输出窗口的Deploying Application tab页中有详细的错误信息。

创建EJB组件

816-7864-10

Table of Contents Table of Contents

 

常见问答
下载中心
产品简介
 
 
Solaris论坛
 
   
 
null