arrowAccueil arrow Notes d'installation arrow Ofbiz / Neogia 01-08-2010
En Bref
Ayant repris en mai 2005 mon activité professionnelle,  je n'ai plus le temps de mettre à jour le site. Veuillez m'en excuser.


 
Menu
Accueil
Présentation
Avantages
Inconvénients
Documents de référence
Mot de l'auteur
- - - - - - -
Popularité
Anomalies
Notes d'installation
Mes logiciels
- - - - - - -
Liens web
Infos (Archives)
- - - - - - -
Me contacter
Administration
En ligne
Il y a actuellement 1 invité en ligne
Compteur
Visiteurs: 152899
Ofbiz / Neogia Convertir en PDF Version imprimable Suggérer par mail
20-12-2004

Objectif

Exemple de création par Neogia d'un nouveau composant Ofbiz
Ce composant sera en grande partie généré automatiquement par Neogia à partir de son modèle UML (diagramme de classes).
Le composant appelé ANOMALIE sera composé de 3 entités ANOMALIE, ANOMALIETYPE ET GRAVITE.
L'entité sera aussi en relation avec l'entité préexistante PARTY.

Installation faite sous Mandrake 10.0 le 10/12/2004

Prérequis et versions utilisées pour cet exemple

j2sdk : v1.4.2_01
client cvs (Neogia est géré sous CVS) : v1.11.16
client svn (Ofbiz est géré sous Subversion) : v1.1.1
ant : v1.6.2
poseidon for uml : v3.0 "community edition" (licence commerciale gratuite)
maven : v1.0.2

Installation Neogia et Ofbiz

Répertoire d'installation nommé $HOME

Documentation de référence

www.neogia.org

Récupération Neogia

cd $HOME
cvs -d :pserver::/cvsroot/neogia login
cvs -z3 -d :pserver::/cvsroot/neogia co neogia

=> résultat : Neogia descendu dans $HOME/neogia

Récupération Ofbiz et "merge" Ofbiz-Neogia

cd $HOME/neogia
ant all

=> résultat : Ofbiz descendu dans $HOME/ofbiz (ce répertoire ne servira plus par la suite) et ofbiz+neogia dans $HOME/ofbizNeogia

Installation et initialisation Ofbiz

cd $HOME/ofbizNeogia
ant run-install


Installation des generateurs de Neogia

cd $HOME/neogia/generators
maven


Préparation du composant

cd $HOME/neogia/components
cp -R neogia-component-template anomalie
cd anomalie

* dans le fichier project.xml, modifier ligne
<id>accounting</id>
par
<id>anomalie</id>
* dans le fichier project.properties, modifier les 2 lignes :
packageParam=org.neogia.accounting
packageName=accounting
par
packageParam=org.neogia.anomalie
packageName=anomalie

cd $HOME/neogia/components/anomalie
maven

1ère erreur rencontrée :
BUILD FAILED
File...... /home/mayjo/.maven/cache/maven-topia-plugin-0.27/plugin.jelly
Element... ant:xslsrc
Line...... 369
Column.... 36
Impossible de trouver le fichier


dans $HOME/neogia/neogiaproject.xml
remplaçer
<dependency>
<groupId>lutinlib</groupId>
<artifactId>maven-topia-plugin</artifactId>
<version>0.27</version>
<type>plugin</type>
</dependency>
par
<dependency>
<groupId>lutinlib</groupId>
<artifactId>maven-topia-plugin</artifactId>
<version>0.25</version>
<type>plugin</type>
</dependency>

2ème erreur rencontrée :
Tentative de téléchargement de jregex1.2_01.jar.
ATTENTION: Impossible de télécharger jregex1.2_01.jar.

Il faut alors aller le chercher manuellement et le mettre dans le répertoire de maven /...../.maven/repository/externallib/jars

Modélisation Uml du composant

cd $HOME/neogia/components/anomalie/src/zuml
mv component.zuml anomalie.zuml

* lancer Poseidon et ouvrir le fichier anomalie.zuml
* créer packages org.neogia.anomalie.techdata.entities
* créer un diagramme de classe dans le package entities
* créer la classe Anomalie dans le package entities en positionnant le stéréotype à entity et les valeurs étiquetés (tags) "gui=list,edit,show,lookup", "shortName=ano"
* créer package java.lang contenant une classe "String" et un type de données "int"
* revenir à la classe anomalie et créer attribut "idNumber" de type int avec visibilité "protected" et tags "primaryKey=true", "mandatory=true","value=nextSeqId","gui=indexed, list, listLookup","ofbizEntityType=id-ne"
* créer attribut "description" de type String avec visibilité "protected" et tags "mandatory=true", "gui=indexed, list"

* créer la classe AnomalieType? dans le package entities en positionnant le stéréotype à entity et les valeurs étiquetés (tags) "gui=list,edit,lookup, drop-down", "shortName=ant"
* créer attribut "idName" de type String avec visibilité "protected" et tags "primaryKey=true", "mandatory=true","value=nextSeqId","gui=indexed, list","ofbizEntityType=id-ne"
* créer attribut "description" de type String avec visibilité "protected" et tags "mandatory=true", "gui=indexed, list"
* créer une association (*,1) entre la classe Anomalie et AnomalieType?

* la classe Gravité étant de type "énumération", nous allons devoir faire référence à la classe Enumeration présente dans le modèle Ofbiz
* créer les packages org.neogia.common.enum.entities
* dans le package entities, créer un diagramme de classes puis la classe Enumeration en positionnant les stéréotypes entity et extern
* revenir dans la package org.neogia.anomalie.techdata.entities et créer la classe Gravite en positionnant le stéréotype à entity et les valeurs étiquetés (tags) "gui=list,lookup,drop-down", "shortName=grv"
* créer attribut "MINOR" de type String avec visibilité "public", changeability "frozen", modificateurs "static" et tags "staticValue=GRV_MINOR"
* idem pour l'attribut "MAJOR"
* créer une relation de généralisation entre les classes Enumeration et Gravite en affectant la valeur "enumTypeId" à la cractéristique de distinction

* la classe Anomalie étant en relation avec la classe PARTY préxistante dans Ofbiz
* créer le package org.neogia.party.party.entities
* y créer la classe Party en positionnant les stéréotypes entity et extern
* créer une association (*,1) entre la classe Anomalie et Party

* voilà, la modélisation étant terminée, nous sauvegardons sous Poseidon le fichier anomalie.zuml

Génération des fichiers

cd $HOME/neogia/components/anomalie
maven

ne pas tenir compte des messages "WARNING : Class java.lang.Thread not found in model" et "ERROR file not found :src/uilabels/AnomalieUiLabels?.properties"
=> résultat : les fichiers spécifiques au composant sont générés sous $HOME/neogia/components/anomalie/target/gen, les fichiers communs sont générés dans $HOME/neogia/components/anomalie/dist

Ce répertoire dist va nous permettre de préparer l'ensemble des fichiers du composant à livrer à Ofbiz.

Préparation de la livraison à Ofbiz

cp -R $HOME/neogia/components/anomalie/target/gen/anomalie $HOME/neogia/components/anomalie/dist
cd $HOME/neogia/components/anomalie/dist/anomalie


* sous /config, renommer le fichier AnomalieUiLabelsG?.properties en AnomalieUiLabels?.properties
- remplacer les débuts de ligne #a par A ex:
#anomalieAnomalieTypeNotExist=AnomalieType? Not Exist
#anomalieParty=Party
par
AnomalieAnomalieTypeNotExist?=AnomalieType? Not Exist
AnomalieParty?=Party
- récupérer aussi les intitulés commençant par Common du fichier de servicemgnt, ex:
CommonAdd?=Add
CommonAny?=Any
QUESTION : pourquoi ces 2 opérations ne sont pas faites automatiquement ?

* sous /data, renommer le fichier anomalieDataG.xm en anomalieData.xml
* sous /servicedef,récuperer le fichier services.xml de $HOME/ofbizNeogia/components/example/servicedef/ puis enlever toutes les balises <service> (et leur contenu), intégrer ensuite toutes les balises <service> du fichier servicesG.xml dans le fichier services.xml
* sous src/org/ofbiz/anomalie/techdata/developed, renommer les fichiers xxxG.java en xxx.java

* sous webapp/anomalie/includes, créer le fichier appheader.ftl en prenant comme exemple celui sous $HOME/neogia/components/servicemgnt/dist/servicemgnt/webapp/servicemgnt/includes
ce qui donne quelque chose comme :
<div class="apptitle"> ${uiLabelMap.AnomalieApplication?} </div>
<div class="row">
<div class="col"><a href="<@ofbizUrl>/main</@ofbizUrl>" class="${selectedLeftClassMap.main?default(unselectedLeftClassName)}">${uiLabelMap.CommonMain?}</a></div>
<#if security.hasEntityPermission("ANOMALIE", "_CREATE", session)>
<div class="col"><a href="<@ofbizUrl>/ListAnomalie?</@ofbizUrl>" class="${selectedLeftClassMap.anomalie?default(unselectedLeftClass)}">${uiLabelMap.AnomalieListAnomalie?}</a></div>
</#if>
<#if requestAttributes.userLogin?has_content>
<div class="col-right"><a href="<@ofbizUrl>/logout</@ofbizUrl>" class="${selectedRightClassMap.logout?default(unselectedRightClassName)}">${uiLabelMap.CommonLogout?}</a></div>
<#else>
<div class="col-right"><a href='<@ofbizUrl>${requestAttributes.checkLoginUrl?if_exists}</@ofbizUrl>' class='${selectedRightClassMap.login?default(unselectedRightClassName)}'>${uiLabelMap.CommonLogin?}</a></div>
</#if>
<div class="col-fill"> </div>
</div>

* sous webapp/anomalie/techdata, créer le répertoire /developped
* créer un fichier TabBarSubMenu?.ftl en repartant de l'exemple sous $HOME/neogia/components/servicemgnt/dist/servicemgnt/webapp/servicemgnt/timeSheet/developped
ce qui donne quelque chose comme :
<div class='tabContainer'>
<a href="<@ofbizUrl>/ListAnomalie?</@ofbizUrl>" class="${selectedClassMap.timesheet?default(unselectedClassName)}">${uiLabelMap.Anomalie}</a>
<a href="<@ofbizUrl>/AnomalieSelection??actionForm=add</@ofbizUrl>" class="${selectedClassMap.anomalie?default(unselectedClassName)}">${uiLabelMap.AnomalieNewAnomalie?}</a>
</div>

on pourra par la suite créer plusieurs sous menus (cf plus loin).

* sous webapp/anomalie, créer le fichier main.ftl en repartant de l'exemple sous $HOME/neogia/components/servicemgnt/dist/servicemgnt/webapp/servicemgnt/

* sous webapp/anomalie/WEB-INF/pagedefs/techdata/generated, renommer les fichiers ListxxxG?.xml et EditxxxG?.xml en enlevant le G

* sous webapp/anomalie/WEB-INF, récuperer le fichier controller.xml de $HOME/ofbizNeogia/components/nservicemgnt/webapp/servicemgnt/WEB-INF, supprimer les balises <request-map> et <view-map> liées au composant service mgnt et y intégrer ensuite toutes les balises <request-map> et <view-map> du fichier controlerG.xml. J'ai choisi de prendre cet exemple plutôt que le fichier issu de example car j'ai eu des soucis avec (erreur au lancement Ofbiz).
* sous webapp/anomalie/WEB-INF, récupérer tel quel le fichier web.xml à partir de $HOME/ofbizNeogia/components/example/webapp/example/WEB-INF

* sous webapp/anomalie/WEB-INF/actions/includes, adapter le fichier envsetup.bsh en repartant de l'example sous $HOME/neogia/components/servicemgnt/dist/servicemgnt/webapp/servicemgnt/WEB-INF/actions/includes

Mise à jour de OFBIZ

cp -R $HOME/neogia/components/anomalie/dist/anomalie $HOME/ofbizNeogia/components
cd $HOME/ofbizNeogia/components
mv anomalie nanomalie
(on le préfixe par n pour bien le distinguer d'un composant Ofbiz)

* sous $HOME/ofbizNeogia/components/nanomalie,récupérer les exemples dans $HOME/ofbizNeogia/components/nservicemgnt des fichiers build.xml et ofbiz-component.xml et les adapter

* dans $HOME/ofbizNeogia/base/config/component-load.xml, ajouter nanomalie

Génération Ofbiz

cd $HOME/ofbizNeogia/components/nanomalie
ant

=> erreur rencontrée :
[javac] /home/mayjo/ofbizNeogia/components/neogia/src/org/ofbiz/anomalie/generated/AnomalieLookupParams?.java:38: cannot resolve symbol
[javac] symbol : class LookupParams?
[javac] location: class org.ofbiz.anomalie.generated.AnomalieLookupParams?
[javac] public static final String module = LookupParams?.class.getName();
=> dans $HOME/ofbizNeogia/components/neogia/src/org/ofbiz/anomalie/generated/AnomalieLookupParams?.java
modif ligne :
public static final String module = LookupParams?.class.getName();
par
public static final String module = AnomalieLookupParams?.class.getName();

QUESTION : pourquoi cette erreur ?

cd $HOME/ofbizNeogia
ant run-install

Lancement Ofbiz

cd $HOME/ofbizNeogia
sh startofbiz.sh
tail -f logs/console.log

* vérification ofbiz bien lancé: saisir l'url "https://127.0.0.1:8443/webtools" dans votre navigateur, sélectionner le bouton "login" et saisir admin/ofbiz comme user/password

* Vous avez normalement un nouvel onglet correspondant au composant Anomalie avec des forms générées automatiquement

* Pour améliorer l'application, on pourra modifier les menus et sous-menus :
- modifier appheader.ftl dans $HOME/ofbizNeogia/components/nanomalie/webapp/anomalie/includes pour ajouter des menus au niveau le plus haut du composant
- créer d'autres sous-menus sous $HOME/ofbizNeogia/components/nanomalie/webapp/anomalie/techdata/developed en clonant le fichier TabBarxxx?.ftl et en modifiant la référence à ce nouveau fichier dans les fichiers xxx.xml sous webapp/anomalie/WEB-INF/pagedefs/techdata/generated
< Précédent   Suivant >
 
top