[JAVA] Compilation à la volée

Il est possible avec JAVA 6 de compiler du code à la volée.

Soit un fichier Hello.java contenant du code JAVA, voici le code pour le compiler avec une instance de JavaCompiler :
[java]
import java.io.*;
import javax.tools.*;

public class CompileIt {
public static void main(String args[]) throws IOException {
JavaCompiler compiler =
ToolProvider.getSystemJavaCompiler();
int results = compiler.run(
null, null, null, « Hello.java »);
System.out.println(« Result code:  » + results);
}
}
[/java]

En mettant null au 3 premiers arguments de la méthode run, les entrées, sorties et erreurs se feront par défaut dans System.in, System.out, System.err.

[JAVA] Conventions

J’ai pour habitude de suivre les conventions imposées par Eclipse ou suivre le modèle de la Javadoc, mais le projet JJGuidelines est un document regroupant les conventions et habitude de codage pour JAVA – J2EE.

[JSF] Mouais…

Je viens d’essayer les WebForms .Net et j’ai pu ainsi comparer avec l’experience que j’ai eu avec les JSF Java. A l’époque, j’ai cherché des articles comparants WebForm vs JSF et j’en ai trouvé aucun prenant parti pour l’un ou pour l’autre. Et bien, mon impression personnel est que les WebForms sont beaucoup mieux!
Les JSF, sans un editeur du style du Web Visual Studio Express .Net, c’est beaucoup trop lourd. On se prend la tête pour faire des choses simples.

Cependant, voici un ensemble qui m’ont été utile pour developper mes JSF.

Pour apprendre à utiliser les JSF de façon approfondie
Un site pas mal sur le sujet:http://www.jsftutorials.net/
L’index des principaux TAG

Un article sur le cycle de vie des JSF
En Des exemples de composants reutilisables!!
A suivre, le projet parallèle d’Apache: MyFaces

La page de SUN sur JSF donne accès à des articles, des FAQ et la possibilité de télécharger l’implémentation de référence.
JavaServerFaces sur Java.Net est le site de la communauté open-source Java.Net sur JSF.

Le site du plugin Exadel qui va bien dans Eclipse.

Pour en savoir plus sur comment creer ses propres faces. Pas très evident!!
Créer un « custom coponent »
Custom COmponent 2

Foire au lien

Ce site http://joust.kano.net/weblog/archive/2004/10/16/pack200-on-apache-web-server/ explique comment utiliser la compression Pack200 avec Apache pour déployer une application Java Web Start.
En effet, la plupart des documentations explique comment faire cela avec Tomcat et le JnlpDownloadServlet mais pas avec Apache. ça peut être utile!!

Note pour plus tard : A TRADUIRE ET RESUMER

Comment invoquer un EJB3 distant depuis une interface Swing deployé via Java Web Start?
Pour chaque serveur d’application, les paramètres de connections et les librairies clientes à embarquer sont différentes. Et à chaque fois, c’est un vrai casse-tête pour trouver ces informations!! surtout que j’ai voulu me tourner vers l’avenir en ne m’interressant qu’à la spécification EJB3 (pour sa simplicité…?!).

1-Avec NetBean5.5 + Sun App Server

Via NetBean5.5, il est facile de créer un EJB3 et le deployer sur le serveur fourni avec l’installateur J2EE5 de Sun. Je ne m’attarderai pas sur ce point. Il y a un tutoriel qui explique cela sur developpez.com (chercher l’auteur de l’article = Secheresse).

Pour invoquer l’EJB3 Session (Stateless ou Stateful) depuis une interface Swing, il faut que le classpath de l’application trouve les jars suivant:

  • Un jar contenant l’interface remote de l’EJB à invoquer
  • appserv-deployment-client.jar et appserv-rt.jar (que l’on trouvera dans le repertoire du serveur d’application de Sun
  • javaee.jar
  • Le jar contenant le code du client
  • Le code pour invoquer l’EJB dans le client :
    [java]
    Properties props = new Properties();

    props.setProperty(« org.omg.CORBA.ORBInitialHost », « 192.168.2.30″); // IP du serveur d’application
    //props.setProperty(« org.omg.CORBA.ORBInitialPort », « 3700″); //port = 3700 par défaut

    MonBeanRemote bean= null; //interface remote
    try {
    Context ctx = new InitialContext(props);
    //on invoque le bean à l’aide de son nom de classe comme pour un import
    bean= (MonBeanRemote) ctx.lookup(« mon.package.MonBeanRemote »);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    [/java]

    Plus d’infos : https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment

    Mais cette solution n’est valable que pour des développements de tests car il me semble qu’il est déconseillé d’utiliser le Sun App Server pour une application de production.
    De plus, la librairie appserv-rt.jar fait à elle seule environ 15Mo. Pour un deployement par Java Web Start, c’est pas idéal!!

    2- NetBean5.5 + JBoss

    J’ai essayer de remplacer le Sun App Server par JBoss en gardant NetBean pour deployer mes EJB mais ce fut un echec!

    3 – Jonas4.4.7 + EasyBean

    Je me suis donc ensuite tourné vers le serveur d’application Jonas pour l’avoir utilisé à la Fac.
    Le site mets en avant le projet EasyBean qui est une couche sur Jonas pour faire fonctionner les EJB3. Ce framework est vendu comme facile à utiliser.
    J’ai donc testé et il est vrai que j’ai reussi à avoir des résultats rapidement!
    De plus, il est livré avec des exemples très bien fait pour chaque type d’EJB3 : Stateless, Stateful + Transaction, Message, Security et Entity.

    Les jars à embarquer avec l’application cliente sont:

  • Le code du client
  • les interfaces remotes des EJBs
  • le jar ow_easybeans_component_smartclient.jar (1 Mo)
  • Le code à mettre dans le client pour invoquer un EJB est :
    [java]
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY,
    « org.objectweb.easybeans.component.smartclient.spi.SmartContextFactory »);
    env.put(Context.PROVIDER_URL, « smart://192.168.2.30:2503″);

    Context initialContext = new InitialContext(env);

    // à partir de l’exemple Stateless fourni
    StatelessRemote statelessBean = (StatelessRemote) initialContext
    .lookup(« org.objectweb.easybeans.examples.statelessbean.StatelessBean »
    + « _ » + StatelessRemote.class.getName() + « @Remote »);

    System.out.println(« Calling helloWorld method… »);
    statelessBean.helloWorld();
    System.out.println(« Add 5 + 6… »);
    int resultAdd = statelessBean.add(5, 6);
    System.out.println(« Sum = ‘ » + resultAdd);
    [/java]

    Le protocole de communication utilisé est un protocole « maison » (smart) utilisant le port 2503.

    A noter, qu’il est possible d’installer EasyBean juste sur un Tomcat (mais j’avoue que je n’ai pas reussi à le faire fonctionner sous Windows, j’ai eu un problème de path que je n’ai pas eu avec Jonas).


    Remarque : Je me suis essentiellement basé sur les exemples pour le moment et je n’ai pas encore tenté de faire un EJB depuis le départ et je ne sais pas encore comment les déployer dans Jonas. Avec le Sun App Server non plus à vrai dire puisque c’est NetBean qui me l’a fait! Mais avec Jonas, ça à l’air moins compliqué…

    Liens :
    Tutorial sur developpez.com
    https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment

    EasyBean et Jonas
    Demos EasyBean