Accueil > Intranet Michel Buffa > Cours web 2.0 2009 > Google Web Toolkit > EJB3 et GWT, petit exemple avec Netbeans

EJB3 et GWT, petit exemple avec Netbeans

De $1

Introduction

Voici un tutorial simple pour créer un projet utilisant GoogleWebToolkit & EJB3

Utilise : GWT 1.4.60, Netbeans 6.1, glassfish v2

Créer un projet de type entreprise application

image201.png

Lui donner un nom, garder les options par défaut, puis cliquer sur finish

image202.png

Ajouter un entity bean au projet

Clic droit sur le projet EJB (se termine par -ejb), New, Entity Class.
Specifier un nom de classe et de package, ne pas oublier de cliquer ensuite sur create a persistance unit. Ici, on va créer une entité "Student"... 

image203.png

Pour ce test, dans Datasource, choisir jdbc/sample, puis valider.

image204.png

Dans le code source generé, rajouté deux attributs String : firstName, lastName, puis les getters/setters appropriés.

Ajouter un session bean au projet

  • Clic droit sur le projet EJB (se termine par -ejb), New, Session Bean.
  • Donner un nom, choisir un package, laisser les autres options par défaut, valider.
  • Une classe et une interface sont generées.

image205.png

effectuer un clic droit dans le code source de la classe, et choisir persistence, use entity manager, rajouter ensuite une methode addStudent :

public Student addStudent(String firstName, String lastName) {
        Student s = new Student();
        s.setFirstName(firstName);
        s.setLastName(lastName);

        persist(s);

        return s;
    }

Dans le code de l'interface, ajouter : 

public Student addStudent(String firstName, String lastName);

 (tout cela peut etre generé par netbeans automatiquement, pour ca, click droit dans le code source du sessionbean, EJB Methods, add operation...

la partie EJB est terminée !

Configurer le projet War pour utiliser GWT

Effectuer un clic droit sur le projet, puis properties ; choisir frameworks, add, et ajouter Google Web Toolkit :
image207.png

specifier le chemin vers le dossier contenant gwt, choisir un nom de package, valider...

image208.png

Réouvrir les propriétés du projet, pour vérifier que les librairies ont bien été rajoutées : si c'est comme ceci, alors c'est fini ...

Remarque : REST n'est pas utile ici, mais netbeans le rajoute pafois? Notez que plusieurs fichiers sont genérés, qu'on survolera plus tard..

Créer un service RPC GWT

Ce service va permettre à l'application cliente gwt (i.e. le site affiché dans le browser) d'utiliser des fonctions côté serveur

Faites click droit sur le projet web, new, gwt rpc service :

image209.png

donner un nom, laisser les autres propriétés telles quelles, cliquer sur finish. Plusieurs classes sont générées, choisir GWTServiceImpl :

image2010.png

Faire un click droit dans le code source, insert code, call enterprise bean, choisir le session bean développé plus haut, puis valider.

=> notez le :

@EJB
    private StudentManagerLocal studentManagerBean;

...qui a été rajouté

Remplacer la methode myMethod par :

public String addStudent(String firstName, String lastName) {

        Student s = studentManagerBean.addStudent(firstName, lastName);

        return "A new student has been added: #" + s.getId() + " - " + s.getFirstName() + " " + s.getLastName();
    }

Cette méthode sera appelée par le client, ajoutera un étudiant dans la base et retournera un message.

Faire les bonnes modifications dans GWTService.java :

public String addStudent(String firstName, String lastName);

et dans GWTServiceAsync.java :

public void addStudent(String firstName, String lastName, AsyncCallback callback);

le service est prêt...

Interface utilisateur utilisant le service et les EJBs

Lors de l'ajout de GWTau projet ejb, plusieurs fichiers ont été créés, dont "gwtEntryPoint.java". Il s'agit du "point d'entrée de l'application web"... on va le modifier légèrement...

Mais auparavant, nous allons modifier le fichier GWTServiceUsageExample.java et modifier les attributs et le constructeur pour parvenir à ça :

public class GWTServiceUsageExample extends VerticalPanel {
    private Label lblServerReply = new Label();
    private TextBox txtFirstName = new TextBox();
    private TextBox txtLastName = new TextBox();
    private Button btnSend = new Button("Send to server");

    public GWTServiceUsageExample() {
        add(new Label("FirstName & LastName: "));
        add(txtFirstName);  // modifie
        add(txtLastName); // rajoute
        add(btnSend);
        add(lblServerReply);

        // Create an asynchronous callback to handle the result.
        final AsyncCallback callback = new AsyncCallback() {
            public void onSuccess(Object result) {
                lblServerReply.setText((String)result);
            }

            public void onFailure(Throwable caught) {
                lblServerReply.setText("Communication failed");
            }
        };

        // Listen for the button clicks
        btnSend.addClickListener(new ClickListener(){
            public void onClick(Widget w) {

                getService().myMethod(txtFirstName.getText(), txtLastName.getText(), callback);
            }
        });
    }

    /* aucune modification ici */
    public static GWTServiceAsync getService(){
        // Create the client proxy. Note that although you are creating the
        // service interface proper, you cast the result to the asynchronous
        // version of
        // the interface. The cast is always safe because the generated proxy
        // implements the asynchronous interface automatically.
        GWTServiceAsync service = (GWTServiceAsync) GWT.create(GWTService.class);
        // Specify the URL at which our service implementation is running.
        // Note that the target URL must reside on the same domain and port from
        // which the host page was served.
        //
        ServiceDefTarget endpoint = (ServiceDefTarget) service;
        String moduleRelativeURL = GWT.getModuleBaseURL() + "gwtservice";
        endpoint.setServiceEntryPoint(moduleRelativeURL);
        return service;
    }
}

Ensuite, modifions gwtEntryPoint et remplaçons la méthode onModuleLoad par celle-ci :

public void onModuleLoad() {


        RootPanel.get().add(new GWTServiceUsageExample());
    }

 Iil ne reste plus qu'à... 

Tester et déployer

Faites click droit sur le projet, puis run, une fenetre s'ouvre, suivre le lien...arrivée sur un formulaire, remplir un prenom puis un nom, et valider, on devrait obtenir ceci :
image2011.png

si c'est le cas, c'est que ça s'est bien passé...

Vérification

Retournez sur netbeans, choisissez l'onglet Services, puis Databases, jdbc... /sample, Tables, chercher la table Student, click droit dessus, puis view data... L'entrée ajoutée devrait être listée

Mots clés:
 
Images (10)
Voir 1 - 6 sur 10 images | Voir tout
Aucune description
image203....  Actions
Aucune description
image202....  Actions
Aucune description
image201....  Actions
Aucune description
image2011...  Actions
Aucune description
image2010...  Actions
Aucune description
image209....  Actions
Commentaires (0)
Vous devez être connecté pour poster un commentaire.