2009-09-04 2 views
4

既存のデータベース(私の場合はPostgreSQL)を持っていて、そのデータにアクセスしたい(作成、読み取り、更新、削除、クエリ) SOAP Webサービスを介して。 ここでは、各エンティティのJPA実装を行い、汎用CRUDインターフェイスの実装を行っています。次に、これらのBeanをJaxWS Webサービスとして公開します。 この設定の問題は、JaxWSがジェネリックインターフェイスで変わった動作をすることです。既存のデータベースをWebServicesのセットとして公開するためのオープンソースツールがありますか

これは一般的な問題で、WSを通じてDBにアクセスするので、私はすべてのエンティティテーブルをWebサービスとして公開するオープンソースソリューションがあるかどうかを知りたいと思います。 このツールでは、JPAクラス(またはその他のデータ記述)のセット、または(SQLスキーマを引き出すための)JDBC接続を入力として要求し、CRUD Webサービスのセットを生成します。

理想的には、このようなツールは、主にサーブレットで構成され、任意のWebアプリケーションに組み込むことができます。

このツールについてのご意見をお聞かせください。また、ご使用の経験がある場合は、教えてください。

はアドバイスに

まず、あなたがいることを行う必要がないかもしれない質問に答えると、代わりに「あなたがいることを行うにはしたくない」と言って、しかし...ではないため

答えて

3

謝罪をありがとう。データベースがすでにWebサービスを直接公開していますか?たとえば、DB2 UDB and its toolingがあなたのために仕事をします。 Javaを全く書く必要はありません。

第2に、とにかくやってはいけないのでしょうか?これは、エンティティレイヤをWebサービスとして直接公開するためのアーキテクチャ上の反パターンです。粒度は、サービスを非効率的にし、長期的に維持するのが困難になる傾向があります。大規模なWebサービスは、きわめて粗雑でビジネスに意味のあるサービスとして優れている傾向があります。たとえば、保険ポリシーを作成するには、複数の更新と複数の異なるテーブルへの挿入が必要な場合があります。 Webサービスとしての生のテーブル・アクセス機能を公開するには、eveyクライアントが何をすべきかを正確に知る必要があることを意味します。代わりに、WebサービスのCreatePolicy()を公開し、実装にぎこちないものを所有させます。

+0

私は同意します。エンティティレイヤをWebサービスとして公開することは悪い考えです。トランザクションのACIDプロパティであるデータベースの主な機能の1つが失われます。 –

2

ここでは、多層アーキテクチャを採用しており、その一部がストレージです。 私はトランザクションを失いたくはありませんが、新しい顧客をWebサービス経由で挿入しなければならず、顧客サービスがそのスキーマ定義と一緒に自動生成される可能性があります。 また、私の知る限りでは、BPEL2.0はトランザクションをサポートするので、これらのデータサービスはトランザクションを認識することができ、すなわち分散トランザクションに参加することができる。

新しいBLOGエントリを作成する操作は、専用トランザクションで実行する必要があります。私たちのプロジェクトには他の多くのケースがあります(ほぼすべてのテーブル)。外部システムにそれらを公開する必要があります。なぜこれを手で100回書くか? ANTLRの著者は、5日間で手作業で何かできるのであれば、それを自動化するのに5年間を費やさないと言うでしょう。

私は5年を過ごしたいと思っておらず、解決策を探しています。現在、私たちはコード生成を含む半自動化されたタスクを持っていますが、最大の問題はJaxWSがジェネリックインタフェースではうまく動作しないことです。 ROLE権限をチェックするために、あなたのエンティティクラスの上に注釈のセットを持っている - :あなたのような、クールなものの多くを行うことができるので

このアーキテクチャでは、その利点を持っています。エンティティ、Webサービス、または直接java呼び出しにアクセスしても、このチェックは行われます。また、特定のテーブルのすべての操作に対してRSS/Atomフィードを生成するなど、フックを定義することもできます。 - 自動フォーム作成のために、XSDで説明されているエンティティタイプのGUIツールが多数サポートされています。私はすべてのフォームを生成したくないですが、少なくとも置き換え可能なデフォルトの実装を持っています。

私が探しています何を、実際にデータベースまたは何か他のものでbackendedすることができ、データアクセス抽象化プロトコル、Webサービスとしてエンド輸出自体(石鹸/安らか/ JSON何でも)ある

これがありますApacheインキュベーションプロジェクトEmpireDBは、アノテーションやjavaclassesを使用してモデルを定義していないため、メタデータを使用してXSDやFormsを簡単に作成できるという点で優れています。私は、業界標準ではないプロジェクトを使用することを楽しみにしているわけではないので、標準的なテクノロジー、例えばJPA(休止状態)、JaxWSに基づいた、すぐれた解決策を探しています。

+0

WS-AtomicTransactionは分散トランザクションを可能にしますが、BPELを使用する必要はありません。それがうまくいくかどうかは全く異なる質問です。もしあなたがこれをやるつもりならば、ツーリングは行く道だということに完全に同意してください。どのDBを使用していますか? WSを持っていないのですか?独自のコード生成を行うにはhttp://www.eclipse.org/articles/Article-JET/jet_tutorial1.htmlを使用できますか?あなたが生成しているものに規則的なパターンがある場合は、驚くほど簡単です。 – djna

+0

BPELが多すぎることを指摘するためのthanx。 PostgreSQLですが、私はそれが自動WS展示をしていることに気づいていません。私はOracleがそれをしていると確信しています JETを標準のビルドcicleに埋め込む方法が見つからなかったので、一連のGroovyスクリプトを書いてモデルクラスを歩き、JaxWS用の非インターフェイスのインターフェイス/クラスを生成しました。 T – tzador

関連する問題