問題タブ [infinispan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jboss - Web アプリが Infinispan クラスターに参加しない
私は最近、Infinispan をいじっていますが、これまで Infinispan の経験はありませんでした。
私は興味深い問題に出くわしました.誰かがそれに光を当てることができるのではないかと思いました.
Infinispan jar をバンドルするスタンドアロン Java アプリケーション (GridGrabber.jar) があり、グリッドからアイテムを追加/削除およびリストするクラスがあります。アプリケーション内で、次のように作成CacheManager
します。
アプリケーションはコマンド ラインで実行され、java -jar GridGrabber.jar
正常に動作します。ターミナルで 2 つのインスタンスを起動すると、両方がクラスター化され、両方のノードからグリッドの内容を確認できます。
さて、ここが興味深いところです。また、AS7 にデプロイされた Web アプリケーション (サーブレット + JSP) も持っています。グリッドに入るデータのリアルタイム更新 Web ページを提供することが目的です。サーブレットは基本的に GridGrabber と同じコードを呼び出し、同じ cluster.xml を使用します。
起動すると、すべてが正常に展開されますが、何らかの理由で、グリッド内の他のノードが選択されませんが、両方が同じマシン上で実行されており、お互いに問題はありません。展開メッセージは次のとおりです。
AS7 展開でグリッド内の他のノードが表示されない理由があるかどうかは誰にもわかりませんか? それらはすべて同じクラスター名 (demoCluster) を探しており、すべて同じ cluster.xml を使用しているため、機能するはずです。cluster.xml は次のとおりです。
展開メッセージから気づいたことの 1 つは、Web アプリが ipv4 アドレスを使用しているように見え、jar が JGroups で ipv6 アドレスを使用しているように見えることですが、これが根本的な原因であるかどうかはわかりません。どんな助けでも感謝します。
postgresql - PSQLException:現在のトランザクションは中止され、トランザクションブロックが終了するまでコマンドは無視されます
JBoss 7.1.1 Finalのserver.logファイルに次の(切り捨てられた)スタックトレースが表示されます。
Postgresログファイルを調べると、次のステートメントが明らかになります。
JBoss7.1.1Finalに同梱されているInfinispanを使用しています。これは5.1.2.Finalです。
だから、これは私が起こっていると思うことです:
- Infinispanは、 ;
SELECT count(*)...
にレコードがあるかどうかを確認するために、ステートメントを実行しようとします。ISPN_MIXED_BINARY_TABLE_configCache
- Postgresは、何らかの理由で、このステートメントを好みません。
- Infinispanはこれを無視し、
CREATE TABLE
ステートメントを先に進めます。 - Postgresは、Infinispanがロールバックに失敗したのと同じトランザクションであるとまだ考えているため、このトランザクションは最初の
SELECT count(*)...
ステートメントから実行されます。
このエラーは何を意味し、それを回避する方法はありますか?
java - Infinispan で JTA トランザクションを使用するには?
Infinispanのドキュメントには、楽観的および悲観的なロック スキームについて多くのことが書かれていますが、トランザクションの使用方法については詳しく説明されていません。おそらくJavaのデフォルトAPIを使っているので知っていると思われますが、そうであればJTAの利用パターンについても調べていませんでした。
楽観的なトランザクションを使用する場合、データへの同時アクセスに応じて、コミットまたはロールバックされると想定しています。ロールバックされた場合、トランザクションをリプレイできるようになり、トランザクションが完了することを期待しています。他の同時アクセスの前に成功します。私は TransactionManager に begin()、commit()、rollback() メソッドを持っています。この情報を使用して、次のコードを作成しました。
このコードは正しいですか? おそらく一般的な操作を実行するには複雑すぎるように思われるため、何か間違ったことをしたのではないかと思いCacheException
ますcache.put()
... もしそうなら、私は明示的に呼び出す必要がありますtm.rollback()
か? 句tm.commit()
の中で呼び出したらどうなりますか? finally
いつスローしRollbackException
ますか?
さらに重要なことは、トランザクションのリプレイを実行する慣用句/デフォルトの方法はありますか?
spring - 2次キャッシュとしてのSpring+Hibernate + Infinispan
spring+tomcatベースのアプリでHibernateの2次キャッシュとしてinfinispanを設定しようとしました。
そして、プロパティは次のとおりです。
例外が発生します:
トランザクションマネージャールックアップを構成するにはどうすればよいですか?
spring - トランザクションの二次キャッシュと生成された識別子
私は次のスタックを持っています:
- 休止状態 3.6.9.Final
- 春 3.1.1
- アトミコス 3.7.1
- インフィニスパン 4.2.1.FINAL
- MySQL
RuntimeException がスローされたときに、現在のトランザクションがデータベースだけでなくトランザクション 2LC でもロールバックされることを確認するために、いくつかのテストを書いています。
誰かが説明してくれることを望んでいた奇妙な結果がいくつか見つかりました。
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL) で注釈が付けられた @Entity を String @Id とともに使用すると、ID を割り当ててエンティティを保存すると、期待どおりの結果が得られます。
- 例外がスローされず、トランザクションがコミットされ、2LC にエンティティが含まれている場合、次を使用してこれを確認しました。
sessionFactory.getCache().containsEntity(MyEntity.class, myIdentifier)
- 例外がスローされた場合、データベースにも 2LC にもエンティティが含まれていません。
@Entity
ただし、示されているように、生成された@Id
(MySQL 自動インクリメント long プロパティ)を持つを使用してこれらのテストを繰り返すと:
スローされた例外に関係なく、エンティティが 2LC に配置されることはありません。
私はいくつかのデバッグを行いましたAbstractSaveEventListener#performSaveOrReplicate
. 割り当てられた@Id
useIdentityColumn は false であるため、EntityInsertAction をインスタンス化して実行し、新しいエンティティを 2LC に配置します。
逆に、@Id
MySQL によって生成された場合、useIdentityColumn が true であることがわかり、EntityIdentityInsertAction をインスタンス化して実行します。これには、次のように 2LC に関するコメント アウトされたコードが含まれています。
これには何か理由がありますか?キャッシュの挿入は別の場所で行う必要がありますか? これはバグですか?
誰かがこの違いとこれがどのように機能するかについて何か光を当てることができれば、私は非常に感謝しています.
この質問を Hibernate フォーラムに投稿しましたが、あまり興味がありませんでした。
infinispan - Infinispan-キャッシュが構成ファイル(XML)で定義されているかどうかを知る方法は?
キャッシュを動的に作成/削除できるInfinispanの組み込みキャッシュアーキテクチャを使用しています。
ユーザーが存在しないキャッシュを取得しようとすると、例外を取得する必要がありますが、EmbeddedCacheManager
APIはこれを支援していません。このAPIは2つのオプションを提供します
get(String name, true)
-取得して作成しますget(String name, false)
取得するが作成しない
私のアプローチ?ユーザーが単純にキャッシュを取得する場合はget(String name, false)
、を使用し、ユーザーがキャッシュを作成する場合はを使用しますget(String name, true)
。ここまでは順調ですね。
ここで問題が発生します。一部のキャッシュはアプリケーションによって作成されませんが、XMLで定義されます。したがって、ユーザーがこれらの「組み込み」キャッシュの1つを使用get(String name, false)
して取得しても、キャッシュは取得されません。
XMLで定義されたキャッシュを識別できれば、これらを解決できます。
注:現時点では、XMLで定義されているキャッシュの名前の前に付けていますが、これはコードの抽象化にとって醜いものであり、非常に面倒になっています。
maven - Maven + Surefire / Failsafe --forkMode = "perthread"が機能していません...回避策はありますか?
組み込みInfinispanデータグリッドクラスターに基づくアプリケーションを開発しています。アプリケーションのターゲット環境では、データグリッドの各メンバーが独立したJVMで実行されjgroup
、クラスターの使用が形成されます(これは実際にはInfinispanによって行われます)。
maven-surefire-plugin
この構成で作業していた(またはmaven-failsafe-plugin
)このデータグリッドに対して自動テストを実行するには、次のようにします。
この構成では、テストケースクラスごとにフォークを作成する必要があるため(4つの並列プロセスを使用)、4つのテストクラスを作成します。各テストクラスは、1つのクラスターメンバーをシミュレートします。各テストケースクラス内では、次のようなTestNGのおかげで、テストメソッドを並行して実行する複数のスレッドがあります。
問題は、maven-surefire-plugin
forkMode="perthread"
とthreadCount=4
にバグがあることです。クラスごとに1つのフォークを作成するのではなく、同じクラスのフォークを数回作成します。したがって、私のシナリオでは、テストケースの1つを取り、それを4回並行して実行します!!!
注:ここでjiraのバグを確認してください。投票してください!!!!
誰かがこれの回避策を知っていますか?私たちはを使っていくつかの努力をしてant
いますが、非常に厄介になっています。
caching - infinispan と Jboss キャッシュの比較
私はネイティブではなく、英語が苦手です。ご了承ください。
Infinispan と JBoss Cache の比較を行ってきました。どちらの製品もオープンソースです。JBoss Cache の Web サイトの上部に、 'Project In Maintenance Mode'という文があります。製品の成長は行われませんが、安定性に基づいた変更が行われることが認識されています。
さらに、私は Infinispan が JBoss Cache の後継者であることを認識しています。
ただし、パフォーマンスや安定性に関して、Infinispan が JBoss Cache よりも優れているという点は、私にはわかりません。ホームページから調べてもわからないので教えてもらってもいいですか?
infinispan - Infinispan クラスターと hotrod クライアントが通信しない
いくつかのノードを持つレプリケーション クラスターがあります。それらは相互に自由に通信できます。クラスターに参加している Hotrod サーバーもあります (他のノードによって認識されていることがわかります)。しかし、Hotrod クライアントをサーバーに接続し、キャッシュに何かを入れようとすると、次の例外が発生します。
ホットロッド クライアント:
org.infinispan.client.hotrod.exceptions.HotRodClientException:Request for message id[4] returned server error (status=0x85): org.infinispan.CacheException: Problems invoking command.
ホットロッド サーバー:
Caused by: org.infinispan.CacheException: Type of data read is unknown. Id=-2147482548 is not amongst known reader indexes.
キャッシュストアを持つノード:
WARN: Problems unmarshalling remote command from byte buffer org.infinispan.CacheException: Type of data read is unknown. Id=-2147482548 is not amongst known reader indexes.
また、Hotrod クライアントは、他のノードによって提供された変更を認識しません。クラスター内に hotrod サーバー以外のノードがない場合 - すべてが機能します。他のノード (たとえば、CacheListener が登録されているノード) が使用可能な場合、前述の例外が発生します。
どこでも Infinispan 5.1.5.Final と JGroups 3.0.10.Final を使用しています。Win7 64 ビット、Java 6_0_32 32 ビット。すべてのノードが 1 台のマシンで動作し、クラスターは TCP トランスポート スタック上に構築されます。すべてのノードは Java SE アプリケーションです。infinispan フォーラム (https://community.jboss.org/thread/199539) にも同様の投稿がありましたが、それは古いバージョンのものです (この場合、更新が役に立ちました)。
誰かが同様の問題を抱えていましたか、または問題の原因をどこで探すべきか考えていますか?
hibernate - HibernateInfinispanエンティティ/クエリキャッシング
私はこの問題で数日間壁に頭をぶつけてきました。
Infinispanを使用して、Hibernateの第2レベルのキャッシュを実装しようとしています。アプリケーションはJBossAS6で実行されており、JTAトランザクションを使用しています。
私たちのpersistence.xmlには次のものがあります:
ここで定義されているように:
私たちの理解では、これは次のことを行うために必要な種類のキャッシュです。
ユースケース1: 参照データを保持するデータベースにレコードがあります。このデータは長期間変更されません(私たちは願っています:))。
これらのレコードは多くのクエリが実行される可能性があるため、キャッシュしたいと思います。また、ユーザーがこのデータをクエリするときに、キャッシュする必要があるため、DBに移動する必要はありません。
この場合、キャッシュタイプはクエリキャッシュですか、それともエンティティキャッシュですか?クエリは常に同じであるため、queクエリは常に同じ結果を返すことになっているため、クエリキャッシュであると理解しています。
私の質問:
ユースケース2: ユーザーがDBから特定のレコードを取得し、それを更新する場合があります。このエンティティ(またはエンティティのリスト)をユーザーのセッション(ログインセッション)キャッシュに保存する必要があるため、ユーザーがクライアントでこのエンティティを更新した場合、更新前に選択する必要はありません。この場合、特定のエンティティを保存しているので、エンティティのキャッシュと見なされますよね?保存したい場合
そのために私たちは使用しています:
私はこれらの仮定を正しく行っていますか?そうでない場合、ここでのアプローチは何ですか?私はこれから大きな混乱を引き起こしていると思います。