0

Oracleデータベースと相互作用するC言語で記述されたアプリケーションがあります。このアプリケーションは実行可能ファイルであり、UNIXプラットフォームで実行されます。他の人が利用できるように、このアプリケーションをWebサービスとしてhttp経由で公開する必要があります。

WebサービスにJNIとCXFを使用して、Tomcatでアプリケーションを実行することを考えました。

これは正しい解決策ですか、それとも他の可能性がありますか?

Webサービスを作成するためにAxis2がC言語をサポートしていることがわかりました。私はC言語の経験がありません。CのAxis2は良いですか?アプリのデプロイに使用できるhttpサーバーは何ですか?この場合、Apache Webサーバーで十分でしょうか?

編集:コマンドラインは、exeについて言及したかのようにオプションではありませんが、公開する必要のある部分には、入力として複雑なデータ構造が必要なため、使用可能なコマンドラインがなく、少し難しいです。

4

3 に答える 3

1

Apache Foundation パッケージAxis2/Cの使用を検討してください。これは非常に堅実なインターフェースですが、移植性はまだわずかに制限されています (たとえば、Linux ではそのままで動作しますが、Solaris では動作しません - 微調整が必​​要です)。

しかし、あなたは C の経験がないと言うので、それはあなたにとって難しすぎるかもしれません。一方、Web サービスに変換しようとしているコードは C (およびおそらく Oracle OCI) にあると言います。つまり、物事を機能させるためにいくつかの C を学ぶことを避けるのは難しいということです。

于 2009-06-08T06:00:51.703 に答える
1

それはいくつかの要因に依存します。Vinko の方法では、アプリが適切でクリーンなコマンドライン インターフェイスを備えている必要があります。さらに、すべての Web サービス要求に対して新しいプロセスを作成すると、処理できる要求の数が制限されます。これは、予想される聴衆の数によっては、大丈夫かもしれませんし、そうでないかもしれません。

優れたコマンドライン インターフェイスがなく、処理できるリクエストの数を最大化したい場合は、主に 2 つの選択肢が残されます。Web サービスを Java で記述し、JNI またはJNAを使用して C を呼び出します。または、純粋な C または C++ で記述します。責任ある開発者が C をまったく知らない場合、後者はおそらくお勧めできません。

編集:コマンドラインがオプションではないことを考えると、Java with JNI または JNA をお勧めします。

于 2009-06-08T03:20:34.657 に答える
0

サーバー側で Axis2/C を 2 年以上使用した後、次の理由から、サーバー側のコードに Axis2/C を使用することは強くお勧めしません。

  1. メモリリークだらけです。つまり、WSDL リーク、単純な HTTP サーバー リーク、CGI モジュール リークから生成されたサービス コード (基本的な CGI として使用する場合は問題ありませんが、FastCGI などから使用するか、コードを再利用する場合は大きな問題です)。 . Axis2/CI の HTTP サーバー コードでこれまでにチェックされなかった唯一の部分は、Apache2 の mod_axis2 モジュールです。多分それは良いです。

  2. Axis2/C には、C アプリケーションに簡単に組み込むことができる HTTP サーバーの実装がありません。「単純な HTTP サーバー」はリークし、HTTP キープアライブをサポートしていません (要求ごとに接続を閉じます)。boost::asio HTTP サーバーの例と Axis2/C CGI モジュールに基づいて、自分でサーバーを実装する必要がありました。実装に 1 日、すべてのメモリ リークを取り除くために 4 日を費やしました。この比率は、Axis2/C 関連の作業では標準のようです。昼夜を問わず valgrind を使用して、メモリ リークのデバッグや二重解放を行いたいですか?

  3. 最も重要なのは、プロジェクトが積極的に維持されていないことです。JIRA のパッチには多くの問題がありますが、パッチを確認して適用するには数か月から数年かかります。本格的なプロジェクトでサーバー側に使用されているかどうかは疑問です。私の長期的な計画は、それを GIT に複製し、パッチを適用したバージョンを github で維持することです (Axis2/C で既に実装されているコードを何年もサポートする必要があります)。

PS 次の Web サービス関連のサブプロジェクトでは、JNI を使用して Jetty + CXF を埋め込みます。

于 2012-06-17T15:50:04.707 に答える