5 nov

Bash et l’auto-complétion ant

Arnaud Brunet Informatique

Si vous utilisez le shell bash, sachez que ant fourni un script permettant de faire de l'auto-complétion sur la ligne de commande. Pour cela, il suffit de lancer la commande :
complete -C $ANT_HOME/bin/complete-ant-cmd.pl ant build.sh
Remplacer $ANT_HOME par le dossier d'installation de ant. /usr/share/ant/ sous Debian.

Maintenant lorsque vous tapez la commande ant suivit de TAB, la liste des cibles publiques (target avec description) s'affiche.
Marche aussi pour l'option -f, seuls les fichiers .xml sont affichés.

Pour l'activer de façon permanente, il suffit de l'ajouter au fichier .bashrc.


Logo HibernateVoici une petite astuce pour compter le nombre de résultats d'une requète Hibernate via l'API Critiria :
(Lire la suite…)


Bonjour,

Si vous utilisez Hibernate comme outil d'ORM, vous savez surement que vous pouvez afficher les requêtes SQL en initialisant dans la configuration de la SessionFactory la propriété hibernate.show_sql à true.
Maintenant Hibernate affiche dans la console les requètes SQL qu'il exécute. Mais tous les paramètres des requêtes sont affichés avec des ?.

Pour y remédier, il faut définir le niveau du logger log4j.logger.org.hibernate.type à trace dans le fichier log4j.properties.

Hibernate vous affichera toujours la requête avec ? mais juste en dessous, vous aurez le détail du binding qu'il fait.

A bientôt,
Arnaud


20 jan

Conteneur de Servlets/JSP gratuit

Arnaud Brunet Informatique

Hier, je parlais de MyJavaServer un conteneur de Servlets/JSP gratuit.

J'ai eu un peu de mal à me faire à leur système de déploiement non standard. Mais une fois habitué, je pense qu'il peut m'être utile pour mon projet de site perso.

Il faut savoir que les servlets et autres classes sont placés habituellement dans le dossier WEB-INF/classes. Or sur MyJavaServer, tous les utilisateurs partagent ce même dossier et ont chacun un sous-dossier personnel qui en fait un lien symbolique vers la racine de leur webapp.
Donc pour déployer une servlet celle-ci doit être un package du nom de l'utilisateur (ou un sous-package) et être placé directement à la racine.

Par exemple mon login est gronono. Il faut donc que mes servlets soient dans le package gronono et les fichiers .class placés directement à la racine de mon compte.

Voici la servlet qui m'a servie de test :

package gronono;
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter writer = response.getWriter();
    writer.write("Hello");
    response.flushBuffer();
  }
}

Une fois compilé, le fichier HelloServlet.class est à placer dans à la racine de mon compte.
La servlet est directement accessible via l'url : http://www.myjavaserver.com/servlet/gronono.HelloServlet

A bientôt.


19 jan

Base de données gratuite

Arnaud Brunet Informatique

Bonjour,

J'ai le projet de réaliser un site perso entièrement à la main. Ne pouvant pas laisser mon ordinateur tout le temps allumé et disposant d'une connexion internet relativement bas débit, il m'est impossible de l'héberger chez moi.

Je suis donc à la recherche des services suivants : base de données, serveur de Servlets/JSP, espace disque.
En recherchant un peu, on peut trouver ces services gratuitement sur le web.

Pour la base de données, je viens de m'inscrire sur FreeMySQL.net qui propose une base de données MySQL gratuitement.
Le serveur est hebergé sur SQL06.FREEMYSQL.NET sur le port 3306. Et la base est disponible dès que vous l'avais créée.

Voici un petit programme écrit en Java pour la tester :

public class Test {
  public static void main(String[] args) {
    String driver = "com.mysql.jdbc.Driver";
    String dbHost = "SQL06.FREEMYSQL.NET";
    String dbPort = "3306";
    String database = "gronono";
    String url = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + database;
    String user = "gronono";
    String password = "*******";
 
    try {
      Class.forName(driver);
    } catch (ClassNotFoundException e) {
      System.err.println("Erreur lors du chargement du driver : ");
      e.printStackTrace();
      System.exit(-1);
    }
 
    Connection cnx = null;
    try {
      cnx = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
      System.err.println("Impossible de se connecter à la base " + url + " avec l'utilisateur " + user);
      e.printStackTrace();
      System.exit(-1);
    }
 
    Statement stmt = null;
    ResultSet rs = null;
    try {
      stmt = cnx.createStatement();
      rs =   stmt.executeQuery("select 1 from dual");
      while (rs.next()) {
        System.out.println(rs.getString(1));
      }
    } catch (SQLException e) {
      System.err.println("Impossible de se connecter à la base " + url + " avec l'utilisateur " + user);
      e.printStackTrace();
      System.exit(-1);
    } finally {
      try {
        if (stmt != null) {
          if (rs != null) {
            rs.close();
          }
          stmt.close();
        }
      } catch (SQLException e) {
        System.err.println("Impossible de fermer la connexion : ");
        e.printStackTrace();
        System.exit(-1);
      }
    }
    System.out.println("Fin");
  }
}

Prochaine étape trouver un conteneur de Servlet/JSP. Je sais qu'il existe MyJavaServer. Il me reste encore à le tester.

A bientôt.


17 déc

[Eclipse RCP] Menu « Nouveau »

Arnaud Brunet Informatique

Bonjour,

Je met ici quelques lignes sur comment faire un menu "Nouveau" comme dans l'IDE pour les applications Eclipse RCP.

Dans la classe ApplicationActionBarAdvisor, on commence par définir le menu :

 
MenuManager fileMenu = new MenuManager("&Fichier", IWorkbenchActionConstants.M_FILE);
MenuManager newMenu = new MenuManager("&Nouveau", ActionFactory.NEW.getId());
newMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
newMenu.add(new BaseNewWizardMenu(window, ActionFactory.NEW.getId()));
fileMenu.add(newMenu);
 

Si on veut afficher un assistant, il faut le fichier plugin.xml rajouter les lignes :

 
<extension point="org.eclipse.ui.perspectiveExtensions">
<perspectiveExtension targetID="identifiantDeLaPerspetive">
    <newWizardShortcut id="identifiantDuWizard" />
  </perspectiveextension>
</extension>
 

Le wizard doit implémenter l'interface INewWizard et être déclaré dans le fichier plugin.xml.
L'identifiant de la perspective permet de spécifier sous quelle perspective sera affiché l'assistant. Pour l'afficher sous toutes les perspectives, il faut mettre une étoile ('*').