Le Javaiste Sanglant

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 25 septembre 2011

Redécouvrir spring MVC

Je suis faché de ne pas arriver à configurer une simple Webapp Spring MVC alors voilà donc un prétexte pour écrire un article qui me servira de référence.

Plusieurs solutions d'installations pour commencer la webapp sous maven:

  1. utiliser un archetype maven (mvn archetype:generate)
  2. utiliser netbeans pour créer un projet maven classique
  3. utiliser netbeans pour creer un projet webapps, en choisissant spring mvc, puis y greffer maven (bof)

J'ai retenu la solution de créer un projet maven classique.

Ajouter les dépendances Spring

Pour installer Spring MVC, suivez les instructions de springsources en ajoutant dans votre pom.xml http://blog.springsource.com/2009/12/02/obtaining-spring-3-artifacts-with-maven/

Si l'on se positionne sur la balise version, et tente une complétion (control + espace), netbeans rapporte le dernier numéro de version ! Cela permet de corriger si jamais la dernière version n'est pas la 3.0.5-RELEASE

Voici donc mon pom.xml pour l'instant :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.lejavaistesanglant</groupId>
    <artifactId>Quizz4</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
 
    <name>Quizz4</name>
 
    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
    </properties>
 
            <!-- Shared version number properties -->
 
 
    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
 
 
 
 
<!--
    Core utilities used by other modules.
    Define this if you use Spring Utility APIs (org.springframework.core.*/org.springframework.util.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Expression Language (depends on spring-core)
    Define this if you use Spring Expression APIs (org.springframework.expression.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Bean Factory and JavaBeans utilities (depends on spring-core)
    Define this if you use Spring Bean APIs (org.springframework.beans.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Aspect Oriented Programming (AOP) Framework (depends on spring-core, spring-beans)
    Define this if you use Spring AOP APIs (org.springframework.aop.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Application Context (depends on spring-core, spring-expression, spring-aop, spring-beans)
    This is the central artifact for Spring's Dependency Injection Container and is generally always defined
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Various Application Context utilities, including EhCache, JavaMail, Quartz, and Freemarker integration
    Define this if you need any of these integrations
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Transaction Management Abstraction (depends on spring-core, spring-beans, spring-aop, spring-context)
    Define this if you use Spring Transactions or DAO Exception Hierarchy
    (org.springframework.transaction.*/org.springframework.dao.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, spring-tx)
    Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA, and iBatis.
    (depends on spring-core, spring-beans, spring-context, spring-tx)
    Define this if you need ORM (org.springframework.orm.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Object-to-XML Mapping (OXM) abstraction and integration with JAXB, JiBX, Castor, XStream, and XML Beans.
    (depends on spring-core, spring-beans, spring-context)
    Define this if you need OXM (org.springframework.oxm.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Web application development utilities applicable to both Servlet and Portlet Environments
    (depends on spring-core, spring-beans, spring-context)
    Define this if you use Spring MVC, or wish to use Struts, JSF, or another web framework with Spring (org.springframework.web.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Spring MVC for Servlet Environments (depends on spring-core, spring-beans, spring-context, spring-web)
    Define this if you use Spring MVC with a Servlet Container such as Apache Tomcat (org.springframework.web.servlet.*)
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
 
<!--
    Spring MVC for Portlet Environments (depends on spring-core, spring-beans, spring-context, spring-web)
    Define this if you use Spring MVC with a Portlet Container (org.springframework.web.portlet.*)
-->
<!--
    Support for testing Spring applications with tools such as JUnit and TestNG
    This artifact is generally always defined with a 'test' scope for the integration testing framework and unit testing stubs
-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.version}</version>
            <scope>test</scope>
        </dependency>
 
 
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>6.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 
</project>

A l'issue de cette modification du pom :

mvn clean install

Poursuite de la création de la structure du projet

netbeans a crée une page jsp "Hello World" par défaut, mais c'est loin d'être suffisant. Suivons le paragraphe 1.2 de ce document : http://static.springsource.org/docs/Spring-MVC-step-by-step/part1.html#step1.2

mkdir WEB-INF
touch WEB-INF/web.xml

voici le code d'un web.xml minimal :

<?xml version="1.0" encoding="UTF-8"?>
 
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
 
  <welcome-file-list>
    <welcome-file>
      index.jsp
    </welcome-file>
  </welcome-file-list>
</web-app>

A ce point, il est tant de vérifier que notre projet web délivre bien une page web minimale. avec la commande

mvn jetty:run

mais pour cela, il m'a fallu ajouter le plugin jetty dans le fichier de configuration de maven :$HOME/.m2/settings.xml

<pluginGroups>
    <pluginGroup>org.mortbay.jetty</pluginGroup>
 </pluginGroups>

tout devrait être OK pour utiliser le serveur d'application Jetty, et lancer le navigateur sur l'url :

http://localhost:8080

Configurer Spring

en premier lieu, le controleur Spring qui va traiter nos requêtes, notamment celle terminant par .html Voici ce que l'on ajoute dans le web.xml, mon application s'appelle quizz.

<servlet>
    <servlet-name>quizz</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>quizz</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>
à cette étape, lancer le serveur jetty devrait afficher le message d'erreur suivant :
java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/quizz-servlet.xml]

nous allons donc creér le fichier quizz-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
 
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
  <!-- the application context definition for the springapp DispatcherServlet -->
  <bean name="/home.htm" class="com.lejavaistesanglant.quizz.HomeController"/>
</beans>

A ce stade le message d'erreur en lançant jetty devrait être :

CannotLoadBeanClassException: Cannot find class [com.lejavaistesanglant.quizz.HelloController] for bean with name '/home.htm'

Nous allons donc créer cette classe src/main/java/com/lejavaistesanglant/quizz/HomeController.java, et une bonne idée c'est d'y mettre un log.

package com.lejavaistesanglant.quizz;
 
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
import java.io.IOException;
 
public class HomeController implements Controller {
 
    protected final Log logger = LogFactory.getLog(getClass());
 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        logger.info("Returning home view");
 
        return new ModelAndView("home.jsp");
    }
}

Il vous faut donc une page home.jsp qui retourne un message HelloWorld, j'ai pris celle que Netbeans avait créé précedemment et je l'ai déplacé dans WEB-INF (ce qui est une erreur dans notre configuration actuelle)

évidemment, à cette étape, nous relançons une compilation mvn clean install avant de lancer jetty

Sauf si nous avons de la chance, notre navigateur tombe sur l'erreur suivante :

NOT FOUND

J'ai donc regardé les logs dans la console et modifier le fichier HomeController.java pourque la méthode handleRequest retourne :

return new ModelAndView("WEB-INF/home.jsp");

Et ça marche !

La doc de Spring recommande de créer un test unitaire à cette étape pour tester le controleur, Voici donc le code qu'elle fournit, que j'ai placé dans src/main/test/com/lejavaistesanglant/quizz/HomeControllerTest.java

package com.lejavaistesanglant.quizz;
 
import org.springframework.web.servlet.ModelAndView;
 
import com.lejavaistesanglant.quizz.HomeController;
 
import junit.framework.TestCase;
 
public class HomeControllerTest extends TestCase {
 
    public void testHandleRequestView() throws Exception{		
        HomeController controller = new HomeController();
        ModelAndView modelAndView = controller.handleRequest(null, null);		
        assertEquals("WEB-INF/home.jsp", modelAndView.getViewName());
    }
}

Evidemment un réquis à cela était la présence de junit4 dans le pom.xml, ce que nous avions déjà.

Relancer "mvn clean install" pour s'assurer que le test passe. Une bonne pratique est d'insérer une erreur dans le test dans un premier temps pour s'assurer qu'il passe; relancer le, une fois corrigé.

Une première étape est atteinte : Bravo. Spring est en place.

Billet à suivre...

mercredi 18 mai 2011

L'encapsulation

L'encapsulation est aussi appelée isolement des données. Il s'agit de combiner les données et leur comportement au sein d'un objet. Seul l'objet peut agir sur ses données (champs d'instances) avec ses méthodes.

On dit alors que l'objet contient son état et son comportement (state and behaviour)

La loi de l'encapsulation est donc que les champs d'instance doivent être privés ! Des accesseurs sont donc définis pour acceder aux champs d'instances.

Les avantages de l'encapsulations sont :

  • Le code peut être modifié en gardant les méthodes d'accès compatibles.
  • Les méthodes d'accès peuvent faire des contrôles

lundi 16 mai 2011

types

on appelle type l'ensemble de ces éléments

  • classes,
  • interfaces,
  • enumerations
  • annotation types

samedi 14 mai 2011

Entretien d'embauche

Dépitement suite à plusieurs entretiens d'embauche ! Mes efforts Javaistes sont largement insuffisants. Je relance donc l'initiative de ce blog.

Je souhaite quitter ma société car je ne m'en sors pas du "harcèlement" dont j'ai été victime. Ma hiérarchie refusant toute responsabilité, personne ne venant cadrer, rétablir, remettre à zéro, je suis obligé de partir. Du moins je le croyais.

J'ai passé deux entretiens d'embauches, et même si j'ai prévenu de mes lacunes en Java, je suis bien obligé de reconnaitre qu'elles sont plus importantes que je ne le pensais. Je suis surtout incapable de m'exprimer à l'oral sur ces points techniques. Je doute terriblement. J'ai perdu confiance en moi. Je ne sais plus formuler des réponses que parfois je connais. Je ressasse l'entretien en me demandant pourquoi je n'ai pas su répondre.

C'est vrai. J'ai beaucoup trop de lacunes. Il me faut donc bachoter et revoir tout le langage qui a bien évolué depuis que je l'ai appris il y a 10 ans à l'université.

Comment m'y prendre ?

  1. flux rss

Ne pas compter sur twitter pour apprendre des choses à gauche à droite. J'ai identifié plusieurs flux rss et configurer un client rss en ligne. J'ai revu toute ma manière de faire de la veille technologique. Je l'ai ré-industrialisé. Cela pris plus d'une journée complète !

  1. Certification Java

J'ai voulu aller voir le programme de la certification. Le site d'Oracle n'étant pas très clair je suis tombé sur cette formation. J'en reprends le programme. Je préfère mettre de coté Swing et Thread qui ne m'intéresse pas dans le domaine du web. http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getCourseDesc?dc=D61748GC10 J'ambitionne de parcourir chacun des points de ce programme.

  1. Matériel

Voici les premiers livres que je retiens

Au coeur de Java vol1 en français Effective Java



Au cours de ces entretiens je me suis demandé dans quel délire on vivait ? La personne n'est peu de choses par rapport à sa connaissance ? C'est ridicule de valider un par un tous ces points techniques. En tout cas cela prend trop d'importance par rapport aux capacités de la personne qui est embauché. Aucune question sur moi, sur ce que j'ai déjà réalisé ! Ce que je connais vaudrait donc plus que ce je suis capable. Il doit y avoir un sacré turnover dans cette SSII.

Retour donc dans mon entreprise malgré la fatigue psychologique, pendant peut-être 6 mois le temps que je "bachotte" Java, histoire de convaincre en entretien !

Au fait, je ne vous ai pas dit ? Dans la boite qui doute de mes capacités d'apprendre, ils utilisent Struts1 et CVS !!!!

samedi 2 octobre 2010

Un TextField lié à une checkbox en Groovy

Dans le cadre de mon travail, j'avais besoin d'une interface contenant une case à cocher qui m'autorise à saisir un champ texte. Tout ceci en groovy, parce que le programme est une expérience de mon cru.

A noter que le Groovy est un language difficile, trop permissif à mon gout.

par exemple j'avais oublié de déclarer un "privé" pour la visibilité d'un attribut. J'ai eu du mal à comprendre pourquoi mon code ne passait pas par l'accesseur !

Pour cet exemple, je me suis fortement inspiré de la doc groovy swingBuilder sur le pattern Observable : http://groovy.codehaus.org/SwingBuilder+with+custom+widgets+and+observer+pattern Voir wikipédia pour réviser ce pattern, pas simple.

Une amélioration possible, car les trois listeners au lieu d'un seul sont prévenus de changement de l'état d'une case à cocher

Le Code est ICI : http://github.com/lejavaistesanglant/lejavaistesanglant/tree/master/IntoJava/04.groovyCheckTextField/

vendredi 24 septembre 2010

notification de l'issue de Maven

Une astuce si vous êtes sous Linux, qui fonctionne indépendamment de gnome ou kde, c'est d'ajouter une notification quand votre command maven se termine J'ai ajouté les 5 dernière lignes au script /usr/bin/mvn

#!/bin/bash
if [ -f /usr/share/java-utils/java-functions ] ; then
  . /usr/share/java-utils/java-functions
  set_jvm
  set_javacmd
fi
 
#export M2_HOME=/usr/share/maven2
#export M2_HOME=/opt/apache-maven-2.1.0
export M2_HOME=/opt/apache-maven-3.0-alpha-7
echo $JAVA_HOME
export JAVA_HOME; $M2_HOME/bin/mvn $@
 
if [ $? -eq 0 ]; then
        /usr/bin/notify-send  "Maven result" "Build successful"
else
        /usr/bin/notify-send -u critical "Maven result" "Build failure"
fi

mardi 21 septembre 2010

Guitar

Un bon site sur Java est le Coder Breakfast. Olivier, l'auteur de ce blog poste souvent régulièrement des quizzs. Mais il faut avoir un bon niveau, d'ailleurs si je ne m'abuse, il a fait 100% lorsqu'il a passé la certification Sun JSCP.

Voici un programme de son cru, qui calcule les accords sur une Guitare.

http://thecodersbreakfast.net/index.php?post/2010/09/01/Become-a-Guitar-Hero-with-The-Coder-s-Breakfast-!

C'est intéressant car bien écrit et il utilise bien les spécificités de Java6.

exemple 1 : les énums


public enum Note {

    A, A$,
    B,
    C, C$,
    D, D$,
    E,
    F, F$,
    G, G$;

Exemple 2 : les Itérators et Génériques :

public class Scale implements Iterable<Note> {
(...)
    public Iterator<Note> iterator() {
        return notes.iterator();
    }

Exemple 3 : Les bloucles foreach()


        // Display notes on the neck
        for(Note rootNote : tuningNotes) {

Exemple 4 : Les nombres d'arguments variables, que j'avais oublié complétement !

    public Scale(Note... notes) {
        this(Arrays.asList(notes));
    }

Au total, même si certains diront qu'il 'y a pas de quoi casser 3 pattes à un canard, je trouve le tout fort joliment écrit !

samedi 18 septembre 2010

La bible !!!

Je viens de tomber sur la bible (du javaiste) Je ne savais qu'on l'on trouvait cela en ligne. Java Language Spécification

Dire que je croyais que Java était défini par une JSR incompréhensible ! Pas du tout. Du coup, combien de développeur Java ont lu cette bible ?

transient

J'inaugure mon répository git avec un programme qui vise à comprendre le mot clé Transient

Pour récupérer le programme : http://github.com/lejavaistesanglan...

Pour le lancer utiliser la commande

java -ea Transient

vendredi 17 septembre 2010

De retour de formation

Je suis de retour de formation. Une très bonne formation chez Valtech Training à la Défense.

Le métier d'informaticien est impitoyable, car il faut sans cesse remettre ses connaissances à jour. Pourtant, de l'aveu même du formateur, la connaissance n'est rien face à la pratique. A la suite de cette formation seule la re-pratique des exercices sera bénéfique.

C'est l'origine de ce blog, que de mettre en avant des pratiques, des expériences sur des technos qui m'intéressent.

Je vais donc expérimenter de ce pas le monde objet de Java dans une série que je nomme "IntoJava". En espérant que vous y trouverez un quelconque intérêt.

jeudi 9 septembre 2010

Le dernier jour

Il y a des jours ou tout semble aller de travers, mais il faut tenir bon. Il vient d'entrer dans le bureau. Moi qui craignait de revoir mon ancien chef à la conférence JUG. J'ai rêvé tant de fois cette dernière année de le pourrir. Et ces derniers mois, de lui exploser la gueule, voir son sang couler de sa bouche. J'ai la haine.

Moi qui suis d'un naturel si humain, je souffre d'être rempli de ce démon de haine. Impossible d'oublier combien j'ai pu servir de bouclier à ce con qui m'a poignardé depuis 3 ans. Les innombrables promesses de formation et tous les mensonges aux entretiens d'évaluations.

Les manœuvres pour me pousser à démissionner, la lettre recommandé qui indique que je code "mal", sans aucun argument. J'avais du mal à croire mes prédécesseurs qui me racontait ce qui leur arrivait. J'ai affaire à un couple de manipulateur, lui et ma chef.

Donc nous y sommes. Je suis à la frontière, l'épreuve ultime. Ce serait si facile de tout gâcher. De l'exploser ici et maintenant. L'avant veille de ma formation Java, dont j'ai tant souffert pour l'acquérir. Quelle ironie du destin.

Si je n'avais pas regarder ce reportage sur l'acteur Samy Naceri hier à la télé, avec son caractère écorché sanglant, peut-être je me serais laissé tenter également ? Samy Naceri apprendra-t-il jamais de ses erreurs ? Comprendra-t-il que c'est envers lui qu'il est en colère ?

Un seul jour à tenir. Souhaitez moi d'avoir le cœur léger aujourd'hui. Plus que jamais je dois avoir savoir transformer ma colère en motivation professionnelle. Que le code Saigne !

jeudi 2 septembre 2010

[astuce] Modifier la configuration d'un war avec Linux

Autant j'adore ouvrir les cadavres et jouer avec leurs organes tout chaud. Autant je déteste les recoudre. Faut sortir le gros fil et les aiguilles, c'est long et fastidieux.

Pour les fichiers .war a déployer sur une machine de prod, c'est la même chose.

Astuce avec VIM Vous pouvez modifier éditer directement le fichier de properties dans un war sans le dezipper avec vim avec zipPlugin.vim, présent sur les debian )

vim nomdu.war

si le contenu est affiché au format binaire remplacer dans /usr/share/vim/vim70/plugin/zipPlugin.vim

au BufReadCmd   *.zip		call zip#Browse(expand("<amatch>"))

par cette ligne

au BufReadCmd   *.zip,*.jar,*.xpi,*.war,*.ear		call zip#Browse(expand("<amatch>"))

sources : zipPlugin : http://vim.cybermirror.org/runtime/... Edit Java jar and other files : http://vim.wikia.com/wiki/Edit_Java...

vendredi 27 août 2010

Premier pas avec Spring

Spring, à quoi ça sert ?

L'objectif de Spring est en tant que containeur léger, de gérer les intéractions de votre application avec son environnement : Bases de données, fichiers de logs, serveur de mail, ... Une application "moderne" ne peut plus se permettre de ne pas interagir avec son envirronnement hétérogène : Annuaire LDAP, Serveur Mail et bien sur base(s) de données. Elle doit faire uniquement ce dont pourquoi elle est conçue, mais le faire bien (de manière performante). Spring fait en sorte que ces dépendances fortes impactent le moins possible votre code.

Comment ça marche ?

Spring est basé sur un design pattern nommé Ioc : Inversion de controle. Dans un code traditionnel, Notre application java chercherait le driver jdbc pour exécuter les requêtes SQL. Dans l'inversion de contrôle c'est Spring qui donne un driver à notre code Java.

Lire absolument http://ego.developpez.com/spring/ pour comprendre.

Un exemple serait bienvenu !

Bienvenue sur Le Javaiste Sanglant!

Je me réveille ce matin et j'ai la haine. <br />J'ai la haine d'apprendre de nouvelles technos. D'approfondir le Java plutôt que ce code pourri qu'on me pousse à écrire.<br />Plutôt que ces livraisons à refaire chaque mois.<br /><br /><p>A défaut de gouter ton sang et de me nourrir de tes entrailles, disséquons plutôt du Java. Du Java rouge Sang !</p>

class myfirstjavaprog
{  
        public static void main(String args[])
        {
           System.out.println("Hello World!");
        }
}