JVM1に最初にメモリ内キャッシュをチェックさせてから、アイテムがメモリ内キャッシュに存在しない場合はデータベースキャッシュをチェックさせることはできませんか?
ただし、存在する特定のタイプのすべてのアイテムを一覧表示する必要があり、データベースにアクセスしたくない場合。次に、JVM1がデータベースに新しいアイテムがあることを知るために、1)JVM2がJVM1にネットワークメッセージを送信して、データベースに新しいエントリがあることを通知する必要があると思います。または2)新しいデータが挿入されたときに起動し、ネットワークメッセージをJVM1に送信するデータベーストリガーが存在する可能性があります。(しかし、データベースにアプリケーションサーバーにネットワークメッセージを送信させることは、私が思うにかなり奇妙に感じます。)—しかし、これらのアプローチはかなり複雑に見えると思います。
データベースに最近挿入されたアイテムのIDをログに記録する、ある種のnew-item-idsテーブルを検討しましたか?データベーストリガーによって、またはデータベースに書き込むときにJVM1と2によって更新される可能性があります。次に、JVM1は、この単一のテーブルをおそらく1秒に1回ポーリングして、新しいIDのリストを取得するだけで済み、データベースから新しいアイテムをロードできます。
最後に、分散キャッシュを検討しましたか?そのため、JVM1と2の両方が同じキャッシュを共有し、JVM1と2は、アイテムをデータベースに挿入するときに、このキャッシュにアイテムを書き込みます。(このアプローチは、JVM1と2の間でネットワークメッセージを送信するのと多少似ていますが、分散キャッシュシステムはメッセージ自体を送信するため、新しいコードを記述する必要はありませんでした)