2010-06-29 15 views
3

Je suis actuellement en phase de recherche pour une (très) petite application de base de données. C'est pour un organisme de bienfaisance local qui n'a que 3 ou 4 machines clientes qui exécuteront le système. Cependant, afin d'éloigner la logique étrangère des clients, je penche pour l'utilisation d'une architecture à trois niveaux (il y a sont des données en lecture par constamment et mis à jour le cas échéant, que le client n'a pas besoin de savoir sur)Application de base de données à trois niveaux (non Web) en Java - quelles API/technologies sont appropriées?

-à-dire le client < -> la logique du serveur < -> Base de données

Alors que je suis compétent avec Java lui-même et quelques frameworks/bibliothèques, je ne suis pas particulièrement familier avec les frameworks qui pourraient m'aider ici. Évidemment j'utiliserai JDBC pour la moitié de la base de données, mais la communication entre le client et le serveur est la pierre d'achoppement pour le moment - je ne veux pas vraiment aller à proximité des connexions brutes, par exemple la solution doit exister)

J'ai demandé à quelques développeurs de connaître leur opinion sur les API à utiliser, et même s'ils ont été très utiles, je ne sais toujours pas trop où aller. Jusqu'à présent, j'ai entendu parler de choses RESTful, SOAP, COBRA et un tas d'autres technologies. SOAP est le principal qui a attiré mon attention (car il y a de bons exemples de l'utiliser avec des applications normales plutôt que simplement avec le web) mais je ne sais pas encore où aller - cela ne semble pas particulièrement approprié pour un général but application comme celui-ci (EJB a également surgi, mais j'ai entendu beaucoup de haine visant à ce - est-ce mérité?)

Il me semble que pour trouver le «meilleur outil pour le travail» dont j'ai réellement besoin apprendre chacun dans son intégralité pour les 'obtenir' (ce qui est évidemment irréalisable)

Quelqu'un peut-il me donner des conseils sur la façon de choisir des API comme celles-ci (quand je ne les ai pas déjà utilisées) ou me donner des informations sur quelques-uns communs, ou est-ce vraiment juste un cas d'expérimenter avec beaucoup d'entre eux pour voir lequel correspond le mieux?

Ou peut-être ai-je totalement raté la cible et il y a un cadre qui vise à cette situation exacte sans aucun inconvénient évident?

Merci beaucoup pour votre aide.

EDIT:

complètement oublié de mentionner ce qu'il fait: Il est terriblement complexe - l'organisme de bienfaisance gère un système de transport, il détient les détails des conducteurs, des clients, des dossiers de kilométrage du conducteur, etc. pour la visualisation et édition La seule vraie complexité vient avec les lecteurs, puisque les pilotes peuvent être affectés à des lecteurs (continus) qui pourraient continuer indéfiniment. Mais chaque instance d'un lecteur en cours doit être unique, car ils peuvent être annulés ou modifiés individuellement

La principale raison pour laquelle je suis à la recherche de 3-tiers est parce que d'être un organisme de bienfaisance (avec beaucoup d'anciens utilisateurs d'ordinateurs bénévoles qui ne sont pas terriblement 'savvy') Je pourrais bien mettre à jour l'interface assez fréquemment pour aplanir les bugs et les bits qui ne sont pas très clairs pour les utilisateurs novices. Donc, mon plan est d'obtenir le back-end entre le serveur et DB absolument « pare-balles » d'abord, puis versez tout mon accent sur l'interface utilisateur afin que je puisse continuer à se développer et itérer sans se soucier du back-end (aussi que je serai le développement de pièces à distance, en concentrant les mises à jour côté client est légèrement plus simple)

Tous ces attributs crient probablement 'faire un système basé sur le web' - le problème c'est qu'ils sont après toutes sortes d'intégration difficile avec certaines applications ils fonctionnent déjà, mais je ne suis pas sûr de pouvoir le faire (correctement) avec une application web.

+0

Peut-être pourriez-vous expliquer à quel point votre application est complexe? –

+0

@Romain - Oui, vous avez absolument raison. Question mise à jour en conséquence, acclamations –

Répondre

2

Pour le serveur lui-même, vous aurez besoin d'un serveur JavaEE.

Les implémentations courantes sont ici GlassFish (l'implémentation de référence) et Apache Tomcat ... en supposant que vous n'avez besoin de rien de plus avancé qu'un conteneur Servlet. Il y a de fortes chances que vous ne le fassiez pas si vous n'utilisez que des services Web.

Pour le client, je suppose que vous allez avoir une application graphique, probablement qui utilise Swing ou SWF. Vous pouvez également choisir de créer une application Web, car vous allez déjà avoir un serveur Web impliqué.

Pour les communications client à serveur, vous pouvez utiliser une implémentation JAX-WS (services Web SOAP) ou JAX-RS (services RESTful).

Les implémentations de JAX-WS incluent le Metro de Sun (qui est expédié sous la forme part of Java 6 SE) ou Apache CXF. Les implémentations JAX-RS comprennent Jersey et Apache CXF. En ce qui concerne la couche de base de données, JDBC n'est pas votre seul choix. Java a également le Java Persistence API (JPA, actuellement à la version 2.0). JPA est généralement utilisé dans les applications J2EE (applications Web spécifiquement) pour simplifier la couche Base de données. Les implémentations courantes sont EclipseLink JPA (obsolète Oracle TopLink) et HibernateAnnotations. Tous ces éléments sont basés sur diverses normes qui composent JavaEE: Servlet 2.5, JAX-WS 2.0, JAX-RS 1.1 et JPA 2.0.

+0

Merci pour tous les liens + informations - donné un peu plus de clarté sur la façon dont toutes ces pièces de technologie. emboîter. Mais le seul problème qui reste est en quelque sorte le problème que je devais commencer - comment puis-je choisir entre ces combinaisons de technologie? Est-ce un goût purement personnel sur ce que vous aimez travailler, ou excelle-t-il sur des choses spécifiques? Par exemple, lequel choisir parmi JAXWS ou JAXRS? –

+0

'JAX-WS' est plus largement supporté que' JAX-RS', si cela aide ... il est même maintenant dans le JRE standard, donc vous n'avez pas besoin d'inclure une bibliothèque séparée pour cela (bien que vous puissiez choisir de côté serveur, comme j'ai entendu dire que CXF est plus facile à gérer). – Powerlord

1

EJB également sauté vers le haut mais j'ai entendu beaucoup de haine visant à ce - est-ce mérité?

Il était pleinement mérité avec les versions 1 et 2 de la spécification EJB. Mais EJB v3 représente une énorme simplification qui les rend tout à fait agréables à utiliser. Je peux en toute bonne conscience recommander d'utiliser des beans entité au lieu de JDBC manuel. En ce qui concerne le protocole de communication, exposer des EJB en tant que services REST ou SOAP est ridiculement simple dans la nouvelle spécification EJB 3.1 - il suffit d'ajouter quelques annotations et vous êtes prêt!

+0

Je suis d'accord avec EJB 3.x étant beaucoup plus simple, je me demande juste la nécessité d'un niveau intermédiaire dans son cas. Bien sûr, avec un niveau intermédiaire, vous introduisez un autre point d'administration et un autre point d'échec. –