Weblogic调用Tuxedo
1、编写测试程序,使用web项目,引入必要jar,编写index.jsp调用Tuxedo服务,部署到Weblogic中
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page import="weblogic.wtc.jatmi.*,weblogic.wtc.gwt.*, javax.naming.*" %>
<%
<span style="white-space:pre"> </span>try{
//1、初始化环境
Context ctx = new InitialContext();
//2、jndi查找tuxedo连接
TuxedoConnectionFactory tuxedoFactory =
(TuxedoConnectionFactory) ctx.lookup("tuxedo.services.TuxedoConnection");
//3、创建连接
TuxedoConnection tuxedoConn = tuxedoFactory.getTuxedoConnection();
//4、创建传入参数
String inStr = "helloworld";
TypedString xdata = new TypedString(inStr);
//5、调用TOUPPER
Reply reply = tuxedoConn.tpcall("TOUPPER", xdata, 0);
//6、获取返回
xdata = (TypedString)reply .getReplyBuffer();
out.println("调用成功返回:"+xdata.toString());
//7、释放连接
tuxedoConn.tpterm();
} catch(Exception e) {
out.print(e.getMessage());
}
%>
示例项目在附件中已提供,里面已包含相关jar包,需要注意weblogic.jar的版本问题。Weblogic11g和Weblogic10g中自带的weblogic.jar缺少相关类,附件中使用的是weblogic8的包。
2. 测试Weblogic调用Tuxedo
index.jsp中传入小写hellowold,调用Tuxedo的TOUPPER方法返回大写的HELLOWORLD。
首次调用时Weblogic将创建于Tuxedo的连接,在simpapp文件夹下的ULOG日志中会输出115139.HONGHU!GWTDOMAIN.2652.2024.0:LIBGWT_CAT:1128: INFO: Connection accepted from domain (domainid=<TDOM2>)
Tuxedo调用Weblogic
1. 编写EJB应用,附件已经提供ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1">
<enterprise-beans>
<session>
<ejb-name>TOLOWER</ejb-name>
<home>weblogic.wtc.jatmi.TuxedoServiceHome</home>
<remote>weblogic.wtc.jatmi.TuxedoService</remote>
<ejb-class>hello.ToLowerBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
weblogic-ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd">
<weblogic-enterprise-bean>
<ejb-name>TOLOWER</ejb-name>
<stateless-session-descriptor/>
<jndi-name>tuxedo.services.TOLOWERHome</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
1.ejb-jar.xml的home和remote节点内容为固定写法
2.weblogic-ejb-jar.xml的jndi-name节点内容与WTC【已导出】的”EJB名称“一致
package hello;
import javax.ejb.SessionBean;
import weblogic.ejb.GenericSessionBean;
import weblogic.ejbgen.RemoteMethod;
import weblogic.wtc.jatmi.Reply;
import weblogic.wtc.jatmi.TPServiceInformation;
import weblogic.wtc.jatmi.TypedString;
public class ToLowerBean extends GenericSessionBean implements SessionBean {
private static final long serialVersionUID = 1L;
public void ejbCreate() {
System.out.println("Create EJB");
}
@RemoteMethod()
public Reply service(TPServiceInformation inData) throws Exception {
System.out.println("Call TOLOWER");
//1、获取传入的数据,转型要根据调用时传入的类型
TypedString data = (TypedString) inData.getServiceData();
//2、获取具体字段值,
//需要注意TypedFML32的取值方法Fget的第一个参数要与调用时定义的一致
System.out.println("InData:"+data.toString());
//3、创建返回数据
TypedString result = new TypedString(data.toString().toString().toLowerCase());
inData.setReplyBuffer(result);
return (inData);
}
}
如果使用FML32格式,会比String格式复杂一些,在EJB中FML32的取值赋值要根据调用时指定指针位置。
2. 部署EJB项目,如图
Weblogic控制台中输出调试信息