2012-02-27 9 views
1

私は基本機能がすべてのクエリをEJB Beanに代理することであるThriftサービスを書いています。基本的にサービスは呼び出しを受け取り、ローカルBeanを検索し、Beanにクエリを転送し、その応答をクライアントに転送します。スリフトサービスでJava固有のタイプを使用するにはどうすればよいですか?

主な問題は、リフトIDLは言語固有のタイプをサポートしていないことです。たとえば、methodパラメータの1つはInamedインタフェース(Serializableを拡張)を実装するオブジェクトです。

「my.package.interfaces.INamed」などからこのインターフェイスをインポートし、それを有効なパラメータ/戻り値の型として使用したいと思うことを、どのように伝えることができますか?

答えて

2

Thriftを介して任意のオブジェクトを送信する場合は、それらを直列化してThriftバイナリデータとして送信し、反対側で逆シリアル化できます。しかしこれは型チェックをバイパスします。

しかし、Thriftは言語に依存しないように設計されているため、IDLで言語固有のタイプを表現することはできません。

INamedと一致するThrift構造体を定義して、これを他のスリル方法で使用できますか?

+0

私はこの構造体を定義することができません - 私が受け取るオブジェクトについて知っているのは、インタフェースがあることです。クラスについては何も知らないので、それが含まれているフィールドを知らないので書き込めません構造体。 私は言語の独立性の概念を理解していますが、Thriftは「void setName(1:javatype(my.package.interfaces.INamed)name)」のようなより特定の言語のメカニズムを許可しています。 – r3mbol

+0

倹約してコードを生成し、型と輸入物を調整するためにgen-codeを修正することですが、それは正しい解決策ではないと感じています。 – r3mbol

関連する問題