2015-08-16 6 views
0

J'ai une application Web j2ee déployée sur glassfish 4.0.1 que je veux utiliser avec une base de données Windows Azure.Base de données Microsoft Azure et Glassfish

L'application utilise JPA et eclipseLink.

Si je le ping de l'interface glassfish il fonctionne, donc les propriétés que je fournis sont ok.

Si l'application utilise la base de données immédiatement après le démarrage du serveur, tout va bien (il peut récupérer des données/stockage)

Lorsque l'application tente d'utiliser la base de données après avoir été inactif pendant un certain temps, je reçois une exception disant que la connexion est fermée.

Si je vidange la connexion (de l'administrateur glassfish), il recommence à fonctionner, jusqu'à ce qu'il soit inactif pendant un certain temps. Donc, fondamentalement, tant qu'il exécute des opérations de base de données tout fonctionne bien, mais s'il n'y a pas d'opérations de base de données pendant un moment, l'opération db suivante entraînera l'exception.

J'ai trouvé la solution mais j'ai du mal à l'implémenter. quelqu'un peut-il m'aider s'il vous plaît?

Voici le lien de la solution http://www.robblackwell.org.uk/2010/12/02/java-jdbc-to-sqlazure-connection-drop-workaround.html

ou ici https://msdn.microsoft.com/en-us/library/hh290696(v=sql.110).aspx

+0

Installez-vous glassfish sur Azure VM ou localhost? Est-ce Windows ou Linux? –

+0

@ PeterPan-MSFT c'est un Windows Server 2008R, j'ai installé glassfish sur localhost. –

Répondre

0

Par mon expérience, la façon alternative à résoudre ce problème est que vous pouvez créer un écouteur crontab en utilisant framework Java annexe " Cron4j "ou" Quartz "sur votre application Web Java. L'écouteur crontab envoie une requête simple (comme "select id from t_XXX limit 1") avec un intervalle inférieur à une minute pour maintenir la connexion à la base de données active.


Appuyez sur "Windows + R" et exécutez "regedit". Vérifiez les clés de registre "KeepAliveTime", "KeepAliveInterval" et "TcpMaxDataRetransmission" si elles existent dans le chemin d'accès de l'arborescence du Registre "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Paramètres".

S'il n'existe pas dans le chemin, vous devez ouvrir la fenêtre cmd en tant qu'administrateur et copier les commandes ci-dessous dans la fenêtre cmd pour les exécuter.

REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveTime /t REG_DWORD /d 30000 
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v KeepAliveInterval /t REG_DWORD /d 1000 
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v TcpMaxDataRetransmission /t REG_DWORD /d 10 

Ensuite, vous pouvez les trouver dans regedit et tester le problème.

Cordialement.

+0

Essayez d'ajouter les clés de registre et de tester le problème. Cordialement. –

+0

Merci @ Peter Pan MSFT, j'ai changé le registre et il semble fonctionner maintenant. Juste une question de plus, combien de temps la connexion est-elle en vie? 30 minutes ? –

+0

@EvanilsonAbril, Comme vu à partir du document, la connexion inactive de plus de 30 minutes sera terminée. –