EJB3 et GWT, petit exemple avec Netbeans

De $1

Version de 06:27, 25 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

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

image@201.png

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

image@202.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"... 

image@203.png

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

image@204.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.
image@205.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 :


image@207.png

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


image@208.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 ...


[REST n'est pas utile ici, mais netbeans le rajoute pafois?] [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

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



image@209.png

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

GWTServiceImpl

:


image@2010.png

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



=> noter 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

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 ionté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 oparavant, nous allons modifier le fichier GWTServiceUsageExample.java etmodifier 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

Effectuez un clic droit sur le projet GWTEJB (et non GWTEJB-ejb ou GWTEJB-war), puis undeploy/deploy...

Vous pouvez aussi faire 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 :


image@2011.png

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



Vérification

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