
La prochaine rencontre du JUG tourangeau aura lieu le 11 février dans les locaux de SUPINFO.
le sujet abordé sera "les annonces et tendances de la conférence Devoxx".
Pour vous inscrire ça se passe ici !
Aller au contenu | Aller au menu | Aller à la recherche

La prochaine rencontre du JUG tourangeau aura lieu le 11 février dans les locaux de SUPINFO.
le sujet abordé sera "les annonces et tendances de la conférence Devoxx".
Pour vous inscrire ça se passe ici !
Suite au commentaire d'Alexis MP ,j'ai décidé d'installer la version 2.1 de Glassfish ...
Après le début du support 64 bits d' Adobe Flash, des prémices de wine 64, voici Sun qui fournit désormais un plugin java 64 bits pour GNU/Linux. A mon avis, ca en est encore aux prémices. La version fournie sur le site de Sun est soit une tarball à installer soit même, soit un fichier RPM.
Que reste t'il à passer en 64 bits? Quelques codecs videos et drivers?
En tout cas c'est une bonne nouvelle pour le support 64 bits sur GNU/Linux et Ubuntu/Linux par la même occasion.
D'ici un an peut être, je repasserai mes stations de travail vers la version ubuntu amd64 
mais pas du bon coté
ça me rassure, je ne suis pas le seul à le penser! mais on oublie trop Weblogic Server qui est une sombre #%$ - pour celui qui veut utiliser openjpa comme fournisseur .
Voici en photo un sondage lors du dvoxx sur les serveurs d'applications favoris. Ca se passe de commentaires.
Me voici rendu à l'installation du serveur WEB et configuration du load labalancing coté HTTP...
S'il ne devait y avoir un seul bug au monde, je serai celui qui l'aurait ...
Si comme moi, vous utilisez netbeans, subversion et que votre utilisateur SVN a un mot de passe vide, logiquement au commit, vous devriez avoir le message suivant :
svn: missing argument: --password Type 'svn help' for usage.
Pour corriger ca:
Aller dans le menu Outils>Divers>Versionnning>Subversion>Manage Connection Settings.
Dans l'identifiant, vous rentrez ... votre identifiant et dans le mot de passe : ""
Oui vous avez bien lu 
Après vous aurez le message suivant
... Transmitting file data . Committed revision 3803. ... ==[IDE]== 18 nov. 2008 08:47:14 Committing... finished.
L'application que j'ai développée n'est pas mavenisée - honte sur moi! Comme je l'ai dit auparavant, le but est réellement de tester GLASSFISH
Il faut rajouter la balise suivante :
<distributable />
Après quelques modifications [1] j'obtiens le contenu suivant :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
<context-root>/travel-war</context-root>
<session-config>
<session-manager persistence-type="replicated">
<manager-properties>
<property name="persistenceFrequency" value="web-method" />
</manager-properties>
<store-properties>
<property name="persistenceScope" value="session" />
</store-properties>
</session-manager>
</session-config>
<class-loader delegate="true"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class' java code.</description>
</property>
</jsp-config>
</sun-web-app>
A ce point, l'application devrait pouvoir s'exécuter pleinement dans un environnement à haute dispo. Menfin espérons ....
La suite dans un prochain épisode
[1] La référence : Sun Java System Application Server 9.1 High Availability Administration Guide
Après avoir fait l'équivalent sous JBOSS, j'essaye de rentrer dans le mouve et réitérer la même chose sous Glassfish
J'ai réalisé pour l'occasion une petite application de démonstration. Elle gère un panier. Dans un premier temps, je lui fait gérer ce dernier en session HTTP. Après, je le ferai via un EJB STATEFUL
Voici l'architecture en vrac:
Bref, que du lourd techniquement
D'un point de vue fonctionnel, ce n'est , certes pas très transcendant. J'ai utilisé la base de données Travel fournie en standard sur netbeans.
Il faut initialiser un domaine glassfish. Si comme moi, vous avez installé Glassfish à partir du bundle netbeans, nous aurez à modifier légèrement le fichier $GLASSFISH_HOME/setup-cluster.xml
Pour info, la propriété domain.name est spécifié comme suit:
<property name="domain.name" value="domain1"/>
Il faut la modifier pour que le domaine puisse être crée.
ATTENTION : vous devez faire attention aux ports spécifiés dans ce fichier. Il ne faut pas qu'ils soient en conflit avec des applications existantes ( un domaine glassfish existant, un serveur jboss perdu dans un coin ...)
Après lancer la commande suivante :
$GLASSFISH_HOME/lib/ant/bin/ant -f setup-cluster.xml
Buildfile: setup-cluster.xml
[...]
validate-java:
[echo] Current Java Version 1.5.0_16
[...]
create.domain:
[exec] Using port 4848 for Admin.
[exec] Using port 8080 for HTTP Instance.
[exec] Using port 7676 for JMS.
[exec] Using port 3700 for IIOP.
[exec] Using port 8181 for HTTP_SSL.
[exec] Using default port 3820 for IIOP_SSL.
[exec] Using default port 3920 for IIOP_MUTUALAUTH.
[exec] Using default port 8686 for JMX_ADMIN.
[exec] Domain being created with profile:developer, as specified by variabe AS_ADMIN_PROFILE in configuration file.
[exec] The file in given locale [fr_FR] at: [C:\java\servers\glassfish-v2u2\lib\install\templates\locales\fr_FR\index.html] could not be found. Using defult (en_US) index.html instead.
[exec] Security Store uses: JKS
[exec] Domain domain-cluster-1 created.
[exec] Admin login information for host [localhost] and port [4848] is beig overwritten with credentials provided. This is because the --savelogin option
was used during create-domain command.
[exec] Login information relevant to admin user name [admin] for this doman [domain-cluster-1] stored at [C:\Documents and Settings\touret-a\.asadminpass
successfully.
[exec] Make sure that this file remains protected. Information stored in this file will be used by asadmin commands to manage this domain.
[delete] Deleting: c:\java\servers\glassfish-v2ur2\passfile
BUILD SUCCESSFUL
Total time: 29 seconds
Peut être que l'installation multi JDK me fera défaut....Wait & see ....
Avec asadmin:
$ bin/asadmin.bat start-domain --user admin domain-cluster-1 Starting Domain domain-cluster-1, please wait. Log redirected to C:\java\servers\glassfish-v2ur2\domains\domain-cluster-1\logs\server.log. 29 oct. 2008 08:56:34 com.sun.jbi.installer.JBIComponentsConfigurator configure INFO: Configuring jbi components... 29 oct. 2008 08:56:42 com.sun.jbi.installer.JBIComponentsConfigurator configure INFO: OpenESB JBI Components Configuration Successful The operation CONFIGURE on the addon jbi_components_configurator is complete. Redirecting output to C:/java/servers/glassfish-v2ur2/domains/domain-cluster-1/l ogs/server.log Domain domain-cluster-1 is ready to receive client requests. Additional services are being started in background. Domain [domain-cluster-1] is running [Sun Java System Application Server 9.1_02 (build b04-fcs)] with its configuration and logs at: [C:\java\servers\glassfish-v2ur2\domains]. Admin Console is available at [http://localhost:4848]. Use the same port [4848] for "asadmin" commands. User web applications are available at these URLs: [http://localhost:8080 https://localhost:8181 ]. Following web-contexts are available: [/web1 /__wstx-services ]. Standard JMX Clients (like JConsole) can connect to JMXServiceURL: [service:jmx:rmi:///jndi/rmi://127.0.0.1:8686/jmxrmi] for domain management purposes. Domain listens on at least following ports for connections: [8080 8181 4848 3700 3820 3920 8686 ]. Domain does not support application server clusters and other standalone instances.
Pour les utilisateurs du couple netbeans/ glassfish
Vous devez vous connecter sur la console d'administration et effectuer les actions suivantes
Dans le menu "Serveur d'Applications"

Activer le support du mode cluster

puis redémarrer le serveur d'applications
$ bin/asadmin.bat create-cluster --user admin --host 127.0.0.1 --port 4848 cluster-1 Please enter the admin password> Command create-cluster executed successfully.
$ bin/asadmin.bat create-node-agent --user admin --host 127.0.0.1 --port 4848 cluster-1-node-agent-1 Please enter the admin password> Command create-node-agent executed successfully.
Après la création on les démarre:
$ bin/asadmin.bat start-node-agent cluster-1-node-agent-1 Please enter the admin user name>admin Please enter the admin password> Please enter the master password [Enter to accept the default]:> Redirecting output to C:/java/servers/glassfish-v2ur2/nodeagents/cluster-1-node-agent-1/agent/logs/server.log Redirecting application output to C:/java/servers/glassfish-v2ur2/nodeagents/cluster-1-node-agent-1/agent/logs/server.log Command start-node-agent executed successfully.
Première instance
$ bin/asadmin.bat create-instance --user admin --nodeagent cluster-1-node-agent -1 --cluster cluster-1 cluster-1-nodeagent-1-instance-1 Using 38á081 for HTTP_LISTENER_PORT. Using 38á182 for HTTP_SSL_LISTENER_PORT. Using 33á821 for IIOP_SSL_LISTENER_PORT. Using 37á677 for JMS_PROVIDER_PORT. Using 33á701 for IIOP_LISTENER_PORT. Using 38á687 for JMX_SYSTEM_CONNECTOR_PORT. Using 33á921 for IIOP_SSL_MUTUALAUTH_PORT. Command create-instance executed successfully.
Deuxième instance
$ bin/asadmin.bat create-instance --user admin --nodeagent cluster-1-node-agent-1 --cluster cluster-1 cluster-1-nodeagent-1-instance-2 Using 38á082 for HTTP_LISTENER_PORT. Using 38á183 for HTTP_SSL_LISTENER_PORT. Using 33á822 for IIOP_SSL_LISTENER_PORT. Using 37á678 for JMS_PROVIDER_PORT. Using 33á702 for IIOP_LISTENER_PORT. Using 38á688 for JMX_SYSTEM_CONNECTOR_PORT. Using 33á922 for IIOP_SSL_MUTUALAUTH_PORT. Command create-instance executed successfully.
$ bin/asadmin.bat start-instance cluster-1-nodeagent-1-instance-1 Command start-instance executed successfully. $ bin/asadmin.bat start-instance cluster-1-nodeagent-1-instance-2 Command start-instance executed successfully.
J'en ai fini de la première partie, qui était la création de mon premier cluster. Mon ressentiment est très positif. On peut faire la totalité avec asadmin, la configuration des ports est automatique, ce qui est un GROS voire ENORME avantage par rapport à JBOSS :-). Je trouve même que ca rend beaucoup plus professionnel et me conforte dans l'idée que les serveurs d'application JAVA EE propriétaires sont désormais obsolètes. Un gros inconvénient, c'est qu'il existe qu'un seul domaine. Je pense faire prochainement un DAS et un domaine applicatif. La suite dans un prochain épisode
Vu que 80% des actions effectuées sur un projet tiennent du CRUD, il m' est apparu utile de créer un EJB générique qui pourrait être utilisé ou étendu dans d'autres EJB session
Voici la bête. Elle réutilise le findByExample que j'ai crée avant
C'est simple mais vachement utile
@Stateless
public class CRUDBean<T> implements CRUDLocal<T> {
@PersistenceContext
EntityManager em;
public T add(T entity) {
em.persist(entity);
return entity;
}
public T update(T entity) {
return em.merge(entity);
}
public void delete(T entity) {
em.remove(entity);
}
public List<T> findAll(Class<T> entityDescription) {
return em.createQuery("select o from " + entityDescription.getName() + " o ").getResultList();
}
public T findByPrimaryKey(Class<T> entityDescription, Long id) {
return em.find(entityDescription, id);
}
public List<T> findByExample(T example, OPERATOR operator) {
List<T> results = new ArrayList<T>();
StringBuffer queryByExample =
new StringBuffer("select A from ").append(
example.getClass().getSimpleName()).append(" A where ");
Field[] fields = example.getClass().getDeclaredFields();
// on remplit la requete
int numberOfParameters = 0;
final String CLAUSE = " ".concat(String.valueOf(operator)).concat(" ");
try {
for (Field current : fields) {
current.setAccessible(TRUE);
if (!Modifier.isStatic(current.getModifiers())) {
if (current.get(example) != null) {
queryByExample = queryByExample.append(" A.").append(
current.getName()).
append(" = ").
append(":").
append(current.getName()).append(CLAUSE);
numberOfParameters++;
}
}
}
if (queryByExample.substring(queryByExample.length() - CLAUSE.length()).equalsIgnoreCase(CLAUSE)) {
queryByExample =
queryByExample.delete(queryByExample.length() - CLAUSE.length() + 1, queryByExample.length());
}
// on peuple la requete
Query query = em.createQuery(queryByExample.toString());
for (Field current : fields) {
current.setAccessible(TRUE);
if (!Modifier.isStatic(current.getModifiers())) {
if (current.get(example) != null) {
if (current != null) {
query.setParameter(current.getName(), current.get(example));
}
}
}
}
results = query.getResultList();
} catch (Exception e) {
}
return results;
}
}
Pour exécuter ce code à forte valeur ajoutée, il vous faudra un vrai serveur JAVA EE5 ( donc vous pouvez oublier WEBLOGIC 10 qui ne supporte pas les EJB SESSION GENERIQUES :-D)
Ajouter à cet EJB, vous pouvez coupler un validateur appelé par un AroundInvoke et le tour est joué 
J'ai abordé dans un récent article le partenariat entre SUN et Canonical / Ubuntu. Je me permets d'aborder une nouvelle fort intéressante qui n'est apparu que sur quelques blogs anglophones.
Ubuntu offre maintenant du support sur les plateformes SUN Fire, SUN Sparc et SUN Ultra. De son coté, SUN a mis à jour sa 'stack' pour Ubuntu Hardy 8.04 LTS. Il est désormais possible via les dépots Universe et Multiverse d'avoir un environnement de développement et d'execution sans faire d'installation tierce . [1]
Au menu :
[1] Pour plus d'informations, voir la page du site de SUN à ce sujet
« billets précédents - page 2 de 4 - billets suivants »