2017-09-30 1 views
0

J'ai une application d'intégration backend java (pas d'interface utilisateur) basée sur le printemps/jpa. maintenant je suis en train de créer une application web UI (aussi basée sur spring/jpa) pour supporter les requêtes sur l'application backend. Donc, je vais avoir deux applications (jvms) en utilisant le même DB. Ma question est - est-ce que les changements dans la base de données de l'application d'intégration dorsale seront répercutés sur les entités jpa de l'application d'interface utilisateur? ou je dois forcer mes entités à toujours aller à la DB pour être à jour?Entités jpa sur différentes applications

+0

Oui, vous supposez correctement, le problème existe (plus ou moins). AFAIK partie portable de JPA n'a pas «événements» (Eclipselink peut-être, et totalement pas portable dans certains RBMS). –

+0

Totalement orthodoxe, dans le style JEE, est de fournir des données et des messages via le serveur applicatrion (peut-être une machine que le web, peut-être pas). 'grand défi' –

Répondre

1

Il n'y a pas de synchronisation magique des changements entre les différentes JVM. L'application d'interface utilisateur ne voit que les modifications qui ont été conservées dans la base de données par l'application principale. Donc, en bref, oui, vous devrez forcer la persistance DB/recherche pour vos entités.

Notez que vous pouvez également rencontrer des problèmes de mise en cache (par exemple, Hibernate effectue une mise en cache automatique des entités par défaut). Si l'application d'interface utilisateur a mis en cache une entité, elle ne verra pas les modifications apportées par l'application principale, même si elle persiste dans la base de données, jusqu'à ce que l'application d'interface utilisateur effectue également une nouvelle requête sur la base de données. Par conséquent, je vous conseillerais de bien tester ceci et d'ajuster votre configuration si nécessaire.

+0

donc je suppose entityManager.refresh (entité) partout dans mon appli de l'interface utilisateur avant la requête réelle, ne fera pas? – user7916020

+0

Toute initiative de 'refresh' doit être lancée au niveau le plus élevé (GUI), et les couches inférieures comme conséquence –

+0

En utilisant entityManager.refresh est une option de contourner les problèmes de mise en cache, oui.Notez que vous utilisez généralement l'appel de rafraîchissement * après * votre requête de base de données, juste avant de faire quelque chose avec l'entité – brain99