0

SAP Jcoを使用して、フロントエンドがJava(JSF)であるSAPデータベースに接続しています.SAPに接続するとき:

try {
 mConnection =JCO.createClient("400", // SAP client
  "c3026902", // userid
  "********", // password
  "EN", // language
  "iwdf5020", // host name
  "00"); // system number
 mConnection.connect();
}
catch (Exception ex) {
 ex.printStackTrace();
 System.exit(1);
}

私が直面している問題は、アプリケーションを初めて実行するとデータが表示されるが、再実行すると「ミドルウェア層 'com.sap.mw.jco.rfc.MiddlewareRFC' をロードできませんでした」と表示されることです。

問題の解決を手伝ってくれる人はいますか?????

4

3 に答える 3

1

これは、API がネイティブ ドライバー ファイルをロードできないようです。SAP Java コネクタは、実際の通信を行うネイティブ ランタイム部分と、この機能を Java API でラップする Java API で構成されます。Java API は sapjco.jar 内にあり、ネイティブ ドライバはたとえば librfc32.dll および sapjcorfc.dll 内のウィンドウにあります。これらの dll をシステム パス (例: Windows: C:\WiNDOWS\system32) に配置すると、実行されます。

乾杯セバスチャン

于 2011-03-19T12:32:09.247 に答える
0

DLL は Windows の system32 フォルダーにありますか? もしそうなら、おそらく間違ったアーキテクチャを使用していますか? (32 ビットの x64 DLL またはその逆) また、DLL は Java API と同じバージョンですか? SAP GUI がインストールされている場合、古い DLL が存在する可能性があります。

于 2011-03-23T15:37:05.043 に答える
0

SAP 接続の定義:

sapjco ライブラリのバージョン 3.0 には、役立つ情報がたくさんあります。次の手順に従って接続を作成するには:

http://www.browseye.com/linkShare.html?url=http://help.sap.com/saphelp_nwpi711/helpdata/en/46/fb807cc7b46c30e10000000a1553f7/content.htm?bwsCriterion=%22Setting%20Up%20Connection%22&bwsMatch =1&bwsCriterion=%22Setting%20Up%20Connection%22&bwsMatch=1

考慮すべき点がいくつかあります。

jar ファイルと同じ場所に dll ファイルを配置します。dll は、オペレーティング システムとアーキテクチャに適したバージョンである必要があります。そうでない場合、ネイティブ ライブラリ エラーが発生します。

サーバーへの接続を作成するコードの例。

public class StepByStepClient
{
    static String DESTINATION_NAME1 = "ABAP_AS_WITHOUT_POOL";
    static String DESTINATION_NAME2 = "ABAP_AS_WITH_POOL";
    static
    {
        Properties connectProperties = new Properties();
        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "ls4065");
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "85");
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "800");
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "homofarber");
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "laska");
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");
        createDestinationDataFile(DESTINATION_NAME1, connectProperties);
        connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");
        connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT,    "10");
        createDestinationDataFile(DESTINATION_NAME2, connectProperties);

    }

    static void createDestinationDataFile(String destinationName, Properties connectProperties)
    {
        File destCfg = new File(destinationName+".jcoDestination");
        try
        {
            FileOutputStream fos = new FileOutputStream(destCfg, false);
            connectProperties.store(fos, "for tests only !");
            fos.close();
        }
        catch (Exception e)
        {
            throw new RuntimeException("Unable to create the destination files", e);
        }
    }


    public static void step1Connect() throws JCoException
    {
        JCoDestination destination =    JCoDestinationManager.getDestination(DESTINATION_NAME1);
        System.out.println("Attributes:");
        System.out.println(destination.getAttributes());
        System.out.println();
    }
}

SAPJco 3.0 では、接続は「宛先」に含まれる情報から構築されます。

ドキュメントの例では、プロパティ ファイルを使用して「Destination」を保存しています。ただし、接続情報を保持する方法は安全ではありません。ハイライトされた段落のドキュメントに示されているように、次のリンクで確認できます。

http://help.sap.com/saphelp_nwpi711/helpdata/en/48/5fb9f9b523501ee10000000a421937/content.htm?bwsCriterion=%22In%20practice%20you%20should%20avoid%20this%20for%20security%20reasons.%22&bwsMatch=1

カスタムの「DestinationDataProvider」を作成すると、データベースまたはその他のストレージ システムに接続情報を保持できます。

于 2013-09-22T15:45:17.350 に答える