dimanche 28 novembre 2010

Application Web JPA avec Netbeans : Easy

JPA(Java Persistent API)

Nous allons dans ce tutoriel voir comment facilement créer vos applications web sous netbeans en utilisant les entités JPA.
Dans ce tutoriel nous utiliserons une base de données MySQL n’ayant qu’une seule table dont voici le code :
CREATE TABLE `groupes` (
`id` tinyint(4) NOT NULL auto_increment,
`nom` varchar(30) NOT NULL default '',
`mail` varchar(30) NOT NULL default '',
`niveau` varchar(10) NOT NULL default '',
PRIMARY KEY (`id`))
1- La base de données
Créez une base de donnée dans votre serveur MySQL et exécutez ce code.
Avant de commencer il faut avoir préalablement ajouté une connexion à la base de données dans Netbeans. Cela se fait à partir de l’onglet « services » de Netbeans.
Clic droit - MySQL connexion – et vous configurez ( c’est facile)



2- Creation d’un projet web avec Netbeans
Faites : - new project – java Web – Web application

3- Ajout d’une persistence Unit dans le projet
Le persistence Unit est très important car c’est lui qui configure le JPA. Il est créer au sei d’un fichier xml nommé : persistence.xml. On y distingue :
- La définition du provider (Hibernate dans notre cas)
- La connexion à la base de données
- Le dialecte (Drivers utilisés)
- Les propriétés de la source de données
Faite : - clic droit sur le projet – nouveau fichier – Persistence – Persistence Unit - Next


Configurer votre persistence Unit.


4- Création de notre classe d’entité
Netbeans nous permet de créer automatiquement nos classes d’entité directement à partir d’une base de données. (Yep ! the only IDE we need … that’s true)
Faites : comme sur les screens


- Précisez le nom du package
- Une alerte vous est donnée à l’étape 3 : entity Classes. Il n’existe pas d’unité de persistance.
- Veuillez précisez l’unité de persistance précédemment créé
- Ensuite à l’étape 4 de la création précisez (Pour notre exemple) le Collection Type à java.util.List


5- Petite vérification de notre persistence Unit.
Double cliquez sur le fichier persistence.xml et admirez la simplicité que nous offre Netbeans pour la configuration de nos persistences Units.
Faites : Vérifiez que la classe d’entité que vous avez générez est bel et bien incluse dans l’unité de persistance. Si ce n’est pas le cas cliquez sur « add Class » et faites le.



1- Création de notre servlet
Faites : clic droit sur le projet –nouveau fichier- web – servlet.
Dans le fichier généré par netbeans supprimez la méthode Process…bla bla ainsi que ses références.
Supprimez la méthode doPost (Nous ne l’utiliserons pas). Copier le contenue du code ci-dessous pour la méthode doGet()
package persitencePack;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NewServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Création de notre EntityManager, c’est grâce à lui qu’on va manipuler les entités JPA
//Précisez bien le nom de vore persistence Unit ici c’est : WebJpaTutoPU
EntityManagerFactory emf =Persistence.createEntityManagerFactory("WebJpaTutoPU");
EntityManager em = emf.createEntityManager();
try {
//On récupère les paramètres de la requête du client
String nom = request.getParameter("Nom");
String mail = request.getParameter("Mail");
String niveau = request.getParameter("Niveau");
if (nom != null && mail != null) {
//On initie la transaction, On crée un objet Groupes qu’on édite en fonction des paramètres envoyés par l’utilisateur.
em.getTransaction().begin();
Groupes gp = new Groupes();
gp.setNom(nom);
gp.setMail(mail);
gp.setNiveau(niveau);
// On utilise l’EntityManager pour enregistrer les données
em.persist(gp);
em.getTransaction().commit();
}
// On va aussi afficher le contenu de notre table groupes. Pour cela, nous obtenons la liste des //éléments contenu dans la table groupes et nous les mettons dans un attribut
List grpList = em.createQuery("SELECT g FROM Groupes g").getResultList();
request.setAttribute("groupes", grpList);
//l’attribut est ensuite envoyé vers la page index.jsp qui le traitera pour afficher son contenue.
request.getRequestDispatcher("/index.jsp").forward(request, response);
} finally {
//Fermeture du PersistenceManager:
if (em.getTransaction().isActive())
em.getTransaction().rollback();
em.close();
}
}
}
Un coup d’œil sur notre fichier web.xml (Important car c’est lui qui établit la correspondance entre de demande requête http et le servlet à instancier). Comme avec le persistence unit, netbeans facilite grandement l’édition de ce fichier primordiale pour notre application web.
(Yep Netbeans ! the only IDE we… euh ! … already say ? excuse me)


7- Maintenant on va faire une tour du côté de JSP
Faites : Remplacez les parties concernées de votre fichier index.jsp par les lignes suivantes (ne copier
pas les parties d’explication en gras)
<%@page import="java.util.*, javax.persistence.*, persitencePack.Groupes"%>



</span>JSP Page<span style="color: rgb(61, 133, 198);">


WEB APPLICATION - JPA


Explication : ICI il s’agit de notre formulaire d’enregistrement

Nom :
  
Mail :

Niveau :






    Explication : ICI On récupère l’attribut «groupes » fournit pas le servlet. Et comme il s’agit
    d’un objet de type List alors on le met dans l’objet grps qui est de type List

    <%
    @SuppressWarnings("unchecked")
    List grps = (List)request.getAttribute("groupes");
    if (grps != null) {
    for (Groupes grpes : grps) { %>

    Explication : ICI On affiche le contenu des objet de la liste, le parcours est assuré par une
    boucle for. Les méthodes get utilisez sont celle de votre entité JPA généré plus tôt (j’espère
    que vous y avez jeté un coup d’oeil)






  1. <%out.println(grpes.getNom()+" - "+grpes.getMail()+" - "+grpes.getNiveau()); %>
    <% }
    } %>




    8- Visualisons notre application
     

    Faites : Demarrez le serveur Tomcat en faisant un clic droit sur l’icône comme sur le screen
    - revenez sur le projet – clic droit – deploy
    - Ensuite : clic droit – run
    Vous aurez un résultat semblable à celui-ci.
     
    Vous pouvez contribuer à l’amélioration de ce tutoriel en laissant un commentaire. Merci.


    dimanche 18 avril 2010

    TESTER APPLICATION JAVAME POUR ECRAN TACTILE

    il est question ici pour vous de tester votre application mobile dans un environnement à écran tactile. Pour cette raison vous devez activer cette fonctionnalités dans le fichier de configuration de la device que vous utilisez (Dans notre exemple c'est le defaultcolorphone). Dans ce fichier l'option touch_screen est marqué FALSE ... n'attendez pas que je vous dise de mettre TRUE je crois que c'est logique.
    Après cette modification vous pouvez tester votre application. Dans notre cas il s'agit d'une application simple (et inutile) qui est réalisé avec les facilité du svg User Interface inclusent dans Netbeans. Vous pouvez remarquez la croix qui se balade sur l'écran ? Voilà, en fait cette croix c'est votre doigt ou celui de l'utilisateur, vous pouvez donc tester votre application.
    [L'application simple et inutile consiste en fait à ecrire un texte dans le champ reservé et d'appuyer le bouton avec votre doigt pour que le label d'en bas prenne pour valeur ce texte]
    Enjoy !

    mercredi 14 avril 2010

    What is WAP Push?

    WAP Push is essentially an extension to SMS that enables the recipient of the WAP Push message to immediately view an online page of content in one click...

    A WAP Push is an SMS message which contains a link to a WAP page. When a compatible handset receives a WAP Push message, it allows the user to access that WAP content.

    Usefull Links :
    http://developer.openwave.com/docs/WAP_Push_1201.pdf
    http://developer.openwave.com/docs/wappush_vs_sms.pdf
    http://www.visualtron.com/
    http://www.winplc.com/solutions/wap-push.aspx
    PHP Class for WAP PUSH: http://www.phpclasses.org/browse/package/1971.html
    Create WAP Push in java:
    http://www.ericsson.com/mobilityworld/sub/open/technologies/open_development_tips/tools/wap_push_sdk

    lancer automatiquement MIDlet, Utiliser le Push Registry.

    Le message d'origine à partir de: http://developers.sun.com/mobility/midp/questions/pushregistry/

    Si vous voulez lancer automatiquement MIDlet, vous pouvez utiliser le Push Registry.

    Comment faire?

    La classe PushRegistry soutient un "push" modèle de distribution de contenu. Permettre à un MIDlet pour lancer en réponse à une connexion entrante ou à une heure programmée fait ensemble de nouvelles classes de services possible.

    Spécification d'une entrée PushRegistry nécessite quatre éléments:

    * Le MIDlet être lancé, spécifié à l'aide de l'attribut MIDlet-.

    * Si la suite de MIDlets est signé, une demande autorisations, en utilisant l'attribut MIDlet-autorisations. La demande doit comprendre au moins la méthode javax.microedition.io.PushRegistry.

    * Une connexion entrante URL, requis par le Connector.open () méthode.

    * Un filtre pour les connexions entrantes. Le format du filtre est spécifique au protocole, mais le filtre "*" correspond à toute chaîne, et "?" correspond à tout caractère unique.

    Une entrée PushRegistry peut être spécifiée soit dans une forme statique ou dynamique.

    Une entrée statique PushRegistry est spécifié dans le descripteur d'application Java (JAD), le fichier manifeste, ou les deux. Le MIDlet, une fois installé, toujours répondre à la connexion spécifiée entrants. Ajouter le MIDlet, Push registre, et autorisations attribue à la JAD ou manifeste, comme dans cet exemple JAD:

    MIDlet-1: CalPushHandler
    MIDlet-Permissions: javax.microedition.io.PushRegistry,
    javax.microedition.io.Connector.socket
    MIDlet-Push-1: socket: / /: 5012, CalPushHandler, *


    Ces paramètres seront la cause CalPushHandler MIDlet de lancer en réponse à une demande de connexion entrante sur le port 5012.

    Une entrée dynamique PushRegistry est bien le même que une entrée statique sauf que vous utilisez le PushRegistry.registerConnection () pour spécifier le Push Entrée au lieu d'utiliser le MIDlet-Push- attribut. L'attribut MIDlet- est toujours nécessaire dans la JAD ou manifeste, comme c'est le MIDlet-autorisations d'attribut, dans le cas d'une suite MIDlet signé. Une entrée dynamique peut être activée (désactivée à l'aide et l'PushRegistry.unregisterConnection () méthode) après l'installation suite de MIDlets. Un exemple de fichier JAD devrait contenir:

    MIDlet-1: CalPushHandler
    MIDlet-Permissions: javax.microedition.io.PushRegistry,
    javax.microedition.io.Connector.socket


    Le code source MIDlet sont les suivantes:

    ...
    javax.microedtion.io.PushRegistry d'importation;
    ...

    String connURL = "socket: / /: 5012";
    MIDletStr String = "CalPushHandler";
    FilterStr String = "*";

    try (
    PushRegistry.registerConnection (connURL,
    MIDletStr, FilterStr);
    ) Catch (ClassNotFoundException CNF) (
    ...
    ) Catch (IOException ioe) (
    ...
    )
    ...


    Utilisation des alarmes pour lancer MIDlets

    Le PushRegistry.registerAlarm () méthode présente un MIDlet pour lancer à une heure programmée. Il est proche de UNIX à (1) l'installation. La méthode nécessite un MIDlet dans la série actuelle de lancer, avec un temps. Spécifiez le MIDlet comme une chaîne et l'époque comme un java.util.Date. Un échantillon suit.

    Dans la JAD ou fichier manifeste, insérer:

    MIDlet-1: AlarmMIDlet
    MIDlet-Permissions: javax.microedition.io.PushRegistr


    Dans le code source MIDlet comprennent:

    ...
    javax.microedtion.io.PushRegistry d'importation;
    ...
    prevalarm long;
    MIDletname String = "AlarmMIDlet";
    nexttime Date = java.util.Date nouvelle () + 60000;

    prevalarm = PushRegistry.registerAlarm (MIDletname, nexttime);
    ...


    La spécification MIDP 2.0 limite le nombre d'alarmes par MIDlet dans une suite à un.

    Notez que la spécification n'exige pas mises en œuvre pour soutenir ces caractéristiques PushRegistry. S'ils ne sont pas pris en charge, une exception sera levée ConnectionNotFoundException.

    Un exemple

    La suite de MIDlets échantillon illustre l'utilisation d'une entrée statique PushRegistry et du PushRegistry.registerAlarm () méthode. Notez que la suite de MIDlets ne comprend pas les composants de l'interface.

    La suite de MIDlets contient deux MIDlets et une autre classe. Le PushMIDlet prévoit un délai de journée (TSD) service (voir: Internet Engineering Task Force RFC 867) en utilisant la classe DayTimeServer. DayTimeServer implémente l'interface Runnable, l'exécution du service TSD dans un thread séparé. DayTimeServer ouvre la connexion au serveur, accepte la connexion entrante (l'événement qui a initié le lancement MIDlet en premier lieu), répond au client avec l'heure actuelle comme une chaîne, ferme les connexions, et des sorties. Dans l'ensemble, pas très excitant, mais indicatif et extensible.

    Le PushMIDlet enregistre également la AlarmMIDlet d'exécution 60 secondes après la PushMIDlet est lancé. Le AlarmMIDlet simplement re-soi calendriers à l'aide PushRegistry.registerAlarm (). Le résultat est le lancement récurrent de la MIDlet, semblable à la cron UNIX (1M) installation. Le AlarmMIDlet peut être facilement étendu pour inclure des activités plus intéressantes à être exécutés périodiquement.

    Conclusion

    Les deux nouveaux mécanismes de lancement de MIDlet que le MIDP 2.0 classe PuhRegistry prévoit de rendre possible la création de services plus riches en contenu. Pour plus d'informations sur le bouton enregistrer, voir l'article Le Push Registry MIDP 2.0

    Use Push Registry for automatically Launch a MIDlet

    Original message from: http://developers.sun.com/mobility/midp/questions/pushregistry/

    If you want to launch MIDlet automatically, you can use Push Registry.

    How to do ?

    The PushRegistry class supports a "push" model of content distribution. Enabling a MIDlet to launch in response to an incoming connection or at a scheduled time makes whole new classes of services possible.

    Specifying a PushRegistry entry requires four items:

    * The MIDlet to be launched, specified using the MIDlet- attribute.

    * If the MIDlet suite is signed, a Permissions request, using the MIDlet-Permissions attribute. The request must include at least the javax.microedition.io.PushRegistry method.

    * An inbound connection URL, required by the Connector.open() method.

    * A filter for inbound connections. The format of the filter is protocol-specific, but the filter "*" matches any string, and "?" matches any single character.

    A PushRegistry entry can be specified in either a static or dynamic form.

    A static PushRegistry entry is specified in the Java Application Descriptor (JAD) file, the manifest file, or both. The MIDlet, once installed, will always respond to the specified incoming connection. Add the MIDlet, Push Registry, and Permissions attributes to the JAD or manifest, as in this example JAD file:

    MIDlet-1 : CalPushHandler
    MIDlet-Permissions : javax.microedition.io.PushRegistry,
    javax.microedition.io.Connector.socket
    MIDlet-Push-1 : socket://:5012, CalPushHandler, *


    These settings will cause the MIDlet CalPushHandler to launch in response to an incoming connection request on port 5012.

    A dynamic PushRegistry entry is much the same as a static entry except that you use the PushRegistry.registerConnection() method to specify the Push Entry instead of using the MIDlet-Push- attribute. The MIDlet- attribute is still required in the JAD or manifest, as is the MIDlet-Permissions attribute, in the case of a signed MIDlet suite. A dynamic entry can be enabled (and disabled using the PushRegistry.unregisterConnection() method) after MIDlet suite installation. An example JAD file would contain:

    MIDlet-1 : CalPushHandler
    MIDlet-Permissions : javax.microedition.io.PushRegistry,
    javax.microedition.io.Connector.socket


    The MIDlet source code would include:

    ...
    import javax.microedtion.io.PushRegistry;
    ...

    String connURL = "socket://:5012";
    String MIDletStr = "CalPushHandler";
    String FilterStr = "*";

    try {
    PushRegistry.registerConnection(connURL,
    MIDletStr, FilterStr);
    } catch ( ClassNotFoundException cnf ) {
    ...
    } catch ( IOException ioe ) {
    ...
    }
    ...


    Using Alarms to Launch MIDlets

    The PushRegistry.registerAlarm() method sets up a MIDlet to launch at a scheduled time. It's similar to the UNIX at(1) facility. The method requires a MIDlet within the current suite to launch, along with a time. Specify the MIDlet as a String and the time as a java.util.Date. A sample follows.

    In the JAD or manifest file, insert:

    MIDlet-1 : AlarmMIDlet
    MIDlet-Permissions : javax.microedition.io.PushRegistr


    In the MIDlet source code include:

    ...
    import javax.microedtion.io.PushRegistry;
    ...
    long prevalarm;
    String MIDletname = "AlarmMIDlet";
    Date nexttime = new java.util.Date() + 60000;

    prevalarm = PushRegistry.registerAlarm( MIDletname, nexttime );
    ...


    The MIDP 2.0 specification limits the number of alarms per MIDlet in a suite to one.

    Note that the spec doesn't require implementations to support these PushRegistry features. If they're not supported, a ConnectionNotFoundException exception will be thrown.

    An Example

    The sample MIDlet suite illustrates use of a static PushRegistry entry and of the PushRegistry.registerAlarm() method. Note that the MIDlet suite does not include any UI components.

    The MIDlet suite contains two MIDlets and one other class. The PushMIDlet provides a time-of-day (TOD) service (see: Internet Engineering Task Force RFC 867) using the DayTimeServer class. DayTimeServer implements the Runnable interface, executing the TOD service in a separate thread. DayTimeServer opens the server connection, accepts the incoming connection (the event that initiated the MIDlet launch in the first place), responds to the client with the current time as a string, closes the connections, and exits. All in all, not very exciting, but illustrative and extensible.

    The PushMIDlet also registers the AlarmMIDlet for execution 60 seconds after the PushMIDlet is launched. The AlarmMIDlet merely re-schedules itself using PushRegistry.registerAlarm(). The result is recurring launch of the MIDlet, similar to the UNIX cron(1M) facility. The AlarmMIDlet can easily be extended to include more interesting activities to be executed periodically.

    Conclusion

    The two new MIDlet-launching mechanisms that the MIDP 2.0 PuhRegistry class provides make possible the creation of more content-rich services.

    Retrieving a SonyEricsson IMEI

    Retrieved from "http://www.j2meforums.com/wiki/index.php/Retrieving_a_SonyEricsson_IMEI

    The following command retrieves the IMEI (International Mobile Equipment Identity) number from :

    Sony Ericsson mobile phones: System.getProperty("com.sonyericsson.imei") (from the SE MIDP Developer Guide)

    Nokia mobile phones: System.getProperty("com.nokia.mid.imei")

    Motorola (A338): System.getProperty("phone.imei")

    Siemens: System.getProperty("com.siemens.IMEI")

    vendredi 5 mars 2010

    COMBINER LA PUISSANCE DE LWUIT DESIGNER et CELLE DU VISUAL MOBILE DESIGNER DE NETBEANS

    LWUIT une API qui permet la création d'Interface grahique très attrayantes pour application mobile. Je n'ai pas l'intention de vous faire un tuto sur LWUIT mais plutôt de vous montrer comment vous pourrez combiner la puissance de LWUIT designer à celle du Visual Mobile designer intégré dans Netbeans. Vous pourrez vous même trouver un tutoriel bien fait sur LWUIT dans le site de SUN, l'article est titré : "The Lightweight User Interface Toolkit (LWUIT): An Introduction".


    Vous pourrez vous même trouver un tutoriel bien fait sur LWUIT dans le site de SUN, l'article est titré : "The Lightweight User Interface Toolkit (LWUIT): An Introduction".

    POSONS LE DECOR

    Comme vous pouvez le voir sur le dessin du dessus, Visual Mobile Designer vous facilite la gestion des flux et des affichages de votre application ainsi que le code des éléments actifs. Tout ceci en générant du code pour vous. Sauf que les graphisme utilisent : import javax.microedition.lcdui.*; ... C'est pas jolie - jolie à voir.

    LWUIT quand à lui vous créer une UI nettement plus belle à voir et riche en possibilités ... sauf que ce sera à vous de codé l'application javaME pour utiliser une ressource générée par LWUIT ... c'est bien mais le programmeur c'est toujours un gros parresseux donc... QUE FAIRE POUR UTILISER SES DEUX FONCTIONNALITEES EN MEME TEMPS, ... sachant que le code généré par le visual mobile designer de netbeans n'est pas retouchable dans l'outils lui même ???


    COMMENCONS

    1) Dans le repertoire "util" de votre décompression LWUIT se trouve "ResourceEdit.exe" Lancer cet outils et créez votre ressource LWUIT. C'est relativement simple, vou pouvez y arriver avec ou sans tutoriel. Ne vous préoccupez pas de l'aspect code de votre application, cet outils de LWUIT ne gère que le design donc concntrez vous sur le DESIGN. Si vous avez beoin d'un tuto malgrés tout alors consultez l'article de SUN mentionné plus haut. Pour notre exemple voici notre ressource nommé: gsk.res



    2) Créez votre application javaME en utilisant Visual Mobile Designer de Netbeans

    Concevez normalement le code de votre application. dans l'exemple notre application est très simplifiée. Au démarrage nous nous retrouvons devant un formulaire qui possède un menu à 3 item. l'un des item ferme l'application, voilà c'est tout mais suffisant pour voir les retouches qu'il faudra par la suite faire pour intégrer dans cette application notre design conçu avec lwuit designer.


    3) Créer une nouvelle classe principale dans le repertoire de votre application et copier tout le code généré par le VMD à l’intérieur de cette nouvelle classe. Corriger les erreurs de nommage sur la nouvelle classe, sur son constructeur et enlevez les implements.

    -> Ajoutez la librairie lwuit.jar dans votre projet

    4) Notre travail consistera principalement à traquer les erreurs sur le code pour l’unifier avec le design conçu dans lwuit designer.

    è Remplacer les importations (pas de lcdui dans les import) voici les import les plus necessaires :

    import javax.microedition.midlet.*;

    import com.sun.lwuit.Form;

    import com.sun.lwuit.Command;

    import com.sun.lwuit.events.ActionEvent;

    import com.sun.lwuit.Display;

    import com.sun.lwuit.plaf.UIManager;

    import com.sun.lwuit.util.Resources;

    import java.io.IOException;

    è Dans la methode startApp() ajouter au debut ce code:

    try {

    Display.init(this);

    Resources r = Resources.open("/gsk.res");

    UIManager.getInstance().setThemeProps(r.getTheme("gsk"));

    //gsk c’est le nom que vous avez donné au theme dans le fichier .res

    } catch (IOException ex) {

    ex.printStackTrace();

    }

    è Supprimer les methodes switchDisplay et getDisplay ou les mettre en commentaire

    ( /* */ )

    è Ajoutez dans le code des methodes «get » le bout de code tel que mentionné en dessous :

    public Command getScreenCommand1() {

    if (screenCommand1 == null) {

    screenCommand1 = new Command("Screen", 0)

    {

    public void actionPerformed(ActionEvent evt) { // CODE A INSRER }

    };

    }

    return screenCommand1;

    }

    -> Regarder la methode commandAction() Il ya là les codes d’action pour chaque composant actif dans notre formulaire. Copier ces codes et insérer les dans les methodes actionPerformed() des methodes « get » correspondantes pour chacun des composants actifs du formulaire.

    -> Dans la methode startMIDlet() remplacer le code par : getForm().show();

    -> Corriger les petites erreurs de syntaxes restantes, s’il y’en a et executer votre application.