プレーン Java クライアントと遅延読み込み (実際の Java クライアントまたは別のサーバーを呼び出す Java サーバー アプリケーション) で GraniteDS を正常に使用した人はいますか?
特別なクライアント側の初期化が必要ですか? (ドキュメントはこれについて何も述べていないので、必要はないと仮定し、単にサンプル コードを使用しました)
ドキュメント (3.0.M2) に基づいて、Spring バックエンドと単純な POJO で動作する Java クライアントを作成しましたが、Hibernate でロードされた POJO を返す必要がある場合に失敗します (RemoteService と Tide の両方のバージョンが同じデシリアライゼーション例外で失敗します) )。
現在、クライアント側の GraniteDS 構成ファイルはありません。次のコードのみです。
文字列 baseURL = "http://localhost:8080/WebApp_Development_Client_Maven/"; URI uri = 新しい URI(baseURL + "graniteamf/amf.txt"); トランスポート tr = new ApacheAsyncTransport(); tr.start(); AMFRemotingChannel ch = new AMFRemotingChannel(tr, "graniteamf", uri); RemoteService srv = new RemoteService(ch, "userService"); ユーザーの一覧表示 = (List)srv.newInvocation("listUsers").invoke().get().getData();
逆シリアル化の例外:
原因:java.lang.RuntimeException:limes.core.model.security.UserにバインドされたActionScript3クラス(つまり:[RemoteClass(alias="limes.core.model.security.User")])はflash.utilsを実装しています。 IExternalizable ですが、この Java クラスは java.io.Externalizable を実装しておらず、構成されたエクスターナライザーのスコープ内にもありません (granite-config.xml を修正してください) org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object (AMF3Deserializer.java:500) で org.granite.messaging.amf.io.AMF3Deserializer.readObject (AMF3Deserializer.java:130) で org.granite.messaging.amf.io.AMF3Deserializer.readObject (AMF3Deserializer.java:92) で ... 36 以上
環境:
もともとイントラネットで使用するために設計されたクライアント/サーバー Java/Swing アプリケーションがあります (ORM として Hibernate 3 を使用)。また、インターネット経由でも機能しますが、PostgreSQL データベース接続が頻繁に切断され、クライアントの信頼性が低下します (データベース接続の喪失/切断によるランダムなフリーズ)。これを正しく解決することは不可能のようです (手動で再接続するなどの簡単な対策は既に実装されています)。
アプリをインターネット経由でデプロイする必要があります。複雑なロジックは既にサービス クラスにリファクタリングされているため、GUI はほとんど変更せず、サービス クラスをリモートにします。パーシスタンス レイヤーとサービス クラスを Spring バックエンドに移動し、GraniteDS を使用したいと考えています。これは、透過的な遅延読み込みがアプリケーションで頻繁に使用されているため、DTO の使用や初期化子に置き換えるのが非常に難しいためです。
プレーン Java クライアントの例は見つかりませんでした。JavaFX に非常に深く結びついている JavaFX サンプル アプリだけを見つけたので、プレーン Java クライアントに変換するのは非常に難しいようです (Webstart がないため、試してみても Linux では少し問題があります)。構成が含まれています)。