- 浏览: 406268 次
- 性别:
- 来自: 北京
博客专栏
-
Jeecg快速开发平台
浏览量:0
文章分类
- 全部博客 (1498)
- java (109)
- jeecg (140)
- minidao (18)
- 移动 (4)
- git (1)
- svn (2)
- maven (3)
- mybatis (5)
- 快速开发 (60)
- 代码生成器 (23)
- 培训 (1)
- 微信 (8)
- 微信二次开发 (7)
- 微营销 (1)
- easyui (2)
- springmvc (3)
- 微网站 (2)
- 开源年会 (1)
- mongodb (2)
- 架构师 (1)
- 工作流 (2)
- 架构培训 (1)
- 微信开发 (3)
- 插件开发 (1)
- 支付窗 (2)
- jeecg,JEEWX,集群定时任务 (0)
- 简易工具,开源,easypoi (2)
- jeecg,数据权限 (1)
- jeecg,高级查询 (2)
- jeecg,部门管理 (1)
- jeecgonline,唯一性校验 (1)
- jeecg,组织机构 (1)
- jeecg,接口权限 (1)
- jeecg,java,online表单,表单填值 (4)
- jeecg,接口 (1)
- jeecg,java,online自定义 (2)
- jeecg,表单配置,树形表单 (1)
- jeecg,Redis (1)
- 摘要: JEECG 是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台。引领新的开发模式(Online Coding模式(自定义表单)->代码生成器模式->手工MERGE智能开发), 可以帮助解决Java项目60%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。她可以用于所有的Web应用程序,如:MIS,CRM,OA,ERP,CMS,网站后台,微信管家,等等,当然,您也可以对她进行深度定制,以做出更强系统。 (0)
- jeewx (7)
- 捷微 (2)
- JAVA微信管家 (0)
- 企业微信 (1)
- 微信,JEEWX,企业微信,微信二次开发,java微信管家 (3)
- JEEWX,微信企业号,企业微信,java (1)
- 微信SDK (3)
- jeecg,ng2-admin,Angular4 (1)
- jeecg,企业应用,JEasyPoi (7)
- Excel (2)
- Word (2)
- 企业应用 (4)
- JEasyPoi (1)
- 小程序 (6)
- webstorm (1)
- 开源社区, (1)
- Bootstrap (3)
- Vue (5)
- Spring (3)
- 插件开发,jeecg-P3, (2)
- 持久层,Mybatis,Hibernate,jeecg (2)
- easypoi,poi (1)
- 简易导入导出 (1)
- 工作流,快速开发平台 (1)
- jeecg,小程序,java,开源 (4)
- jeewx,小程序,H5活动,营销活动 (3)
- 代码生成器,plupload (1)
- java,砍价,捷微,H5 (1)
- 微服务 (1)
- JavaScript (1)
最新评论
-
a3617096:
这个jar包哪里有下载的?
【JEECG插件集成文档】JEECG在线聊天插件 - 集成文档 -
ppm218:
我用maven 下载不了jar啊,有哪位仁兄可以发一下给我吗? ...
【JEECG技术文档】JEECG在线聊天插件功能集成文档 -
lijing_smile:
jeecg 你好!在线聊天集成到jeecg_3.6.3中去但是 ...
【JEECG技术文档】JEECG在线聊天插件功能集成文档 -
来去无痕:
链接都过期了
开源社区JAVA视频网盘分享 -
LinApex:
已经失效了
【jeecg-mybatis版本】 mybatis+spring mvc 完美整合方案 查询,保存,更新,删除自动生成
Jco服务配置以及程序编写
Jco服务配置以及程序编写
SAP 与第三方面软件进行数据通信时,运用到的中间件JCO,以下是JCO的服务配置.以及程序的编写,希望能给大家带来点帮助
SAP与java进行通信的流程:
操作步骤
ABAP(作为Clint端),调用JAVA(作为服务器端)。
首先,JCo服务器程序在网管中的注册
下面给出该程序的JCo服务器程序在SAP网关中的注册步骤。
(1) 在SM59中,定义一个连接类型为T的远程目标
单击创建按钮,如下图所示,要步骤一步一步填入所需要的数据
RFC目标系统,是RFC调用时候使用的。 Program ID,是JAVA程序中使用的,此处为LDKJCO,
这里的Geteway Host就是下图的应用程序服务器地址。 TCP服务sapgw是固定的,后面的00就是下图的系统编号。
特别要注意的是,下面图要默认NON-Unicode,因为这个标示影响Java代码中的Unicode设置。其它的默认就可以
上述配置完成即可。
测试连接,当然在做这测试连接之前先要将sap程序和JAVA程序的参数设置好,具体步骤看 sap程序和JAVA程序的设置,如下
sap程序编写
创建一个测试程序,程序名zldkjco(自定义)
代码如下:
REPORT ZLDKJCO.
DATA:REQUTEXT LIKE SY-LISEL,
RESPTEXT LIKE SY-LISEL,
ECHOTEXT LIKE SY-LISEL.
DATA:RFCDEST like rfcdes-rfcdest VALUE ‘NONE’.
DATA:RFC_MESS(128).
REQUTEXT= ‘HELLOWORLD’.
RFCDEST= ‘LDKJCO’. “correspondstothedestinationnamedefinedintheSM59
CALL FUNCTION ‘STFC_CONNECTION’ DESTINATIONRFCDEST
EXPORTING
REQUTEXT=REQUTEXT
IMPORTING
RESPTEXT=RESPTEXT
ECHOTEXT=ECHOTEXT
EXCEPTIONS
SYSTEM_FAILURE= 1 MESSAGE RFC_MESS
COMMUNICATION_FAILURE= 2 MESSAGE RFC_MESS.
IF SY-SUBRC NE 0.
WRITE:/ ‘CallSTFC_CONNECTIONSY-SUBRC=’,SY-SUBRC.
WRITE:/RFC_MESS.
ENDIF.
接下来JAVA开发代码,代码的具体的操作可以在ECLIPSE中完成(要完成JCO的布置和JDK路径的设置)
public class StepByStepServer
{
static String SERVER_NAME1 = “SERVER”;
static String DESTINATION_NAME1 = “ABAP_AS_WITHOUT_POOL”;
static String DESTINATION_NAME2 = “ABAP_AS_WITH_POOL”;
static MyTIDHandler myTIDHandler = null;
static
{
Properties connectProperties = new Properties();
connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, “10.0.0.6″);
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, “00″);
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, “800″);
connectProperties.setProperty(DestinationDataProvider.JCO_USER, “XIAOFR”);
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, “123456789″);
connectProperties.setProperty(DestinationDataProvider.JCO_LANG, “en”);
createDataFile(DESTINATION_NAME1, “jcoDestination”, connectProperties);
connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, “3″);
connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, “10″);
createDataFile(DESTINATION_NAME2, “jcoDestination”, connectProperties);
Properties servertProperties = new Properties();
servertProperties.setProperty(ServerDataProvider.JCO_GWHOST, “10.0.0.6″);
servertProperties.setProperty(ServerDataProvider.JCO_GWSERV, “sapgw00″);
servertProperties.setProperty(ServerDataProvider.JCO_PROGID, “LDKJCO”);
servertProperties.setProperty(ServerDataProvider.JCO_REP_DEST, “ABAP_AS_WITH_POOL”);
servertProperties.setProperty(ServerDataProvider.JCO_CONNECTION_COUNT, “2″);
createDataFile(SERVER_NAME1, “jcoServer”, servertProperties);
}
static void createDataFile(String name, String suffix, Properties properties)
{
File cfg = new File(name + “.” + suffix);
if(!cfg.exists())
{
try
{
FileOutputStream fos = new FileOutputStream(cfg, false);
properties.store(fos, “for tests only !”);
fos.close();
}
catch(Exception e)
{
throw new RuntimeException(“Unable to create the destination file “ + cfg.getName(), e);
}
}
}
static class StfcConnectionHandler implements JCoServerFunctionHandler
{
public void handleRequest(JCoServerContext serverCtx, JCoFunction function)
{
System.out.println(“—————————————————————-”);
System.out.println(“call : “ + function.getName());
System.out.println(“ConnectionId : “ + serverCtx.getConnectionID());
System.out.println(“SessionId : “ + serverCtx.getSessionID());
System.out.println(“TID : “ + serverCtx.getTID());
System.out.println(“repository name : “ + serverCtx.getRepository().getName());
System.out.println(“is in transaction : “ + serverCtx.isInTransaction());
System.out.println(“is stateful : “ + serverCtx.isStatefulSession());
System.out.println(“—————————————————————-”);
System.out.println(“gwhost: “ + serverCtx.getServer().getGatewayHost());
System.out.println(“gwserv: “ + serverCtx.getServer().getGatewayService());
System.out.println(“progid: “ + serverCtx.getServer().getProgramID());
System.out.println(“—————————————————————-”);
System.out.println(“attributes : “);
System.out.println(serverCtx.getConnectionAttributes().toString());
System.out.println(“—————————————————————-”);
System.out.println(“CPIC conversation ID: “ + serverCtx.getConnectionAttributes().getCPICConversationID());
System.out.println(“—————————————————————-”);
System.out.println(“req text: “ + function.getImportParameterList().getString(“REQUTEXT”));
function.getExportParameterList().setValue(“ECHOTEXT”, function.getImportParameterList().getString(“REQUTEXT”));
function.getExportParameterList().setValue(“RESPTEXT”, “Hello World”);
// In sample 3 (tRFC Server) we also set the status to executed:
if(myTIDHandler != null)
myTIDHandler.execute(serverCtx);
}
}
static void step1SimpleServer()
{
JCoServer server;
try
{
server = JCoServerFactory.getServer(SERVER_NAME1);
}
catch(JCoException ex)
{
throw new RuntimeException(“Unable to create the server “ + SERVER_NAME1 + “, because of “ + ex.getMessage(), ex);
}
JCoServerFunctionHandler stfcConnectionHandler = new StfcConnectionHandler();
DefaultServerHandlerFactory.FunctionHandlerFactory factory = new DefaultServerHandlerFactory.FunctionHandlerFactory();
factory.registerHandler(“STFC_CONNECTION”, stfcConnectionHandler);
server.setCallHandlerFactory(factory);
server.start();
System.out.println(“The program can be stoped using <ctrl>+<c>”);
}
static class MyThrowableListener implements JCoServerErrorListener, JCoServerExceptionListener
{
public void serverErrorOccurred(JCoServer jcoServer, String connectionId, JCoServerContextInfo serverCtx, Error error)
{
System.out.println(“>>> Error occured on “ + jcoServer.getProgramID() + ” connection “ + connectionId);
error.printStackTrace();
}
public void serverExceptionOccurred(JCoServer jcoServer, String connectionId, JCoServerContextInfo serverCtx, Exception error)
{
System.out.println(“>>> Error occured on “ + jcoServer.getProgramID() + ” connection “ + connectionId);
error.printStackTrace();
}
}
static class MyStateChangedListener implements JCoServerStateChangedListener
{
public void serverStateChangeOccurred(JCoServer server, JCoServerState oldState, JCoServerState newState)
{
// Defined states are: STARTED, DEAD, ALIVE, STOPPED;
// see JCoServerState class for details.
// Details for connections managed by a server instance
// are available via JCoServerMonitor
System.out.println(“Server state changed from “ + oldState.toString() + ” to “ + newState.toString() + ” on server with program id “
+ server.getProgramID());
}
}
static void step2SimpleServer()
{
JCoServer server;
try
{
server = JCoServerFactory.getServer(SERVER_NAME1);
}
catch(JCoException ex)
{
throw new RuntimeException(“Unable to create the server “ + SERVER_NAME1 + “, because of “ + ex.getMessage(), ex);
}
JCoServerFunctionHandler stfcConnectionHandler = new StfcConnectionHandler();
DefaultServerHandlerFactory.FunctionHandlerFactory factory = new DefaultServerHandlerFactory.FunctionHandlerFactory();
factory.registerHandler(“STFC_CONNECTION”, stfcConnectionHandler);
server.setCallHandlerFactory(factory);
// additionally to step 1
MyThrowableListener eListener = new MyThrowableListener();
server.addServerErrorListener(eListener);
server.addServerExceptionListener(eListener);
MyStateChangedListener slistener = new MyStateChangedListener();
server.addServerStateChangedListener(slistener);
server.start();
System.out.println(“The program can be stoped using <ctrl>+<c>”);
}
static class MyTIDHandler implements JCoServerTIDHandler
{
Map<String, TIDState> availableTIDs = new Hashtable<String, TIDState>();
public boolean checkTID(JCoServerContext serverCtx, String tid)
{
// This example uses a Hashtable to store status information. But usually
// you would use a database. If the DB is down, throw a RuntimeException at
// this point. JCo will then abort the tRFC and the R/3 backend will try
// again later.
System.out.println(“TID Handler: checkTID for “ + tid);
TIDState state = availableTIDs.get(tid);
if(state == null)
{
availableTIDs.put(tid, TIDState.CREATED);
return true;
}
if(state == TIDState.CREATED || state == TIDState.ROLLED_BACK)
return true;
return false;
// “true” means that JCo will now execute the transaction, “false” means
// that we have already executed this transaction previously, so JCo will
// skip the handleRequest() step and will immediately return an OK code to R/3.
}
public void commit(JCoServerContext serverCtx, String tid)
{
System.out.println(“TID Handler: commit for “ + tid);
// react on commit e.g. commit on the database
// if necessary throw a RuntimeException, if the commit was not
// possible
availableTIDs.put(tid, TIDState.COMMITTED);
}
public void rollback(JCoServerContext serverCtx, String tid)
{
System.out.println(“TID Handler: rollback for “ + tid);
availableTIDs.put(tid, TIDState.ROLLED_BACK);
// react on rollback e.g. rollback on the database
}
public void confirmTID(JCoServerContext serverCtx, String tid)
{
System.out.println(“TID Handler: confirmTID for “ + tid);
try
{
// clean up the resources
}
// catch(Throwable t) {} //partner wont react on an exception at
// this point
finally
{
availableTIDs.remove(tid);
}
}
public void execute(JCoServerContext serverCtx)
{
String tid = serverCtx.getTID();
if(tid != null)
{
System.out.println(“TID Handler: execute for “ + tid);
availableTIDs.put(tid, TIDState.EXECUTED);
}
}
private enum TIDState
{
CREATED, EXECUTED, COMMITTED, ROLLED_BACK, CONFIRMED;
}
}
static void step3SimpleTRfcServer()
{
JCoServer server;
try
{
server = JCoServerFactory.getServer(SERVER_NAME1);
}
catch(JCoException ex)
{
throw new RuntimeException(“Unable to create the server “ + SERVER_NAME1 + “, because of “ + ex.getMessage(), ex);
}
JCoServerFunctionHandler stfcConnectionHandler = new StfcConnectionHandler();
DefaultServerHandlerFactory.FunctionHandlerFactory factory = new DefaultServerHandlerFactory.FunctionHandlerFactory();
factory.registerHandler(“STFC_CONNECTION”, stfcConnectionHandler);
server.setCallHandlerFactory(factory);
// additionally to step 1
myTIDHandler = new MyTIDHandler();
server.setTIDHandler(myTIDHandler);
server.start();
System.out.println(“The program can be stoped using <ctrl>+<c>”);
}
public static void main(String[] a)
{
// step1SimpleServer();
step2SimpleServer();
// step3SimpleTRfcServer();
}
}
在ECLIPSE中编写完成后,在ECLIPSE中可以运行程序,运行成功如下图:
运行成功后会产生一个SERVER.jcoserver,点击此文件可以看到如果下的信息,连接成功。
最后在SAP中,运行TCODE:SM59,选中你所创建的远程目标,此处为LDKJCO。点连接后出下图,说明SAP可以与JCO通信,SAP可以往JCO发数据。
相关推荐
包含SAP JCO技术,JCOAPI,Jco服务配置以及程序编写,外部編程接口-RFCAPI和SAP连接器等等详细及实例
sapjco3配置和测试源码,用于windows 64位和linux 64位,文件夹里有windows和linux的配置文档。。
Windows_64和Linux_64下配置JCo3环境 将libsapjco3.so、sapjco3.jar扔到指定目录; 3、把JCo3安装目录添加到LD_LIBRARY_PATH环境变量; 4、把 安装目录/sapjco3.jar添加到CLASSPATH环境变量;
Java里如何使用JCo的连接池来连接SAP R3系统.
jco的安装程序, SAP Java Connector 2.1.8 希望能为大家提供一个好的开发平台 java connector 组件 java连接sap
用JAVA程序连接SAP,需要使用JCO3,JCO3下载后,需要配置后才能使用,此方法是我亲自试出来的,而且,保证可以使用。
1.将sapjco3.jar 文件复制至 $JAVA_HOME/lib/sapjco3.jar 2.将 libsapjco3.so 文件复制至 $JAVA_HOME/jre/lib/amd64/server/libsapjco3.so 3.设置环境变量 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools....
配置连接SAP系统所需的dll文件jar包,包含windows 32位和windows 64位两个版本的文件。
mvn install:install-file -DgroupId=org.hibersap -DartifactId=sapjco3 -Dversion=3.0 -Dpackaging=jar -Dfile=E:/sapjco3/sapjco3-win32/sapjco3.jar 用以替换 org.hibersap 加载项下载的文件 <groupId>org....
How to Migrate from SAP JCo2 to SAP JCo3 and use SAP JCo3 in a Multi-Threaded Environment
mvn install:install-file -DgroupId=org.hibersap -DartifactId=sapjco3 -Dversion=3.0 -Dpackaging=jar -Dfile=E:/sapjco3/sapjco3-win32/sapjco3.jar 用以替换 org.hibersap 加载项下载的文件 <groupId>org....
最新Windows_64和Linux_64下配置JCo3环境,还有配置说明和测试代码 1)将libsapjco3.so、sapjco3.jar扔到指定目录; 3、把JCo3安装目录添加到LD_LIBRARY_PATH环境变量; 4、把 安装目录sapjco3.jar添加到CLASSPATH环境...
连接SAP的最新JCO驱动,Windows64位,有三个文件sapjco3.dll、sapjco3.jar、sapjco3.pdb
sapjco3.jar、sapjco3.dll、sapjcorfc.dll、libsapjco3.so
本资源为JCO手册 JCO手册 JCO手册 JCO手册
sap编程接口.JCo3.0是Java语言与ABAP语言双向通讯的中间件。包含安装配置说明
设置系统环境变量,将sapjco3所在目录加入系统环境变量 例如: 新建环境变量 变量名: JAVA_SAPJCO 变量值: E:\sapjco3\sapjco3-win32 将新建的 JAVA_SAPJCO 环境变量加入 系统环境变量 Path变量集合中. %JAVA_SAPJCO%\...
1、Java对接SAP平台的SDK,包含jar包、windows、linux平台的动态链接库(sapjco3.jar、libsapjco3.so、sapjco3.dll) 2、jar包自行用maven命令安装到仓库(该版本jar包可改包名) 3、win环境,将sapjco3.dll文件放入C:...
连接sap系统RFC函数所需的jar包驱动文件,包括sapjco3.dll,sapjco3.jar sapidoc3.jar, libsapjco3.so 。前面下载的sapjco3.dll 老是提供版本过低,最后终于找到匹配的版本,分享给大家,
SAP JCo3在LINUX操作系统的安装、直接连接、连接池连接