Question

J'ai une base de données Apache Derby en cours d'exécution (en mode réseau) dans une application java swing, je me connecte via des appels JDBC directs via une application client java.

Tout cela est très bon et fonctionne très bien, mais je sais qu’il est nécessaire de mettre en œuvre des licences simultanées pour cette application client / serveur.

Idéalement, un utilisateur disposant d'une licence utilisateur unique doit pouvoir exécuter une seule application client sur un ordinateur portable, ainsi qu'une deuxième application client s'exécutant sur un ordinateur de bureau, et pouvoir se connecter au serveur à partir des deux.

Je n'ai pas le luxe d'avoir un serveur Web, alors je me demande si ma seule option est d'utiliser l'option "maxthreads". propriété d’exécution de Derby et oblige essentiellement l’utilisateur à se déconnecter de son ordinateur portable, s’il veut utiliser l’application depuis son bureau.

Si je laisse la propriété timeslice à 0, un appel à getConnection timeout apparaît pour que je puisse afficher un message à l'intention de l'utilisateur lui indiquant qu'il doit déconnecter l'une des applications clientes.

Les threads de connexion sont-ils un moyen fiable de le faire?

Me manque-t-il une autre solution?

Était-ce utile?

La solution

Si je comprends bien la question, vous disposez de licences verrouillées par l'utilisateur et souhaitez empêcher un utilisateur unique possédant une licence unique d'accéder au " serveur " à partir de plusieurs instances du client à la fois. Votre " serveur " est simplement une base de données et vous ne voulez pas créer une couche d'application côté serveur.

Je n'aime pas trop votre suggestion initiale d'utiliser le pool de threads et le délai de connexion pour appliquer des contraintes de licence, car ces deux éléments sont utilisés à d'autres fins.

Au lieu de cela, je pourrais envisager d'obliger l'utilisateur à entrer son numéro de licence dans l'interface graphique la première fois qu'il l'utilise. Cela peut être enregistré dans le répertoire de base de l'utilisateur pour les démarrages suivants de l'interface graphique. La même chose se produirait s’ils lancent l’interface graphique pour la première fois sur une autre machine. Ensuite, pour chaque transaction effectuée par l’interface graphique avec la base de données, celle-ci met d’abord à jour un tableau de licences ou similaire pour indiquer que la licence de l’utilisateur participe actuellement à une transaction. Chaque fois que la même licence est déjà présente dans la table, marquée comme active ou similaire, l’interface graphique rejette la transaction et affiche à l’utilisateur sa licence est déjà utilisée par un autre client.

Si vous aimez cette idée, réfléchissez-y plus loin que moi. Je vois quelques erreurs dans la logique qui bloque les utilisateurs en permanence :-)

Autres conseils

Il semble que vous souhaitiez effectuer l'action de "connexion". et " déconnexion " de la base de données explicite, alors vous voudrez peut-être une table spéciale dans la base de données dans laquelle votre application écrit un enregistrement lorsque vous vous connectez ou vous déconnectez.

Ensuite, votre application peut interroger cette table pour savoir si d'autres copies de l'application sont actuellement connectées.

Vous pouvez éventuellement inclure des champs supplémentaires dans le tableau pour suivre la date / l'heure de la connexion / déconnexion, le nom d'hôte et l'adresse IP du client ayant effectué la connexion / déconnexion, etc.

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top