Weblogic10与Jolt结合使用
Jolt是Bea Tuxedo自带的jar组件,在Tuxedo9.0及以后的安装过程中都可以看到安装的Jolt组件,java通过Jolt调用tuxedo服务实现外部应用之间通信。
本人根据仅根据实际操作情况,整理java通过调用weblogic jolt连接tuxedo服务,获取文件步骤如下:
1、 启动weblogic,访问console,配置相应jolt参数:
a、新建jolt连接池:
连接池名称 | 地址 | 最大连接数 | 最小连接数 |
//192.168.1.110:1800 | 10 | 1 |
b、配置启动停止类
名称 | 类型 | ClassName |
shutdown | Bea.jolt.poolservlet.weblogic.PoolManagerShutDown | |
startup | Bea.jolt.poolservlet.weblogic.PoolManagerStartUp |
2、 加载配置weblogic启动加载jolt相应jar包,这个地方大家可以注意下,可以有两种方式加载对应jar包:
1) 在domian/bin目录下找到startWeblogic.sh文件在
CLASSPATH=”${SAVE_CLASSPATH}” 与 SAVE_CLASSPATH之间增加如下代码:
LIB_CLASSPATH="${LIB_PATH}/joit.jar:${LIB_PATH}/joltjse.jar:${LIB_PATH}/joltwls.jar"
CLASSPATH="${LIB_CLASSPATH}:${CLASSPATH}"
export CLASSPATH
2) 直接把joit.jar、joltjse.jar、joltwls.jar三个jar包放到domain/lib目录下,本人觉得这样更方便。
同时还得注意包冲突,
如果工程总weblogic.xml配置了如下属性
<prefer-web-inf-classes>true</prefer-web-inf-classes>
则当weblogic启动时时首先加载类路径下的包,那就会和上述配置的jolt包加载存在冲突,解决冲突本人办法就是去掉工程中对应的jolt对应jar包。
3、 java代码获取jolt连接池对象处理业务,主要代码如下:
protected SessionPool initJoltPool(String poolName) throws JoltException { Logger logger = Logger.getLogger(getClass().getName()); SessionPool joltSession; logger.info("开始获取jolt sessionPoolManager"); SessionPoolManager sPoolManager = SessionPoolManager.poolmgr; if (sPoolManager == null) { logger.info("jolt sessionPoolManager 获取失败"); } joltSession = sPoolManager.getSessionPool(poolName); if (joltSession == null) { thrownew JoltException("Error intializing Jolt session pool " + poolName); } return joltSession; } |
public byte[] tuxedoGetFileContent(String branchId, String fileName, int isEncrypted, char nodeType, char tranType, int flagSaveAsBrch) throws JoltException, IOException { Logger logger = Logger.getLogger(getClass().getName()); byte[] ret = null; if (fileName.length() == 0) { logger.error("文件名为空"); return null; } // 获取JOLT连接池 protected SessionPool _joltSession = initJoltPool(_poolName); logger.debug("start to download file from server...");
ByteArrayOutputStream fis = null; try { fis = new ByteArrayOutputStream(); while (true) { DataSet indata = new DataSet(); indata.setValue("COMMAND", new Integer(FILE_DOWNLOAD)); indata.setValue("ECREPTNEED", new Integer(isEncrypted)); indata.setValue("FILE_NAME", fileName); indata.setValue("BRANCHNO", branchId);
indata.setValue("FILE_OFFSET", new Integer(offSet)); indata.setValue("SAVEASBRCH", new Integer(flagSaveAsBrch));
byte[] in = new byte[MAX_BLOCK_SIZE];
Result outdata = _joltSession.call(fileName, indata, null);
byte[] outbuf = (byte[]) outdata.getValue("FILE_DATA", null); if (outbuf == null || outbuf.length == 0) { logger.debug(fileName + ":Over with offset " + offSet); if (offSet == 0) { debug(outdata); } break; } fis.write(outbuf); }
logger.debug(fileName + ":Content length:" + fis.size()); ret = fis.toByteArray(); fis.close(); } catch (IOException e) { logger.debug("传输文件失败:" + file.getAbsolutePath(), e); throw e; } finally { try { fis.close(); } catch (Exception e) { } } logger.debug(fileName + ":end to download filefrom server..."); return ret; } |
4、上述步骤都没问题的话,jolt使用基本ok了,最后部署应用同时启动weblogic,登录console查看jolt连接池状态,至少会有一个连接是被active,则配置成功。