JCo/JBOSS/JCA Adaptor集成笔记
来源:互联网 发布:金本位 知乎 编辑:程序博客网 时间:2024/05/29 03:36
转自一篇老文章:http://www.itpub.net/thread-1098733-1-4.html
Q1. 为什么还用JCo,而不用SAP JRA呢?
A1. SAP JRA只在netweaver java stack上面运行,纯ABAP stack没法跑。
Q2. 为什么非用JCA
A2. 为了利用强大的J2EE Server的现成功能来管理连接
Q3. 为什么用sap-bapi-jca-adapter
A3. 因为不要重新发明轮子,而且发明轮子需要耗费很长的时间
Q4. 什么是sap-bapi-jca-adapter?从哪里下载文档在哪里?例子在哪里?
A4. 这是个开源项目,提供了对JCo的JCA封装,项目首页在http://www.techjava.de/projects/sap-bapi-jca-adapter/,文档,代码等可从sf.net找到,http://sourceforge.net/projects/sapbapijcaadapt/。例子暂时没找到,你可以参考本文,或者参考项目的单元测试程序
Q5. 怎么编译代码
A5. 因为项目还比较原始,有不少代码错误,可能需要修改代码,建议大家下载源代码自己编译。当然,你要遵守项目的License,LGPL,共享出你的所有修改和增强。编译时需要注意几点。
0. 用Eclipse或其他CVS工具从sf.net下载代码
1. 从https://websmp202.sap-ag.de/~sapidb/011000358700007415502002E下载sapjco3-ntintel-3.0.1.zip和sapjco-ntintel-2.1.8.zip,展开
2. 在项目根目录下建立ext-lib文件夹,将sapjco.jar和sapjco3.jar拷贝过去
3. 用ant编译,或在eclipse下用ant编译
4. build.xml中property name="distr.dir.jboss"对应的是jboss server的地址,应该将这句话删除,可以在project.properties中用distr.dir.jboss属性来指定jboss的地址
5. 编译后会执行部署操作,将sapcrm-jboss-ds.xml和sap-bapi-adapter.rar两个文件拷贝至distr.dir.jboss中
Q6. JBOSS中怎么配置
A6. 以jboss-4.2.3.GA为例说明
1. 将sapjco.jar,sapjco3.jar,sapjcorfc.dll,sapjco3.dll复制到jboss/server/default/lib或类似目录中
2. 确保librfc32.dll在windows\system32下,这个文件装了sap gui就有了,如果没有,jco2的包里
3. 修改jboss/server/default/conf下的jbossjta-properties.xml文件, 在<properties depends="arjuna" name="jta">下增加<property name="com.arjuna.ats.jta.allowMultipleLastResources" value="true"/>
4. 将jboss/server/default/deploy下sapcrm-jboss-ds.xml复制成sap-bapi-adapter-jboss-ds.xml,并修改其中的<jndi-name>以及以下几个config-property
host
systemNumber
repositoryName,这个填任意字符串即可,建议用SID
client
UserName
Password
Language
并增加<config-property name="destinationFactory" type="java.lang.String">net.sf.sapbapijca.adapter.jco.JCo2DestinationFactory</config-property>
**这里指定了使用JCo2的库,暂时使用JCo3的库有点问题,我还在研究
Q7. 好了,下面怎么调用ABAP那边的函数呢?
A7. 示例代码如下,JCo2版本,JCo3的我正在研究中
import java.util.Map;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.resource.ResourceException;import javax.resource.cci.Connection;import javax.resource.cci.ConnectionFactory;import javax.resource.cci.Interaction;import javax.resource.cci.InteractionSpec;import javax.resource.cci.MappedRecord;import javax.resource.cci.RecordFactory;import net.sf.sapbapijca.adapter.cci.InteractionSpecImpl;.... Connection connection = null; try { Context initctx = new InitialContext(); ConnectionFactory factory = (ConnectionFactory)initctx.lookup("java:eis/sap/demo"); connection = factory.getConnection(); Interaction interaction = connection.createInteraction(); InteractionSpec spec = new InteractionSpecImpl("RFC_READ_TABLE"); RecordFactory recordFactory = factory.getRecordFactory(); MappedRecord in = recordFactory.createMappedRecord("INPUT"); in.put("QUERY_TABLE", "TB027T"); MappedRecord resultRecord = (MappedRecord)interaction.execute(spec, in); for(Object entry : resultRecord.entrySet()) { Object key = ((Map.Entry)entry).getKey(); Object value = ((Map.Entry)entry).getValue(); log.info("Key: " + key.toString()); log.info("Value: " + value.toString()); } } catch (NamingException e) { e.printStackTrace(); } catch (ResourceException e) { e.printStackTrace(); } finally { if (connection != null) try { connection.close(); } catch (ResourceException e) { e.printStackTrace(); } }
Q8. 你的代码一跑就出null pointer错误
A8. opensource的嘛,当然有些错误。修改net.sf.sapbapijca.adapter.jco.JCo2RecordImpl文件,149行
public int getFieldCount() { return record != null ? record.getFieldCount() : 0 ; }
- JCo/JBOSS/JCA Adaptor集成笔记
- adaptor
- Adaptor
- JCA
- JCA: Java步入应用集成时代
- jboss.jca:name=/MySqlDS,service=DataSourceBinding -> ** NOT FOUND Depends on 'jboss.jca:name=/MySqlD
- jca 1.5 inbound 学习笔记 (by quqi99)
- org.jboss.deployment.DeploymentException: Trying to install an already registered mbean: jboss.jca:s
- tomcat与jboss集成
- jboss笔记
- jboss笔记
- eclipse集成jboss及jboss环境配置
- 模式学习笔记(1)——Adaptor
- 【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
- JBoss集成ColdFusion和Jetspeed
- JBoss与IIS服务器集成
- JBoss与IIS服务器集成
- 嵌入式JBoss与tomcat6集成
- (遍历)一些基本的求和,求积,求阶乘,计数问题(流程控制语句的使用)
- 编译器参数:keep-generated-actionscript 作用于MXML文件
- c++第八周【任务1-3】实现复数类中的运算符重载
- PHP内核每天挖一点-数组的底层结构
- 无题
- JCo/JBOSS/JCA Adaptor集成笔记
- 红黑树实现——STL中的MAP
- 十大国内外免费网站监测服务综合介绍
- 爱的邮箱(@love.com)申请方法!
- davinci 的Linux应用
- Linux_su : command not found error
- 赵雅智_java抽象类
- poj1062
- c++第八周【任务2】实现Time类中的运算符重载