将 FML 用于 WebLogic Tuxedo Connector
转自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 系统进行互操作,需要执行下列步骤:
- 将字段表从 Tuxedo 系统复制到 WebLogic Tuxedo Connector 环境。
例如:您的 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 - - .
.
.
- 将字段表定义转换为 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 */
.
.
.
- 使用以下命令编译生成的
bankflds.java
文件: javac bankflds.java
结果将生成
bankflds.class
文件。进行加载后,WebLogic Tuxedo Connector 便可以使用该类文件在 FML32 字段中添加、检索和删除字段条目。- 将字段表类文件添加到应用程序 CLASSPATH。
- 更新
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>
- 更新
- 重新启动 WebLogic Server 以加载字段表类定义。
使用 mkfldclass32 类的 DynRdHdr 属性
WebLogic Tuxedo Connector 提供一个属性,该属性提供另一种编译 FML 表的方法。如果符合下列情况,则可能需要使用 DynRdHdr
实用工具:
- 您使用很大的 FML 表,并且由 mkfldclass32 类创建的
.java
方法在单一类或接口的整体复杂性上超出了内部 Java 虚拟机的限制。 - 您使用很大的 FML 表,并且在编译
.java
方法时无法加载创建的类。
使用下列步骤可在编译 FML 表时使用 DynRdHdr
属性:
- 将字段表定义转换为 Java 源文件。
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
方法的名称。- 使用以下命令编译
userTable
文件: javac
userTable
.java
- 将
userTable
.class
文件添加到应用程序 CLASSPATH。 - 更新
WTCResources
MBean 以反映userTable
.class
文件的完全限定位置。 - 定位 WTCServer。WTCServer 服务启动时将加载
userTable
.class
。
创建 userTable
.class
文件后,可以修改 FML 表并部署更改,而不必手工创建更新的 userTable
.class
。启动 WTC 服务时,WebLogic Tuxedo Connector 将使用 WTC 服务配置的“资源”选项卡中指定的位置加载更新的 FML 表。如果 Path_to_Your_FML_Table 特性更改,则需要使用前一过程来更新 userTable
.java
和 userTable
.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
的优先顺序。
- 通过
setMBEncoding()
方法指定编码名称。 - 通过
weblogic.wtc.jatmi.MBEncoding
类的setDefaultMBEncoding()
方法指定编码名称。 - 通过
WTCResourcesMBean
的RemoteMBEncoding
特性指定编码名称。 MBENCODINGPROPERTY
系统属性值。- 接受 Java 默认编码名称。
接收来自 Tuxedo 域的 MBSTRING 数据
收到来自远程域的包含 MBSTRING 数据的 Tuxedo 消息时,将执行下列操作。
- WTC 通过收到的消息中的代码集
tcm
确定 MBSTRING 数据的编码。 - WTC 创建
TypedMBString
对象。 TypedMBString
对象的用法几乎可以与 WTC 应用程序代码中的TypedString
对象完全相同。但是,TypedMBString 具有与字符串数据关联的代码集编码名称。- WTC 将
TypedMBString
对象传递到 WTC 应用程序代码。应用程序代码通过实例方法getMBEncoding()
了解收到的 MBSTRING 数据的编码。
将 FML 用于 WebLogic Tuxedo Connector
FLD_MBSTRING 是添加到 TypedFML32
中的字段类型。在本例中,TypedMBString
对象是作为 FLD_MBSTRING 的关联对象类型传递到 TypedFML32
方法的。可以指定用于 FLD_MBSTRING 字段的 MBSTRING 转换的编码名称。
以下顺序定义 TypedFML32 的优先顺序。
- 通过字段的 TypedMBString 对象的
setMBEncoding()
方法指定编码名称。 - 通过 TypedFML32 对象的
setMBEncoding()
方法指定编码名称。 - 通过
weblogic.wtc.jatmi.MBEncoding
类的setDefaultMBEncoding()
方法指定编码名称。 - 通过
WTCResourcesMBean
的RemoteMBEncoding
特性指定编码名称。 MBENCODINGPROPERTY
系统属性值。- 接受 Java 默认编码名称。
注意: |
使用 FLD_MBSTRING 时,必须更新下列方法:Fldtype() 、Fchg() 、Fadd() 、Fget() 和 Fdel() 。
|
注意: |
Tuxedo 中需要的按需编码方法和自动转换方法(如 Fmbpack32() 和 Fmbunpack32() )并不被 WebLogic Tuxedo Connector 需要。
|
将 FML 用于 WebLogic Tuxedo Connector相关推荐
- 将 FML 用于 WebLogic Tuxedo Connector 转自bea.com
将 FML 用于 WebLogic Tuxedo Connector 以下部分讨论字段控制语言(Field Manipulation Language,简称 FML)并描述 WebLogic Tuxe ...
- 配置WebLogic Tuxedo Connector (转)
WebLogic Tuxedo Connector (WTC) 是一个兼容 JCA ( J2EE 连接器架构)的软件组件,它提供 Tuxedo 服务和 WebLogic Server 部署的企业应用程 ...
- 【weblogic】WTC配置(Weblogic Tuxedo Connector)
记录下工作中涉及到的WTC使用 WTC 是BEA 的WEB支持产品Weblogic和中间件产品Tuxedo之间的连接工具,全称Weblogic Tuxedo Connector.WTC使Weblogi ...
- wtc java 代码 tpcall(servicename_通过wtc使tuxedo及weblogic通信开发.doc
标题:通过wtc.jolt进行tuxedo与weblogic通信开发 [评论] 作者:李振嘉(dev2dev ID:lizhenjia) ?(一)摘要 (二)通过wtc进行tuxedo与weblogi ...
- weblogic 与 tuxedo 互联 wtc
BEA公司的TUXEDO,WEBLOGIC作为优秀的中间件产品,在银行.电信.金融等行业广泛使用,通常采用TUXEDO实现系统的核心业务,用WEBLOGIC做为系统扩展到INTERNET的平台,实现电 ...
- Tuxedo学习门户网站
中间件简介: 介于客户机和server之间的夹层,突破了传统的c/s架构,为构建大规模,高性能.分布式c/s应用程序提供了通信.事物,安全.容错等基础服务,屏蔽了底层应用细节,应用程序不必从底层开发, ...
- 【译】使用Java编写Oracle Tuxedo应用
Oracle Tuxedo Java编程介绍 简介 Oracle Tuxedo服务可以使用纯java来编写.使用java实现的服务的功能和其他Tuxedo服务实现是一样的.你可以使用客户端或者Tuxe ...
- tuxedo java_【译】使用Java编写Oracle Tuxedo应用
Oracle Tuxedo Java编程介绍 简介 Oracle Tuxedo服务可以使用纯java来编写.使用java实现的服务的功能和其他Tuxedo服务实现是一样的.你可以使用客户端或者Tuxe ...
- 第1讲--tuxedo总体介绍
Tuxedo总体介绍 1.1 中间件介绍 介于客户机与服务器之间的夹层,它突破了二层C/S结构的局限性,为构建大规模.高性能.分布式C/S应用程序提供了通信.事务.安全.容错等基础服务,它屏蔽了底层技 ...
最新文章
- 在Ubuntu 14.04 64bit上安装google-earth免费版
- POJ3270 Cow Sorting ——置换群
- Notepad++中高亮显示ABAP代码方法
- AndroidManifest.xml文件解析(转帖)
- centos 源码安装 mysql
- Java 调用http接口
- CCF NOI1064 计算斐波那契第n项
- 3.4 主存储器与CPU的连接———存储器容量的扩充
- 串口转以太网使用方法
- xmlspy2014下载安装(可用)
- 互联网日报 | 微信聊天上线“超链接”功能;B站月付费用户达1500万;优客工场正式登陆纳斯达克...
- matlab黄金分割实例,实战案例教你黄金分割
- 操作系统课程设计 Pintos 1 ALarm Clock 问题
- 摩拜+小程序,让单车变得“触手可骑”
- leetcode-841-钥匙和房间 题解
- 【绘画素材】Q版线稿参考,欢迎临摹嗷
- 互联网思维(三)——产业思维
- linux cgroup学习总结
- 阿里总部对外解密双11超级工程背后的数据库技术
- 关于win 10 下Prolific USB-to-Serial Comm Port驱动无法使用问题的解决办法。
热门文章
- js整形int和byte数组互相转换
- 无剧透 | 分析《复联》英雄得出的结论:什么样的技术人适合做管理?
- 论人类下一代语言的可能—3.2.3符号的组合
- 魅族MX简单实用小技巧+使用启示+新人必看
- 被裁了无赔偿!网友:这情况...咱还是留个心眼吧!
- 常见对象_BigDecimal的加减乘除法的使用
- 啰里啰嗦学IOS CoreDate入门
- 2021.10.13会议记录
- [工具]K8tools 20190608/K8工具合集/K8网盘
- 安卓button设置背景图_背景图| 人生很短 不要浪费