0

サーブレットを使用し、データストアと名前空間 API を使用して Web アプリケーションを作成しました。

これは私のローカルホストではうまく機能しますが、展開されたコピーにデータを保存することはありません。

xml を読み取って BigTable に格納できるように、別のリファレンスとともに、Java ドキュメントを使用してマルチテナンシーに従いました。

クラスを持続可能にします。

`@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Layout {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    private String id;'

データを保存します。

`customerKey = KeyFactory.createKey(Layout.class.getSimpleName(), layout.getId());
            layout.setKey(customerKey);`

今それを永続的にしてください...

`pm = XMLImportPersistenceManagerFactory.get().getPersistenceManager();
            SAXParser saxParser = factory.newSAXParser();
            saxParser.parse(new InputSource(_URL_STRINGS), this);`

それからそれを閉じます...

pm.close()

コードは私のローカルホストで美しく機能します。appengine で確認できるように動作しません。サーブレットは実行されますが、データは保存されません。

URL にアクセスすると、Layouts Created と表示され、ログに 200 が表示されますが、データはありません。これは、サーブレットが実行中であることを示しています。ここに私のアプリがあります: http://layoutimporter.appspot.com/CreateLayout?namespace=boston

いくつかの締めくくりの詳細。クエリ文字列のパラメーターに基づいて名前空間を設定する名前空間フィルターを作成しました。

ウォームアップ サーブレットを実行して PersistenceManagerFactory を初期化し、リクエストのロードを回避しています = 1.

これに関する任意のアイデア。私は自分のリソースを使い果たし、「おっと、あなたの種類が見つかりません...」などに関連するすべての同じスレッド間でスプールしています.

展開されたコピーを削除して、新しい展開されたコピーを開始しようとしました。展開されたコピーを元に戻そうとしました。喜びはありません。名前空間とデータを永続化した後、ローカル コピーでは out.print できますが、リモート コピーでは出力できません。これは本当のスタンパーです!

ありがとう!

..\ウェンディ

4

1 に答える 1

0

私はこの問題を解決しました

1) アプリケーション ライブラリにキャッシュされていた jdo 1.5 ライブラリを削除します (v2 に切り替えましたが、まだそこにありました。それらを削除する方法は、新しいプロジェクトを開始してコードをコピーすることでした。

これにより、ローカルでいくつかの問題が明らかになりました。たとえば、ローカルホストで例外がスローされ、xg トランザクションを有効にするように指示されました...

2) jdoconfig.xml に以下を追加します ...

3) トランザクションを使用しています。

トランザクションは単に Layout 型のオブジェクトのコレクションを保持しているだけなので、解決策を完全には理解していません。私はそれがうまくいくことをうれしく思います。

これで、名前空間に従って、データが実稼働 (リモート) コピーと私のローカルホストに保持されます。

于 2013-04-24T19:55:05.533 に答える