2013-05-14 1 views
2

J'ai un problème de conception concernant la connexion de l'application Desktop Java qui doit lire et écrire à partir de la base de données. Laquelle des deux approches est la meilleure?Connexion de l'application de bureau au serveur d'applications et à la base de données

  1. Connectez l'application Java Desktop directement à la base de données à l'aide du pilote JDBC sur le réseau. C'est une très mauvaise idée car si la sécurité mais il sera très facile d'écrire des requêtes SQL directement et de les exécuter.

  2. Connectez l'application Java Desktop au serveur d'applications qui sera connecté à la base de données. Dans ce cas, comment vais-je faire les requêtes SQL? J'ai besoin d'une sorte de tunnel qui sera utilisé pour transférer les requêtes et retourner la sortie. Cette approche est très sécurisée mais le temps de réponse sera important.

Pouvez-vous me dire s'il existe d'autres solutions?

Répondre

3

La meilleure option consiste à utiliser EJB Server.

Créez une EJB Inteface avec toutes les méthodes crud (enregistrer, supprimer, mettre à jour, etc.).

Créez une implémentation EJB sur le serveur (Jboss/GlassFish). Une fois que le serveur est opérationnel, copiez simplement le fichier jar d'interface dans votre application (java Swing App) et en utilisant JNDI vous pouvez appeler toutes les opérations crud.

~ J'espère que cela aide.

+0

Je suis d'accord. Dans certains cas, cela pourrait être un peu surdimensionné, mais en général c'est aussi une bonne option. – desperateCoder

+0

Oui, je suis d'accord avec vous @desperateCoder mais sa solution assez robuste. – Makky

+0

Salut Makky, je suis aussi très interessé par ce sujet. J'ai vu que vous avez dit: "Une fois que le serveur est opérationnel, il suffit de copier le fichier Interface Jar dans votre application (Java Swing App) et en utilisant JNDI, vous pouvez appeler toutes les opérations crud." mais je suis aussi abit confus par exemple dans le cas où mon client d'application fonctionne sur une autre machine avec mon serveur d'applications sur lequel s'exécute l'implémentation d'EJB, comment peuvent-ils communiquer? Si elles sont dans la même structure de projet alors nous pouvons facilement copier le fichier jar de l'interface mais comment cela si elles sont dans un environnement différent? – Sonn

1

Une autre option consiste à héberger un service Web sur le serveur d'applications avec toutes les opérations CRUD. Cela le rend plus portable au sens des implémentations client.

1

Je suis entièrement d'accord, une base de données publique est difficile à pirater! mais pourquoi doit-il être un serveur d'application? un composant serveur léger de votre application pourrait aussi faire l'affaire? vous pouvez même envoyer des objets sur le réseau (ObjectOutputStream)

J'ai déjà fait la même chose que je l'ai décrit, fonctionne horriblement bien, et est super simple, puisque j'utilise la réflexion en combinaison avec des génériques pour exécuter la bonne requête.

2

Il existe de nombreuses approches pour résoudre ce problème. Il n'est pas possible de recommander l'un par rapport à l'autre sans en savoir plus sur votre application et ses exigences.

Des approches qui viennent à l'esprit sont par exemple. EJB, SOAP, REST, JDBC/JPA/Hibernate, RMI.

1

Votre serveur d'applications expose DataSources qui peut vous fournir un objet Connection (plus d'informations: http://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html). La connexion entre votre application et la base de données sera directe, donc il n'y a pas d'impact sur les performances.

+0

Pourriez-vous, s'il vous plaît, me donner plus d'informations sur comment je peux le faire en utilisant des déclarations préparées? –

1

La responsabilité de l'exécution de requêtes SQL ne devrait être confiée qu'au serveur d'application. Toute l'intelligence devrait être transférée au serveur d'application. Comme décrit dans les réponses précédentes, cela peut être fait en utilisant EJB, web services (les performances devraient être un peu plus faibles mais de cette façon vous pouvez interagir avec n'importe quel autre système, même avec le client Web) et RMI.Veuillez également considérer les solutions données par Spring.

Questions connexes