Home » Archive by category "Programmation"

Condensé sur les EJB du J2EE

Je suis actuellement amené à utiliser des EJB. Aussi, ne maîtrisant pas vraiment le sujet j’ai fait un condensé ici de ce que j’ai trouvé sur le oueb … autant que ça profite à tout le monde !

Définition :

EJB ou “Enterprise JavaBeans” est une architecture de composants logiciels coté serveur pouvant évoluer dans un contexte transactionnel permettant de représenter :

  • des données – Entité (Déprécié. Voir JDO ou JPA : java Persistence API en remplacement.)

    • CMP : Container Managed Persistence
    • BMP : Bean Managed Persistence
  • des services – Session
    • Une interface Java : toutes les méthodes déclarées ici sont apellées “Méthodes Métiers”. Elles sont accessible depuis le client
      • @Remote : Accessible au travers du réseau
        • RMI : remote Method Invocation
        • JNDI : Java Naming and Directory Interface
      • @Local : Accessible uniquement à partir du serveur d’applications
    • Une classe (qui implémente l’interface) : toutes les méthodes qui sont déclarées ici et non dans l’interface ne seront pas accessible depuis le client.
      • @Stateful : avec conservation de l’état (static)
        • Créer un mode Conversationnel
          Serveur <======> Client
          Coûte au serveur
        • @Remove / @PrePassivate / @PostActivate
      • @Stateless : sans conservation de l’état
        A utiliser par défaut pour une diminution des coûts serveur.

        • @PostConstruct / @PreDestroy

Il est possible que ces deux annotations prennent l’attribut : MappedName qui précise le nom de l’EJB dans l’annuaire du serveur d’applications.

  • des tâches de manière asynchrone – Message
    • Fonctionnent en tandem avec l’API JMS (Java Message Service)
    • Réactifs à des évènements
    • Abonnés à des fils de discussion

Attention :

  • Un EJB n’est pas un composant Multi-thread, de ce fait, il ne peut pas servir plusieurs clients à la fois. La création / fermeture des Thread est de la responsabilité du serveur d’applications.
    De plus, il ne doit pas utiliser de mécanisme de synchronisation avec d’autres Thread.
  • Un EJB ne doit pas utiliser de champs statiques. il est cependant autorisé à les lires.
  • Les composants suivant lui sont totalement interdits :
    • AWT / Swing
    • Clavier
    • Console de sortie
    • Système de fichiers
    • Utilisation directe de sockets
    • Accès JDBC directs
  • Un EJB ne doit pas tenter d’accéder au(x) “class loader”.
  • Un EJB ne doit pas utiliser de librairie native.
  • Un EJB ne doit pas passer “this” comme argument d’une méthode qu’il appelle.

Les DAO ou fournisseurs d’objets, placent les objets métiers contenus dans la mémoire vive sur un support physique.

Annotations

EJB Timer

Remarque (bug?) : pour prendre en charge la suite, un serveur d’application Glassfish v3.0.0 à v3.1.1 doit recevoir un paramétrage approprié par cette commande :

asadmin set server.ejb-container.property.disable-nonportable-jndi-names=”true”

@Startup : au lancement de l’EJB. Souvent utilisée avec @Singleton (Design pattern pour assurer une instance unique)
@PostConstruct : Après le lancement
@PreDestroy
@Schedule(dayOfMonth=4,hour=*) : Programme une exécution
@Timeout : désigne la méthode à exécuter

Transactions

@TransactionAttribute(value=?)

  • TransactionAttributeType.REQUIRED : S’intègre à une transaction existante, en débute une nouvelle sinon
  • TransactionAttributeType.REQUIRES_NEW : Débute une nouvelle transaction systématiquement.
  • TransactionAttributeType.MANDATORY : Une transaction doit déjà exister. Sinon, une exception est levée.
  • TransactionAttributeType.SUPPORTSS’intègrera à une transaction existante, mais ne pourra pas en débuter une s’il n’en n’existe pas.
  • TransactionAttributeType.NOT_SUPPORTED : Ne sait pas s’intégrer à une transaction existante. Ne sait pas en débuter une.
  • TransactionAttributeType.NEVERN’accepte pas d’être dans une transaction, et lève une exception si une est en cours.

@ApplicationException(rollback=true) : Provoquent l’annulation de la transaction en cours si elles sont levées par le service.

Gestion des transactions :
  • Contain Manager : les transactions sont gérées par le serveur d’application, le développeur d’EJB n’a à se préoccuper de rien.
  • Bean Managed : l’EJB gère lui même la transaction (fournie par le serveur d’applications) dans laquelle il travaille. Il doit appeller correctement les méthodes :
    • begin()
    • commit()
    • rollback()

EJBClientSide

EJB J2EE

Aller un peu plus loin au niveau des Servlets JAVAEE

Source, Source, Source, Source et Source

Amis développeurs, formez et informez vous facilement

Tous les développeurs le savent, les langages, techniques, possibilités de développement, évoluent vraiment de plus en plus vite, si bien qu’il en devient totalement impossible de suivre toutes les avancées & nouveautés techniques sur tous les langages à la fois.

Human Coders permet de réduire ce problème autant que possible en proposant des news agrémentées par des professionnels ou la par des membres de la communauté sous forme de flux RSS.

En s’inscrivant sur le site, il est possible de “s’abonner” aux seules news des langages qui vous intéressent.

Au menu des News, il y a :

Ruby
Javascript
HTML5
PHP
Java
iOS
Python
Android
.Net
NoSQL
Prog. Fonctionelle

Et de façon plus générale :

Dev. Front
Entrepreneuriat
Startups
Web Design
Windows 8
Human Coders (évidemment :) )

Les news sont séparées visuellement par des étiquettes de couleurs.

Mais c’est aussi beaucoup d’autres choses :

  • Des offres d’emploi sont disponibles par villes, ainsi que des Formations !
  • Une application Android est également disponible sur le Market.
  • Des Human Talks peuvent être organisées par n’importe qui et n’importe où permettant de partager et/ou découvrir des sujet tech variés.
    Chaque développeur présent ayant la possibilité de faire une présentation de 10 minutes
    (personnellement je trouve l’idée géniale, j’ai hâte qu’il y en a une organisée dans la PACA ^^).
  • Un blog pour les résumés des Talks, des conseils, des interviews etc …

Réalisé par des humains et pour des humains, le site a pour seul vocation de lancer un mouvement de codeurs qui apprennent, codent et partagent avec plaisir !

Top 10 des algorithmes du 20ème siècle

 

Un algorithme est “une suite finie et non-ambiguë d’opérations ou d’instructions permettant de résoudre un problème” (WIKI)

Jack Don-garra (University of Tennessee et Oak Ridge National Laboratory) et Francis Sullivan (Center for Computing Sciences at the Institute for Defense Analyses) ont publié récemment une liste appellée : “Top Ten Algorithms of the Century

Le document PDF ci-dessous détaille cette liste des 10 algorithmes ayant eu le plus d’influence sur les développements ou dans le domaine des sciences pour le 20ème siècle.

Download (PDF, 43KB)

 

Si vous voulez plus d’infos (et vous arracher les cheveux, la tête, les ongles de pieds et le reste) sur les algorithmes en eux mêmes voici quelques liens :

Instanciation dynamique de classes en PHP

Il peut arriver que l’on ai a faire cette chose étrange qu’est d’instancier dynamiquement une classe ainsi qu’une ou plusieurs de ces méthodes.

Hé bien en PHP c’est possible, et vraiment très simple. Comme dirait l’autre il suffisait de le savoir ^^.

donc par exemple pour faire :

$classe = new ma_classe();
$classe->modifier();

Il est possible de faire :

$nom_de_la_classe='ma_classe';
$nom_de_la_methode_de_la_classe='modifier';
 
$classe = new $nom_de_la_classe();
$classe->{$nom_de_la_methode_de_la_classe}();

A partir de là s’ouvrent beaucoup de possibilités comme :
– passer un nom de classe / méthode en paramètre d’une fonction
– récupérer le nom d’une classe / méthode à partir d’une opération effectuée précédemment
– parcourir un tableau contenant des noms de classes / méthodes
– etc …

Une faille dans MySQL

 

Une faille a été trouvée dans MySQL et MariaDB. Elle permet à n’importe qui de se connecter en tant que “root” en tapant simplement la ligne suivante dans votre terminal :

$ for i in `seq 1 1000`; do mysql -u root –password=bad -h 127.0.0.1 2>/dev/null; done

Le principe consiste à saturer le logiciel de tentatives d’authentifications. Il suffit simplement de connaitre le login (dans la plus part des cas “root”), et quelques centaines d’essais plus tard facilement réalisés par la boucle (ici 1000 essais sont demandés), la fonction  accorde l’accès avec n’importe quel mot de passe.
Cette faille est possible car lorsqu’un utilisateur tente de se connecter, un jeton (token SHA généré à partir du mot de passe et d’une valeur aléatoire) est calculé et comparé à la valeur attendue. il arrive que les 2 valeurs soient considérées comme égales alors qu’elles ne le sont pas.

Les versions concernées sont :
MySQL 5.1.61, 5.2.11, 5.3.5, 5.5.22 et toutes les versions de MariaDB
MySQL 5.5.23 de Fedora et d’OpenSUSE 12.1 64-bit
Ubuntu 64-bit 10.04, 10.10, 11.04, 11.10, et 12.04

Comment se protéger en attendant un patch ? Interdisez l’accès de l’extérieur à la base :

    • éditer le my.cnf :
    • ajouter : bind-address=127.0.0.1

Ainsi votre base de données ne sera plus accessible que par le serveur lui meme et le port 3306 ne sera plus ouvert depuis l’extérieur (tester avec un NMAP par exemple, ou un netstat -an)

Pour le suivi des bug report, c’est par ici :

MariaDB bug report: https://mariadb.atlassian.net/browse/MDEV-212
MariaDB fix: http://bazaar.launchpad.net/~maria-captains/maria/5.1/revision/3144

MySQL bug report: http://bugs.mysql.com/bug.php?id=64884
MySQL fix: http://bazaar.launchpad.net/~mysql/mysql-server/5.1/revision/3560.10.17
MySQL changelog:
  http://dev.mysql.com/doc/refman/5.1/en/news-5-1-63.html
  http://dev.mysql.com/doc/refman/5.5/en/news-5-5-24.html

Pour finir, sachez que MariaDB et MySQL sont des SGBD parmis les plus utilisés au monde, les deux sont donc intéressants à comparer : http://dasini.net/blog/2010/12/30/bench-mariadb-vs-mysql/

Source & source & source 

 

AWSOM Powered