将 FML 用于 WebLogic Tuxedo Connector

转载 2007年09月18日 10:25:00

转自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   comments
    ACCOUNT_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          JOE
ADDRESS CENTRAL CITY
PRODUCTNAME BOLT
PRICE 1.95
PRODUCTNAME SCREW
PRICE 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 域

将包含 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 需要。
 

相关文章推荐

WebLogic Tuxedo Connector 快速入门指南

WebLogic Tuxedo Connector 快速入门指南 注意: 有关如何针对本版本 WebLogic Server 配置 WebLogic Tuxedo Connec...

tuxedo fml用法

  • 2007-10-09 23:34
  • 1.52MB
  • 下载

C++ Tuxedo FML类封装

/*  * FML_Adapter.hpp  * 2011-11-30  * xuwannian@gmail.com  *  * TUXEDO FML32 操作方法封装  */ #ifn...

tuxedo6.5和weblogic7.0通过wtc互联

TUXEDO6.5与WEBLOGIC7.0通过WTC进行互连的配置WEBLOGIC与TUXEDO的互连有两种方式,通过JOLT或通过WTC(WEBLOGIC TUXEDO CONNECTOR)。它...

weblogic+tuxedo环境搭建简解

基于后台tuxedo服务架构的Web服务器环境搭建主要包括二大内容,一是web服务器配置(weblogic),二是后台tuxedo环境配置。 下面主要讲解一下在后台tuxedo环境已经搭建的前提下如何...

Tuxedo与Weblogic互连指南(3)--测试

Weblogic调用Tuxedo 编写测试程序,使用web项目,引入必要jar,编写index.jsp调用Tuxedo服务,部署到Weblogic中
  • f4761
  • f4761
  • 2014-11-16 16:53
  • 1317

weblogic 与 tuxedo 互联 wtc

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

bea tuxedo+ weblogic编程简介

  • 2007-06-15 13:10
  • 136KB
  • 下载

Tuxedo与Weblogic互连指南(2)--Weblogic部分

Weblogic部分 目标        通过配置Weblogic中的WTC服务实现调用Tuxedo的TOUPPER,以及使用客户端调用Tuxedo中配置的TOLOWER服务转发到Weblogic...
  • f4761
  • f4761
  • 2014-11-16 16:31
  • 828
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)