将FML(FML32)应用于WTC

将FML(FML32)应用于WTC即指以FML(FML32)格式作为WEBLOGIC与TUXEDO相互通信的数据载体!

请您首先保证WTC的联通性,关于如何配置使得WTC工作,可参考博文WEBLOGIC通过WTC调TUXEDO服务

关于FML(FML32)的信息,可参考将 FML 用于 WebLogic Tuxedo Connector中的以下信息:

FML 概述 WebLogic Tuxedo Connector FML API 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 环境。
例如:您的 Tuxedo 分发包含一个名为 bankapp 的银行应用程序示例。它包含一个名为 bankflds 的文件,该文件具有以下结构:

#Copyright (c) 1990 Unix System Laboratories, Inc.#All rights reserved#ident "@(#) apps/bankapp/bankflds $Revision: 1.3 $"# 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
2、使用正确的命令实例将 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 字段中添加、检索和删除字段条目。

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

BankappResources my.bankflds your.bankflds more.bankflds重新启动 WebLogic Server 以加载字段表类定义。

    以上的核心点在于配置WEBLOGIC WTC的Resource,需要注意的两点是:①由公家生成的bankflds.java类的码值一定要修改保证与TUXEDO端的一致;②将①产生的class文件放在WEBLOGIC可识别的CLASSPATH下,重启WEBLOGIC,配置WTC Server的Resource!

 

  以下是我使用的简单的测试代码:

<%@ page language="java" pageEncoding="utf-8"%>
<%@ page import="weblogic.wtc.jatmi.*,weblogic.wtc.gwt.*, javax.naming.*,java.io.*,org.twolf.wt.wtc.entity.BaseFld32" %> 
<%
try
{    
    //调用接口服务
    Context ctx = new InitialContext();
    TuxedoConnectionFactory tuxedoFactory = (TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
    TuxedoConnection tuxedo = tuxedoFactory.getTuxedoConnection();
    TypedFML32 buffer = new TypedFML32(); 
    buffer.Fchg(BaseFld32.COL1,0,"servicename"); 
    Reply rtn = tuxedo.tpcall("QRYBALANCE", buffer, 0);
    TypedFML32 buffer2 = (TypedFML32)rtn.getReplyBuffer();
    
    out.println("Result:"+buffer2.Fget(BaseFld32.MESSAGE,0));
}
catch(Exception e)
{
    outStr = e.getMessage();
		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		e.printStackTrace(pw);
		out.print(sw);
		sw.close();
		pw.close();
		}
%>

 

你可能感兴趣的:(MIDDLEWARE)