转自bea.com

将 FML 用于 WebLogic Tuxedo Connector

以下部分讨论字段控制语言(Field Manipulation Language,简称 FML)并描述 WebLogic Tuxedo Connector 如何使用 FML。


FML 概述

注意: 有关使用 FML 的详细信息,请参阅 Programming a BEA Tuxedo Application Using FML。

FML 是一组 Java 语言函数,用来定义和操作称为字段缓冲区的存储结构。每个字段缓冲区都在字段中包含特性-值对。对于每个字段:

  • 特性是字段的标识符。
  • 关联的值表示字段的数据内容。
  • 出现次数。

有两种类型的 FML:

  • 基于字段长度和标识符为 16 位值的 FML16。它所受的限制为:8191 个唯一字段、单个字段长度 64K 字节、总字段缓冲区大小 64K 字节。
  • 基于字段长度和标识符为 32 位值的 FML32。它允许大约 3 千万个字段,大约 20 亿字节的字段和缓冲区长度。

WebLogic Tuxedo Connector FML API

注意: WebLogic Tuxedo Connector 实现部分 FML 功能。有关 FML32 的详细信息,请参阅 FML32 注意事项。

FML 应用程序编程接口(Application Program Interface,简称 API)记录在 Javadocs for WebLogic Server Classes 中的 weblogic.wtc.jatmi 包中。


FML 字段表管理

字段表的生成方式类似于 Tuxedo 字段表。字段表是提供字段名定义、字段类型以及共用于两个系统中的标识号的文本文件。要使用 FML 与 Tuxedo 系统进行互操作,需要执行下列步骤:

  1. 将字段表从 Tuxedo 系统复制到 WebLogic Tuxedo Connector 环境。
  2. 例如:您的 Tuxedo 分发包含一个名为 bankapp 的银行应用程序示例。它包含一个名为 bankflds 的文件,该文件具有以下结构:

    #Copyright (c) 1990 Unix System Laboratories, Inc.#All rights reserved#ident  "@(#) apps/bankapp/bankflds     $Revision: 1.3 ___FCKpd___0quot;# Fields for database bankdb

    # name                         number  type    flags   commentsACCOUNT_ID                     110     long    -       -       ACCT_TYPE                      112     char    -       -       ADDRESS                        109     string  -       -       .

    .

    .

  3. 将字段表定义转换为 Java 源文件。使用 weblogic.wtc.jatmi包中提供的 mkfldclass 实用工具。此类是读取 FML32 字段表的实用工具函数,可以生成实现 FldTbl 接口的 Java 文件。此实用工具有两个实例:
    • mkfldclass
    • mkfldclass32
    • 使用正确的命令实例将 bankflds 字段表转换为 FML32 Java 源代码。以下示例使用 mkfldclass。

      java weblogic.wtc.jatmi.mkfldclass bankflds

      生成的文件的名称为 bankflds.java,该文件具有以下结构:

      import java.io.*;import java.lang.*;import java.util.*;import weblogic.wtc.jatmi.*;public final class bankflds        implements weblogic.wtc.jatmi.FldTbl{        /** number: 110  type: long */        public final static int ACCOUNT_ID = 33554542;        /** number: 112  type: char */        public final static int ACCT_TYPE = 67108976;        /** number: 109  type: string */        public final static int ADDRESS = 167772269;        /** number: 117  type: float */

      .

      .

      .

  4. 使用以下命令编译生成的 bankflds.java 文件:
  5. javac bankflds.java

    结果将生成 bankflds.class 文件。进行加载后,WebLogic Tuxedo Connector 便可以使用该类文件在 FML32 字段中添加、检索和删除字段条目。

  6. 将字段表类文件添加到应用程序 CLASSPATH。
  7. 更新 WTCServer MBean。
    • 更新 WTCResources MBean 以反映字段表类文件的完全限定位置。
    • 使用所需的关键字描述 FML 缓冲区类型:fml16 或 fml32。
    • 可以在以逗号分隔的列表中输入多个字段表类。
    • 例如:

      <wtc-resources>     <name>BankappResources</name>     <fld-tbl16-class>my.bankflds</fld-tbl16-class>     <fld-tbl16-class>your.bankflds</fld-tbl16-class>     <fld-tbl16-class>more.bankflds</fld-tbl16-class></wtc-resources>

  8. 重新启动 WebLogic Server 以加载字段表类定义。

使用 mkfldclass32 类的 DynRdHdr 属性

WebLogic Tuxedo Connector 提供一个属性,该属性提供另一种编译 FML 表的方法。如果符合下列情况,则可能需要使用 DynRdHdr 实用工具:

  • 您使用很大的 FML 表,并且由 mkfldclass32 类创建的 .java 方法在单一类或接口的整体复杂性上超出了内部 Java 虚拟机的限制。
  • 您使用很大的 FML 表,并且在编译 .java 方法时无法加载创建的类。

使用下列步骤可在编译 FML 表时使用 DynRdHdr 属性:

  1. 将字段表定义转换为 Java 源文件。
  2. java -DDynRdHdr=Path_to_Your_FML_Table weblogic.wtc.jatmi.mkfldclass32 userTable

    此命令的参数定义如下:

    特性
    描述
    -DDynRdHdr
    用来编译 FML 表的 WebLogic Tuxedo Connector 属性。
    Path_to_Your_FML_Table
    FML 表的路径名。可以是完全限定路径,也可以是能使用服务器的 CLASSPATH 将其作为资源文件找到的相对路径。
    weblogic.wtc.jatmi.mkfldclass32
    此类是读取 FML32 字段表的实用工具函数,可生成实现 FldTbl 接口的 Java 文件。
    userTable
    由 mkfldclass32 类创建的 .java 方法的名称。
  3. 使用以下命令编译 userTable 文件:
  4. javac userTable.java 

  5. userTable.class 文件添加到应用程序 CLASSPATH。
  6. 更新 WTCResources MBean 以反映 userTable.class 文件的完全限定位置。
  7. 定位 WTCServer。WTCServer 服务启动时将加载 userTable.class

创建 userTable.class 文件后,可以修改 FML 表并部署更改,而不必手工创建更新的 userTable.class。启动 WTC 服务时,WebLogic Tuxedo Connector 将使用 WTC 服务配置的“资源”选项卡中指定的位置加载更新的 FML 表。如果 Path_to_Your_FML_Table 特性更改,则需要使用前一过程来更新 userTable.javauserTable.class 文件。


使用 TypedFML32 构造方法

有两个新的 TypedFML32 构造方法可用来提高性能。以下主题提供有关何时使用这些构造方法的说明。

构造方法是在 Javadocs for WebLogic Server Classes 中定义的。

获得 TypedFML32 性能提高

要获得 TypedFML32 性能提高,可以选择对 TypedFML32 构造方法提供大小提示。有两个参数可用于这些构造方法:

  • 提示最大字段数的参数。这包括所有出现次数。
  • 提示缓冲区中所使用的字段 ID 总数的参数。

例如,缓冲区使用的一个字段表包含 20 个字段 ID,每个字段可出现 20 次。在此例中,第一个参数应为 400,用于表示最大字段数。第二个参数应为 20,用于表示字段 ID 总数。

TypeFML32 mybuffer = new TypeFML32(400, 20); 
注意: 对于任何大小的缓冲区,这通常都能正常工作;但是,对于极小的缓冲区,这无法正常工作。

如果您有极小的缓冲区,请不带提示使用这些构造方法。总出现次数少于 16 的缓冲区是极小缓冲区的一个示例。如果缓冲区极大,例如包含的总字段出现次数多于 250000,则应用程序应考虑将其拆分为几个总字段出现数小于 250000 的缓冲区。


tBridge XML/FML32 转换

注意: 指定的数据类型必须是 FLAT 或 NO。如果指定任何其他数据类型,则重定向将失败。

WTCtBridgeRedirect MBean 的 TranslateFML 元素用于表明是否对消息负载执行 FML32 转换。有两种 FML32 转换类型:FLAT 和 NO。

FLAT

消息负载是使用 WebLogic Tuxedo Connector 内部 FML32/XML 转换器来转换的。字段是经过转换的一个接一个的字段值,没有消息结构(层次)和重复分组的信息。

为了将 FML32 缓冲区转换为 XML,tBridge 在 FML32 缓冲区中取得每个字段的每个实例,将其转换为字符串,再将其放在包含字段名的标记中。所有这些字段都放在包含服务名的标记中。例如,一个包含下列字段的 FML32 缓冲区:

NAME          JOEADDRESS       CENTRAL CITYPRODUCTNAME   BOLTPRICE         1.95PRODUCTNAME   SCREWPRICE         2.50

生成的 XML 缓冲区将为:

<FML32>  <NAME>JOE</NAME>  <ADDRESS>CENTRAL CITY</ADDRESS>  <PRODUCTNAME>BOLT</PRODUCTNAME>  <PRODUCTNAME>SCREW</PRODUCTNAME>  <PRICE>1.95</PRICE>  <PRICE>2.50</PRICE></FML32>

NO

不使用任何转换。

对于从 JMS 到 Tuxedo,tBridge 将 JMS TextMessage 映射到 Tuxedo TypedBuffer (TypedString) 中,反之亦然,具体情况取决于重定向的方向。JMS BytesMessage 被映射到 Tuxedo TypedBuffer (TypedCarray) 中,反之亦然。

对于从 Tuxedo 到 JMS,传递 FML/FML32 缓冲区的表现就好像将 translateFML 设置为了 FLAT的表现。因此,在这种情况下,将 translateFML 设置为 NO 没有任何效果,并且如果 Tuxedo 缓冲区的类型为 FML/FML32,则转换会自动发生。

FML32 注意事项

请记住,使用 FML32 时要考虑以下信息:

  • 对于 XML 输入,根元素是必需的,但它会被忽略。
  • 对于 XML 输出,根元素始终是 <FML32>。
  • 必须按照 FML 字段表管理中的描述加载字段表名。
  • tBridge 转换器只能进行“平面”分组或线性分组。这表示不会维护描述 FML32 顺序的信息,因此包含一系列重复数据的缓冲区可能会以意外的方式表示。例如,考虑一个包含零件及其关联价格的列表的 FML32 缓冲区。预期将是 PART A、PRICE A、PART B、PRICE B 等。但是由于 tBridge 中不包含结构组信息,因此生成的 XML 可能是 PART A、PART B 等、PRICE A、PRICE B 等。
  • 将 XML 转换为 FML32 时,转换器将忽略 STRING 值。例如,在生成的 FML32 缓冲区中将跳过 <STRING></STRING>。所有其他类型都将导致 WTC 记录一个错误,并导致转换失败。
  • 此版本不支持嵌入式 FML。
  • 该版本支持 FML32 缓冲区中的嵌入式 VIEW 字段。
  • FML/FML32 到 XML 的转换支持 TypedCArray。从以下支持的字段类型列表中进行选择:
    • SHORT
    • LONG
    • CHAR
    • FLOAT
    • DOUBLE
    • STRING
    • CARRAY
    • INT (FML32)
    • DECIMAL (FML32)
  • 如果需要传递二进制数据,请将其编码为选择的字段类型并在接收端对 XML 进行解码。

使用 XmlFmlCnv 类进行 XML 到和从 FML/FML32 的转换

使用 tBridge 将 XML 缓冲区自动转换为 FML/FML32 和从 FML/FML32 自动转换为 XML 缓冲区的另一种选择是使用 XmlFmlCnv 类,该类支持排序、分组和美化功能。以下代码清单是将 XmlFmlCnv 类用于从 XML 缓冲区格式进行转换和进行到 XML 格式的转换的示例。

import weblogic.wtc.jatmi.TypedFML32;import weblogic.wtc.jatmi.FldTbl;import weblogic.wtc.gwt.XmlFmlCnv;

public class xml2fml{public static void main(String[] args) {    String xmlDoc = "<XML><MyString>hello</MyString></XML>";   TypedFML32 fmlBuffer = new TypedFML32(new MyFieldTable());   XmlFmlCnv c = new XmlFmlCnv();   fmlBuffer = c.XMLtoFML32(xmlDoc, fmlBuffer.getFieldTables());    String result = c.FML32toXML(fmlBuffer); System.out.println(result);}}

请参阅 Class XmlFmlCnv。

XmlFmlCnv 类的限制

在该版本中,XmlFmlCnv.FML32toXML 方法不支持 FML32 中的 FLD_MBSTRING 字段。


MBSTRING 用法

TypedMBString 对象的用法几乎可以与 WTC 应用程序代码中的 TypedString 对象完全相同。唯一的差异是 TypedMBString 具有与字符串数据关联的代码集编码名称。

本部分包括下列主题。

  • 将 MBSTRING 数据发送到 Tuxedo 域
  • 接收来自 Tuxedo 域的 MBSTRING 数据
  • 将 FML 用于 WebLogic Tuxedo Connector

将 MBSTRING 数据发送到 Tuxedo 域

将包含 MBSTRING 数据的 Tuxedo 消息发送到其他 Tuxedo 域时,TypedMBString 使用 java.lang.String 类的转换函数在 Unicode 和外部编码之间进行转换。TypedMBString 将一个代码集编码名称与字符串数据关联。

如果 TypedMBString 对象由 WTC 应用程序代码创建,则编码名称会设置为 null。编码名称的 null 值表示在向远程域发送 MBSTRING 数据时,将对 Unicode 字符串到字节数组的转换使用默认编码名称。默认情况下,会为默认编码名称使用 Java 的针对字节数组字符串的默认编码名称。可以指定编码或接受默认编码。以下顺序定义 TypedMBString 的优先顺序。

  1. 通过 setMBEncoding() 方法指定编码名称。
  2. 通过 weblogic.wtc.jatmi.MBEncoding类的 setDefaultMBEncoding() 方法指定编码名称。
  3. 通过 WTCResourcesMBeanRemoteMBEncoding 特性指定编码名称。
  4. MBENCODINGPROPERTY 系统属性值。
  5. 接受 Java 默认编码名称。

接收来自 Tuxedo 域的 MBSTRING 数据

收到来自远程域的包含 MBSTRING 数据的 Tuxedo 消息时,将执行下列操作。

  1. WTC 通过收到的消息中的代码集 tcm 确定 MBSTRING 数据的编码。
  2. WTC 创建 TypedMBString 对象。
  3. TypedMBString 对象的用法几乎可以与 WTC 应用程序代码中的 TypedString 对象完全相同。但是,TypedMBString 具有与字符串数据关联的代码集编码名称。

  4. WTC 将 TypedMBString 对象传递到 WTC 应用程序代码。应用程序代码通过实例方法 getMBEncoding() 了解收到的 MBSTRING 数据的编码。

将 FML 用于 WebLogic Tuxedo Connector

FLD_MBSTRING 是添加到 TypedFML32 中的字段类型。在本例中,TypedMBString 对象是作为 FLD_MBSTRING 的关联对象类型传递到 TypedFML32 方法的。可以指定用于 FLD_MBSTRING 字段的 MBSTRING 转换的编码名称。

以下顺序定义 TypedFML32 的优先顺序。

  1. 通过字段的 TypedMBString 对象的 setMBEncoding() 方法指定编码名称。
  2. 通过 TypedFML32 对象的 setMBEncoding() 方法指定编码名称。
  3. 通过 weblogic.wtc.jatmi.MBEncoding类的 setDefaultMBEncoding() 方法指定编码名称。
  4. 通过 WTCResourcesMBeanRemoteMBEncoding 特性指定编码名称。
  5. MBENCODINGPROPERTY 系统属性值。
  6. 接受 Java 默认编码名称。
注意: 使用 FLD_MBSTRING 时,必须更新下列方法:Fldtype()Fchg()Fadd()Fget()Fdel()
注意: Tuxedo 中需要的按需编码方法和自动转换方法(如 Fmbpack32()Fmbunpack32())并不被 WebLogic Tuxedo Connector 需要。

将 FML 用于 WebLogic Tuxedo Connector相关推荐

  1. 将 FML 用于 WebLogic Tuxedo Connector 转自bea.com

    将 FML 用于 WebLogic Tuxedo Connector 以下部分讨论字段控制语言(Field Manipulation Language,简称 FML)并描述 WebLogic Tuxe ...

  2. 配置WebLogic Tuxedo Connector (转)

    WebLogic Tuxedo Connector (WTC) 是一个兼容 JCA ( J2EE 连接器架构)的软件组件,它提供 Tuxedo 服务和 WebLogic Server 部署的企业应用程 ...

  3. 【weblogic】WTC配置(Weblogic Tuxedo Connector)

    记录下工作中涉及到的WTC使用 WTC 是BEA 的WEB支持产品Weblogic和中间件产品Tuxedo之间的连接工具,全称Weblogic Tuxedo Connector.WTC使Weblogi ...

  4. wtc java 代码 tpcall(servicename_通过wtc使tuxedo及weblogic通信开发.doc

    标题:通过wtc.jolt进行tuxedo与weblogic通信开发 [评论] 作者:李振嘉(dev2dev ID:lizhenjia) ?(一)摘要 (二)通过wtc进行tuxedo与weblogi ...

  5. weblogic 与 tuxedo 互联 wtc

    BEA公司的TUXEDO,WEBLOGIC作为优秀的中间件产品,在银行.电信.金融等行业广泛使用,通常采用TUXEDO实现系统的核心业务,用WEBLOGIC做为系统扩展到INTERNET的平台,实现电 ...

  6. Tuxedo学习门户网站

    中间件简介: 介于客户机和server之间的夹层,突破了传统的c/s架构,为构建大规模,高性能.分布式c/s应用程序提供了通信.事物,安全.容错等基础服务,屏蔽了底层应用细节,应用程序不必从底层开发, ...

  7. 【译】使用Java编写Oracle Tuxedo应用

    Oracle Tuxedo Java编程介绍 简介 Oracle Tuxedo服务可以使用纯java来编写.使用java实现的服务的功能和其他Tuxedo服务实现是一样的.你可以使用客户端或者Tuxe ...

  8. tuxedo java_【译】使用Java编写Oracle Tuxedo应用

    Oracle Tuxedo Java编程介绍 简介 Oracle Tuxedo服务可以使用纯java来编写.使用java实现的服务的功能和其他Tuxedo服务实现是一样的.你可以使用客户端或者Tuxe ...

  9. 第1讲--tuxedo总体介绍

    Tuxedo总体介绍 1.1 中间件介绍 介于客户机与服务器之间的夹层,它突破了二层C/S结构的局限性,为构建大规模.高性能.分布式C/S应用程序提供了通信.事务.安全.容错等基础服务,它屏蔽了底层技 ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装google-earth免费版
  2. POJ3270 Cow Sorting ——置换群
  3. Notepad++中高亮显示ABAP代码方法
  4. AndroidManifest.xml文件解析(转帖)
  5. centos 源码安装 mysql
  6. Java 调用http接口
  7. CCF NOI1064 计算斐波那契第n项
  8. 3.4 主存储器与CPU的连接———存储器容量的扩充
  9. 串口转以太网使用方法
  10. xmlspy2014下载安装(可用)
  11. 互联网日报 | 微信聊天上线“超链接”功能;B站月付费用户达1500万;优客工场正式登陆纳斯达克...
  12. matlab黄金分割实例,实战案例教你黄金分割
  13. 操作系统课程设计 Pintos 1 ALarm Clock 问题
  14. 摩拜+小程序,让单车变得“触手可骑”
  15. leetcode-841-钥匙和房间 题解
  16. 【绘画素材】Q版线稿参考,欢迎临摹嗷
  17. 互联网思维(三)——产业思维
  18. linux cgroup学习总结
  19. 阿里总部对外解密双11超级工程背后的数据库技术
  20. 关于win 10 下Prolific USB-to-Serial Comm Port驱动无法使用问题的解决办法。

热门文章

  1. js整形int和byte数组互相转换
  2. 无剧透 | 分析《复联》英雄得出的结论:什么样的技术人适合做管理?
  3. 论人类下一代语言的可能—3.2.3符号的组合
  4. 魅族MX简单实用小技巧+使用启示+新人必看
  5. 被裁了无赔偿!网友:这情况...咱还是留个心眼吧!
  6. 常见对象_BigDecimal的加减乘除法的使用
  7. 啰里啰嗦学IOS CoreDate入门
  8. 2021.10.13会议记录
  9. [工具]K8tools 20190608/K8工具合集/K8网盘
  10. 安卓button设置背景图_背景图| 人生很短 不要浪费