欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Jco服務(wù)配置以及程序編寫

系統(tǒng) 1859 0

Jco服務(wù)配置以及程序編寫

SAP 與第三方面軟件進(jìn)行數(shù)據(jù)通信時(shí),運(yùn)用到的中間件JCO,以下是JCO的服務(wù)配置.以及程序的編寫,希望能給大家?guī)?lái)點(diǎn)幫助

SAP與java進(jìn)行通信的流程:


操作步驟

ABAP(作為Clint端),調(diào)用JAVA(作為服務(wù)器端)。

首先,JCo服務(wù)器程序在網(wǎng)管中的注冊(cè)

下面給出該程序的JCo服務(wù)器程序在SAP網(wǎng)關(guān)中的注冊(cè)步驟。

(1) 在SM59中,定義一個(gè)連接類型為T的遠(yuǎn)程目標(biāo)

單擊創(chuàng)建按鈕,如下圖所示,要步驟一步一步填入所需要的數(shù)據(jù)
RFC目標(biāo)系統(tǒng),是RFC調(diào)用時(shí)候使用的。 Program ID,是JAVA程序中使用的,此處為L(zhǎng)DKJCO,

這里的Geteway Host就是下圖的應(yīng)用程序服務(wù)器地址。 TCP服務(wù)sapgw是固定的,后面的00就是下圖的系統(tǒng)編號(hào)。

特別要注意的是,下面圖要默認(rèn)NON-Unicode,因?yàn)檫@個(gè)標(biāo)示影響Java代碼中的Unicode設(shè)置。其它的默認(rèn)就可以

上述配置完成即可。

測(cè)試連接,當(dāng)然在做這測(cè)試連接之前先要將sap程序和JAVA程序的參數(shù)設(shè)置好,具體步驟看 sap程序和JAVA程序的設(shè)置,如下


sap程序編寫
創(chuàng)建一個(gè)測(cè)試程序,程序名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.

接下來(lái)JAVA開(kāi)發(fā)代碼,代碼的具體的操作可以在ECLIPSE中完成(要完成JCO的布置和JDK路徑的設(shè)置)
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中可以運(yùn)行程序,運(yùn)行成功如下圖:

運(yùn)行成功后會(huì)產(chǎn)生一個(gè)SERVER.jcoserver,點(diǎn)擊此文件可以看到如果下的信息,連接成功。

最后在SAP中,運(yùn)行TCODE:SM59,選中你所創(chuàng)建的遠(yuǎn)程目標(biāo),此處為L(zhǎng)DKJCO。點(diǎn)連接后出下圖,說(shuō)明SAP可以與JCO通信,SAP可以往JCO發(fā)數(shù)據(jù)。

Jco服務(wù)配置以及程序編寫


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 精品日本三级在线观看视频 | 久久久久毛片免费观看 | 免费伊人网 | 久久久国产一区二区三区 | 91社影院在线观看 | 欧美高清视频一区 | 91视频一区| 一本色道久久88加勒比—综合 | 国产精品原创巨作av | 欧美高清在线视频一区二区 | 嫩草影院永久在线播放 | www国产成人免费观看视频,深夜成人网 | 91精品电影| 亚洲精品午夜在线观看 | 俄罗斯色妞18av | 日韩免费视频观看 | 12345国产精品高清在线 | 中文字幕在线一区 | 免费播放春色aⅴ视频 | 久久草在线视频 | 欧美les免费观看网站 | 久操综合| 天天操天天摸天天舔 | 亚洲www啪成人一区二区 | 日韩在线播放一区 | 奇米在线影视 | 香港一级毛片免费看 | 国产一区二区 | 91精品观看91久久久久久 | 精品国产一区二区三区久久影院 | 亚洲国产中文字幕 | 日韩一级欧美一级毛片在线 | 色影影院 | 99亚洲精品高清一二区 | 亚洲欧美在线视频免费 | 一级做a爰片性色毛片男小说 | 午夜精品视频在线看 | 夜夜艹| 天天操夜夜艹 | 免费福利在线观看 | 午夜在线直播 |