IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

专家访谈: Roland Barcia 谈在 Rational Application Developer V6 上部署 J2EE 和 Web 服务应用程序

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

Roland Barcia (barcia@us.ibm.com), WebSphere 咨询专家, IBM Software Services for WebSphere

2005 年 8 月 03 日

在这篇一问一答的文章里,我们邀请了 WebSphere 咨询专家 Roland Barcia 来回答有关在 IBM Rational Application Developer V6 上开发 J2EE 和 Web 服务应用程序的问题。

引言

在本文中,WebSphere® 咨询专家 Roland Barcia 将回答关于在 IBM® Rational® Application Developer V6 上开发 J2EE 和 Web 服务应用程序以及在 WebSphere Application Server V6 上部署和测试这些应用程序的问题。其中涉及的主题包括使用 Rational Application Developer 中的各种向导、透视图和工具开发不同类型的 J2EE™ 应用程序、使用 WebSphere Application Server V6 中新的 Service Integration Bus Messaging Platform、与 WebSphere Studio V5 或 WebSphere Application Server V5 的区别、使用 Rational Application Developer 中缺省的 WebSphere Application Server V6,以及部署到完全的 WebSphere Application Server V6 Network Deployment。

问:我们只有 WebSphere Server 5.0。为了使用 Rational Application Developer (RAD) V6 中的一些新功能,我将我们的 IDE 从 WebSphere Studio Application Developer 5.1.2(以下称为 Application Developer)升级到了 RAD 6。我将 J2EE 的级别设置为 1.3,并成功处理了一些问题:从 RAD 6 生成的 EAR 文件在 WebSphere Application Server 5(以下称为 Application Server)中工作正常。但 RAD 6 仍然有些问题。例如,在 JSP 片段文件中就出现了一些错误消息。好像 RAD 6 中的 JSP 编译器或验证程序试图将这些片段文件作为独立文件编译。我想知道,使用 RAD 6 开发运行于 V5 服务器上的 J2EE 应用程序是不是合适?因为我们的目标平台是 V5 服务器,是否可以使 RAD 6 中的 JSP 编译器以与 Application Developer 5.1.2 中的相同的方式工作?

答:WebSphere Studio Application Developer V 5.1.2 有同样的问题,但验证可能是缺省关闭的。我经常提到,验证应该缺省关闭,必要时才根据需要执行。这将显著提高您的内部版本的速度。可以在项目级关闭 JSP 验证,方法为右键单击该项目,然后选择属性。


图 1. JSP 验证
JSP 验证

或者,也可以通过选择 Windows -> Preferences 在工作区级关闭此功能。


图 2. 首选项
首选项

有关性能的更多提示,请参阅 Rational Application Developer Performance Tips

问:如果希望将编写器用于 CMP 2.x Bean 中用户类型的自定义映射,如何在 WebSphere 批注中指定?

答:现在,当前版本中没有用于编写器的批注。

问:如何处理自顶向下的 WSDL 到 Java™ 的往返行程?由于现在使用 iRAD,因此在修改 WSDL 时,我不想丢失服务端点骨架(其中一级用户代码使用 Java 编写)中的代码。因为推荐采用自顶向下的 WSDL 到 Java 的方式,所以不想使用 java2WSDL 维护可互操作的 WSDL。

有哪些选项呢?应将修改/增强 WSDL 作为基本服务生命周期要求予以支持。大量的团队都需要有关如何管理服务接口更改的标准/指南。

iRAD 是否可以支持过去的初始 Java 服务类生成?

是否有一些工具可以使用?这些工具应该能够跟踪代码,而且不会丢失生成的代码。

答:到目前为止,尚没有可用于避免更改不会被覆盖的批注或工具。可以使用一些特定的策略:

  • 初始生成之后,使用自底向上的方法。接口的更改通常由实现中所需的更改驱动。
  • 如果要使用自顶向下的方法,请确保生成的骨架只是到另一个类的过渡。这样,所有的小更改都是通过重新生成得到的。可以编写一个 ANT 任务或使用 Design Pattern Toolkit 生成对此类的调用。
  • 如果使用服务集成总线,则可以使用入站服务 (Inbound Service) 将目标公开为 Web 服务,并使用中介 (Mediations) 进行请求。中介代码将不会重新生成,因为它们与服务数据对象 (SDO) 交互。有关详细信息,请参阅 使用 WebSphere Application Server V6 构建企业服务总线 系列文章和 将消息驱动 Bean 和 JMS 应用程序部署到服务集成总线中

问:是否可以将 WebSphere Application Server 更新包应用到 RAD6 内的 WebSphere Application Server 6 测试环境中?我已经将 RAD6 6.0.0.1 Interim Fix 3 应用到了 RAD6,但根据 \Rational\SDP\6.0\runtimes\base_v6\profiles\default\bin\versioninfo 命令,测试环境还是为原始级别 (6.0.0.0)。

答:可以。要升级到更新的版本,需要将 WAS 修补包和更新包分别应用到 WebSphere Application Server 测试环境,如 Technote: Upgrading the WebSphere Test Environment V6 in Rational Application or Web Developer 中所述。

RAD 中的测试环境是一个完全的 WebSphere Application Server Base 版本。安装 WebSphere 更新时,WebSphere Application Server 的根目录将为 C:/<RAD_INSTALL_ROOT>/runtimes/base_v6

问:我现在正在试用 RAD 6 的新功能,尝试使用 EJB Component Test 来测试 EJB。但直到现在,我都没有成功过,而且遇到了许多问题。请问有没有说明如何测试 EJB 的文档?

答:您可以查阅以下参考资料:

问:在最终用户通过基于 JSF/SDO(服务数据对象)的 Web 客户机进行数据访问时,在后端数据库中有没有维护数据/记录锁定的机制?如果没有,是否有相应的机制,以在用户对数据进行处理时告知客户机其访问的数据已经发生更改?

答:有的,可以向给定的表提供一个开放式并发控制 (OCC) 整数列,并指定该列供元数据中的 OCC 使用。已定义的 OCC 冲突列将保留,专供中介使用。有关详细信息,请参阅 JDBC 中介事务

问:

  1. 是否可以将 Crystal Report 与 WebSphere Portal 5.0 一起使用?如果不能,建议使用其他哪种报告软件?
  2. 是否可以在 RAD v6 中使用 MySQL 开发 CMP EJB?
  3. 是否可以将 Crystal Report 与 Cloudscape 一起使用?

答:

  1. 业务对象通过提供各种 Portlet 来提供 IBM WebSphere Portal 解决方案。有关详细信息,请参阅 Business Objectives Enterprise Portlets
  2. 只要有符合 JDBC 的驱动程序,就可以正常工作。不过 IBM 仅支持信息中心中列出的 JDBC 驱动程序。如果您所使用的数据库未列出,可以与 IBM 代表联系。
  3. 您需要检查生成 Crystal Report 的各个业务对象,以了解其正式支持的数据库列表。有关详细信息,请参阅 Crystal Report 功能

问:是否可以使用 Rational Software Architect 6.0 代替 RAD V6,以满足所有需求(从开发 UML 设计到其他基于 J2EE 的解决方案)?

答:Rational Software Architect (RSA) 是 Rational Application Developer 的一个超集。因此,答案是肯定的,可以使用它代替 RAD。RSA 是下一代建模工具。可以导入 Rational XDE 和 Rose 模型,并能进行实现开发的完全设计。

Rational Rose 之类的产品非常成熟,因此并非 Rose 中的所有功能在 RSA 中都可以直接提供。不过,RSA 是以后设计和建模的策略方向。此外,RSA 包含对 UML 2 和转换(其中一些特定于 J2EE)的支持,而其前身并不提供这些支持。

问:为 BOOTCLASSPATH 系统属性指定了 Agent.jar 和 apc.jar。这些 Jar 文件在服务初始化时扮演何种角色?

答:我不太清楚您所指的是哪个产品。这些 Jar 不属于 WebSphere Application Server 或 Rational Application Developer。这有可能是属于用于进行分析工作的 IBM Agent Controller 的旧版本的 Jar。也有可能是与 WebSphere Application Server 交互的第三方产品(如 Site Minder)的相关项。如果不知道其用途,在类路径中添加或删除 Jar 时要十分小心。

问:如何在 WebSphere 6.0 中使用 RAD?FFDC 是什么?FFDC 用于 Windows®。

答:我不太清楚问题的第一部分中您要问什么。RAD 是 Rational Application Developer 的首字母缩写,它是支持 Rational Application Developer V6 开发的主要 IDE。RAD 也是快速开发应用程序 (rapidly developing application) 的首字母缩写。它可以支持多种 WebSphere Application Server 开发方式。可以将 ANT 与构建脚本结合使用,以支持自动开发。您可以使用任何 J2EE IDE。我们还提供 WebSphere Rapid Deploy,这是一款热部署工具和批注处理器。请参阅关于热部署的提问,以了解更多问题。

FFDC 表示首次故障数据捕获 (First Failure Data Capture)。它保留处理故障生成的信息,并将控制返回到受影响的引擎。捕获的数据保存在日志文件中,供问题分析之用。 FFDC 主要供 IBM Service 使用。FFDC 即时收集在 WebSphere Application Server 运行时出现的事件和错误。信息一出现即加以捕获,并将其写入到日志文件中,供 IBM Service 代表进行分析。有关详细信息,请参见信息中心

问:我是 WebSphere 新手,希望了解以下问题:

  1. WebSphere 的文件结构是怎样的?
  2. 如何在 WebSphere 中部署 EJB?
  3. 是否可以直接将 *.ejb 复制到 WebSphere,还是需要为其生成对应的 *.war 文件?

答:我建议您阅读 IBM WebSphere: Deployment and Advanced Configurations 一书,其中对这些问题进行了直接的解答。

  1. WebSphere Application Server 经过精心设计,试图将开发人员和管理员彼此屏蔽。管理控制台和脚本语言使您能够完全覆盖程序的整个范围。各种操作的若干基础文件和目录都会得到更新。此外,如果使用 WebSphere Application Server Network Deployment,将复制多组目录结构。图 3 演示了需要牢记的一些重要元素。

    WebSphere Application Server 目录结构中最有意义的部分就是特定配置文件下的 config 目录。WebSphere Application Server 支持各种与应用程序部署位置相关的配置可见性范围。范围的配置在该范围的目录下的若干个 XML 文件内定义。请通过 WebSphere Application Server 管理工具之一对配置进行更新,而不要手动编辑 XML 文件。只有在某个配置导致严重错误的情况下才可以手动编辑 XML 文件。如果要进行任何更改,必须深入了解 WebSphere Application Server。WebSphere 还有配置备份与恢复功能,可以用于恢复配置。请更多地使用这些功能,而避免进行手动编辑。


    图 3. 目录结构
    目录结构
  2. J2EE 规范要求将 EJB 应用程序包装在 EJB Jar 文件中,并遵循 EJB 目录结构。此外,J2EE 应用程序应打包成 EAR 文件,每个 EAR 文件可以包含多个 EBJ Jar 文件。可以将 EJB 应用程序作为 EAR 文件部署,也可以作为单独的 EJB Jar 文件部署,不过,出于移植性考虑,建议采用 EAR 方式。WebSphere Application Server 支持多种部署应用程序的工具:
    • WebSphere Application Server 管理控制台
    • Wsadmin 脚本语言
    • 专用 ANT 任务
    • Rational Web Developer、Rational Application Developer、Rational Software Architect 或 Application Server Toolkit
    • WebSphere Rapid Deploy(允许直接将未包装的批注过的 Java 类部署到 WAS)
  3. 我不清楚您所指的 *.ejb 的意思。EJB 应用程序由多个 Java 文件和 XML 部署描述符(打包成 EJB Jar 文件)组成,作为模块进行部署。

问:我已经安装了 WebSphere Application Server 6,现在想要更改主机名称(和 IP 地址)以进行部署。该如何进行操作?

答: 可以在好几个地方更改需要更新的主机名称和 IP。我们为您提供了完成此操作的脚本。您可以下载示例脚本。

问:如何在 WebSphere 6.0 进行热部署? 是否有支持 WebSphere 6.0 热部署的 ANT 任务?

答: 是的,我们在 WebSphere Application Server V6 中提供了称为 WebSphere Rapid Deploy (WRD) 的新功能。WebSphere Rapid Deploy 允许您为 J2EE 模块或松散批注的 Java 类的自动部署设置特殊的目录。目前支持两种模式:

  • AuotAppInstall:部署 J2EE 模块
  • Free Form:部署批注过的 Java 文件

AutoAppInstall: 可以使用 WRD 创建一个样式,以实现符合 J2EE 的应用程序或模块的安装、修改以及反安装过程的自动化。不要使用 EAR 文件和 wsadmin 或 Web Admin UI,通过包括多个步骤的向导来安装该应用程序,而应该使用 WRD 创建一个受监视的目录,并直接将 EAR 放入其中。一旦将 EAR 放置于此目录中,WRD 就会检测添加的新文件和项目的内部版本。当然,WRD 除了处理 EAR 文件外,还将使用各个 J2EE 模块(WAR、EJB Jar 和 RAR),并作为其执行的一部分构造 EAR。


图 4. WebSphere 快速部署
WebSphere 快速部署

也可以选择对 EAR 文件进行增强。此增强的 EAR 文件中包含允许 WRD 自动创建资源的信息。下面是使用 AutoAppInstall 的示例:

  • 配置 WRD 工作区
    1. export WORKSPACE= C:\WRDAutoInstall
    2. $WAS_HOME/bin//wrd-config -project DeployProject -style AutoAppInstall -runtime "was60" -runtimePath "D:/WebSphere_60/AppServer" -monitor
  • 启动 WRD 守护程序:$WAS_HOME/bin/wrd -monitor
  • 将 EAR 复制到目录中

Free form: 还可以使用 WRD 减少应用程序构造的复杂性。在本例中,不提供完全构造好的 J2EE 应用程序,而将应用程序的各个部分(如表示 Servlet 或 EJB 的 Java 源文件、静态资源、XML 文件等等)放置的一个目录中。然后配置 WRS 构造一个符合 J2EE 标准的应用程序,并将此应用程序部署到目标服务器上。 Free form 非常适合应用程序的初始原型化或库代码的开发。不过,在使用 Free form 开发企业应用程序时要十分小心。开发人员可能很快失去对其构建和部署过程的控制。下面是使用 Free form 的示例:

  • 配置 WRD 工作区:
    1. export WORKSPACE=D:/WRDWorkSpace
    2. $WAS_HOME/bin//wrd-config -project "MyProject" -style "freeform" -runtime "was60" -runtimePath "D:/WebSphere_60/AppServer" -monitor
  • 启动 WRD 守护程序:$WAS_HOME/bin/wrd -monitor
  • 使用任意编辑器在目录中创建一个 Java Servlet 或 EJB 类。

有关 WRD 的更多信息,请参阅 WebSphere V6 信息中心

以下为代码示例。只开发了这些构件。

				HelloServlet.java
package com.wrdtest;
import java.io.*; 
import javax.naming.InitialContext;
import javax.servlet.http.*; 
import javax.servlet.*;
public class HelloServlet extends HttpServlet { 
  public void doGet (HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException { 
    PrintWriter out = res.getWriter();
    try {
		InitialContext ctx = new InitialContext();
	HelloHome helloHome = (HelloHome)ctx.lookup("ejb/Hello");
	HelloRemote hello = helloHome.create();
    out.println("Hello, world!"); 
    out.println(hello.getMessage());
    out.close(); 
    
    } catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace(out);
		out.close();
	}
  }
MyService.java
package com.wrdtest;
/**
 * @author Admin
 *
 *@ejb.session name="Hello" type="Stateless" 
 *jndi-name="ejb/Hello"
 *              local-jndi-name="ejb/Hello"
 */
public class MyService {
	
	/**
     * 
     * @param symbol
     * @return
     * @throws StockException
     * 
     * @ejb.interface-method view-type="both"
     * @ejb.transaction type="Required"
     * 
     * 
     * 
     */
    public String getMessage()
    {
    	return "Hello EJB";
    }
}

问:我在使用 RAD 和 WebSphere 6.0。我想使用 log4j 部署 EAR 文件,但在部署期间出现了错误。问题出在哪里?log4j.xml 文件位于 EAR 文件中。

[7/25/05 17:39:54:269 CEST] 00000062 ResourceMgrIm I   
WSVR0049I: Binding ENT13000 as jdbc/ENT13000
[7/25/05 17:39:54:284 CEST] 00000062 EJBContainerI I   
WSVR0207I: Preparing to start EJB jar: TDSLRechercheEJB.jar
[7/25/05 17:39:54:312 CEST] 00000062 EJBContainerI I   
WSVR0037I: Starting EJB jar: TDSLRechercheEJB.jar
[7/25/05 17:39:54:904 CEST] 00000062 MDBListenerIm I   
WMSG0058I: Listener Port ListenerPortNI will attempt to 
restart in 60 seconds
[7/25/05 17:39:54:937 CEST] 00000062 ApplicationMg E   
WSVR0101W: An error occurred starting, TDSLRechercheJ2EE
[7/25/05 17:39:54:945 CEST] 00000062 ApplicationMg A   
WSVR0217I: Stopping application: TDSLRechercheJ2EE
[7/25/05 17:39:54:988 CEST] 00000062 EJBContainerI I   
WSVR0041I: Stopping EJB jar: TDSLRechercheEJB.jar
[7/25/05 17:39:55:034 CEST] 00000062 ApplicationMg A   
WSVR0220I: Application stopped: TDSLRechercheJ2EE
[7/25/05 17:39:54:770 CEST] 00000062 SystemErr     
R log4j:ERROR Could not open [./log4j.xml].
[7/25/05 17:39:54:773 CEST] 00000062 SystemErr     
R java.io.FileNotFoundException: ./log4j.xml (No such 
file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at org.apache.log4j.xml.DOMConfigurator.doConfigure
(DOMConfigurator.java:583)
at org.apache.log4j.xml.DOMConfigurator.configure
(DOMConfigurator.java:687)
at com.tsystems.blt.j2ee.log.TDSLRechercheLogger.<clinit>
(TDSLRechercheLogger.java:17)
at com.tsystems.blt.j2ee.jms.MP_MessageListenerBean.<clinit>
(MP_MessageListenerBean.java:34)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0
(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance
(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance
(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance
(Constructor.java:274)
at java.lang.Class.newInstance0(Class.java:308)
at java.lang.Class.newInstance(Class.java:261)
at com.ibm.ejs.container.EJSContainer.loadBeanMetaData
(EJSContainer.java:1596)
at com.ibm.ejs.container.HomeOfHomes.loadBeanMetaData
(HomeOfHomes.java:659)

答:我假设您在 EAR 级包装 log4j.jar。似乎您在尝试直接从文件系统加载您的日志配置。我通常告诉大家将 log4j 配置文件作为类路径资源加载。这样,就可以将其放置在 WebSphere Application Server 共享库中,或将其包装在 EAR 中。您可以使用类似于下面的方法:

ClassLoader.getSystemResourceAsStream()

或者,也可以加载包含配置文件位置的系统属性。

致谢

作者感谢在准备本文时以下人员所给予的帮助:Kyle Brown、Keys Botzum、Leigh Williamson、Tom Alcott 和 Greg Flurry。

关于专家访谈

专家访谈是 WebSphere 专区的一个很有特色的每月专栏。我们可以让您接触到有关 IBM WebSphere 的最好思想以及随时准备回答您问题的产品专家。您来提出问题,我们将公布对最受欢迎的问题的解答。



参考资料



关于作者

照片:Roland Barcia

Roland Barcia 是位于纽约/新泽西地区的 IBM Software Services for WebSphere 的一位 I/T 咨询专家。Roland 主要负责将应用程序从开发环境迁移到各种测试环境中。他是 developerWorks WebSphere 网站上最受欢迎的系列文章之一 IBM WebSphere 开发者技术期刊: 运用 WebSphere Studio V5.1.1 开发 JSF 应用程序 的作者。他还是 IBM WebSphere: Deployment and Advanced Configuration 一书的合著者。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款