6 novembre 2007

Purge du cache Unix AIX avec "slibclean"

Dans certains cas, malgré la copie d'une nouvelle version des exécutables, HR Access fonctionne encore avec l'ancienne version des programmes (en cause : le cache Unix AIX).

Pour purger le cache AIX, il existe la commande "slibclean" (NB : Cette commande est réservée au compte "root").

En préalable à ce genre d'opération, assurez vous qu'il ne s'agit pas d'une rémanence de processus BHR (le "time out" peut être la source d'un déphasage) :
  • Fermer et ouvrir le dispatcher. 
  • En cas de nécessité tuer les processus.

21 septembre 2007

Compte Oracle verrouillé

Vu sous Oracle v10 : après 10 tentatives de connexion infructueuses, le compte se verrouille.

sqlplus hr/********
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 21 14:55:19 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-28000: the account is locked

En se connectant administrateur, on peut en faire le constat :
sqlplus / as sysdba
select username, account_status from dba_users where username='HR';
         
         USERNAME                       ACCOUNT_STATUS
         ------------------------------ --------------------------------
         HR                             LOCKED

Pour déverrouiller le compte :

alter user HR account unlock;

Les paramètres à l'origine de ce comportement sont consultables dans la vue "dba_profiles" :

select profile,resource_name,limit from dba_profiles where resource_type='PASSWORD' order by profile;

PROFILE                        RESOURCE_NAME                    LIMIT
------------------------------ -------------------------------- ----------------------------------------
DEFAULT                        FAILED_LOGIN_ATTEMPTS            10
DEFAULT                        PASSWORD_LIFE_TIME               UNLIMITED
DEFAULT                        PASSWORD_REUSE_TIME              UNLIMITED
DEFAULT                        PASSWORD_REUSE_MAX               UNLIMITED
DEFAULT                        PASSWORD_VERIFY_FUNCTION         NULL
DEFAULT                        PASSWORD_LOCK_TIME               UNLIMITED
DEFAULT                        PASSWORD_GRACE_TIME              UNLIMITED

Pour supprimer ce comportement, tapez :
alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED;

27 mai 2007

Outil perl pour tester l'accès à un port IP

Ceci est particulièrement utile (quand le réseau possède des firewall / routeurs) pour voir si un port est accessible ou s'il est bloqué ... Merci François pour cet utilitaire.

  1. Copier le code suivant sur la machine Unix ciblée (par exemple sous le nom TestPortIP.pl).
  2. Fermer le programme utilisant ce port (AP0, Tomcat, OpenHR ...), sinon une erreur "Failed to initialize socket" apparaitra du fait d'un conflit d'accès.
  3. L'exécuter en lui passant en paramètre le port à tester (par exemple "perl TestPortIP.pl 2222").
  4. Sur votre poste Windows, ouvrir une fenêtre DOS et exécutez un telnet en précisant la machine et le port ciblés (par exemple "telnet 10.20.30.40 2222").

Si le telnet (au bout de son time out) n'arrive pas à accéder au serveur, une erreur apparaît, le port est bloqué.

Dans le cas contraire, un message "got a connection from:" apparait sur le serveur et "Smile from the server" sur le PC.

#!/usr/bin/perl

use Socket;
$port = $ARGV[0];

$server_struct = pack("S n a4 x8", AF_INET, $port, $server_addr);
$proto = (getprotobyname('tcp'))[2];
socket(MYSOCK, PF_INET, SOCK_STREAM, $proto)|| die "Failed to initialize socket: $!\n";
setsockopt(MYSOCK, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";

my $paddr = sockaddr_in($port, INADDR_ANY);

# bind to a port, then listen
bind(MYSOCK, $paddr) or die "bind: $!";
listen(MYSOCK, SOMAXCONN) or die "listen: $!";
print "SERVER started on port $port\n";

# accepting a connection
my $client_addr;
while ($client_addr = accept(CLIENT, MYSOCK)) {
        # find out who connected
        my ($client_port, $client_ip) = sockaddr_in($client_addr);
        my $client_ipnum = inet_ntoa($client_ip);
        my $client_host = gethostbyaddr($client_ip, AF_INET);
        # print who has connected
        print "got a connection from: $client_host", "[$client_ipnum]\n";
        # send them a message, close connection
        print CLIENT "Smile from the server";
        close CLIENT;
}

20 mai 2007

Upgrade Java et erreur OpenHR "while reading SSL Site Parameters"

Vu sous HR Access 3e
Si a l'ouverture de OpenHR, vous avez une erreur fatale avec le message suivant :

[main] ERROR - OPHRS4201 Error occured while reading SSL Site Parameters org.apache.xml.dtm.DTMConfigurationException: No default implementation found at org.apache.xml.dtm.DTMManager.newInstance(DTMManager.java:177)

  1. Stoppez les serveur Web, Query et OpenHR
  2. Renommez "$SIGACS/openhr/lib/boot" en boot.old
  3. Renommez "$SIGACS/query/lib/boot" en boot.old
  4. Redémarrez.

Si le test est concluant, vous pouvez détruire les répertoires suffixés en ".old"

A priori, un upgrade Java a eu lieu sur la machine et la librairie Xalan Apache utilisée jusqu'alors par OpenHR entre en concurrence avec celle de Java.

13 mai 2007

Passer par un tableau Cobol indexé permet de limiter les accès SQL.
Utilisez ensuite des SEARCH pour être plus performant.

Exemple :

01 CountryTable.
   02 Country OCCURS 243 TIMES INDEXED BY Cidx.
      03 CountryCode    PIC XX.
      03 CountryName    PIC X(26).
...
          SET Cidx TO 1
          SEARCH Country
             AT END MOVE "Code not found" TO CountryNameSF
             WHEN CountryCode(Cidx) = CountryCodeWF
                  MOVE CountryName(Cidx) TO CountryNameSF
          END-SEARCH
...

Exemple complet sur http://www.csis.ul.ie/

Remarques :
  • Initialisez le tableau ligne à ligne avec un COB INITIALYZE,
  • Le remplir d'occurrences triées.

20 février 2007

Créer un EAR pour HR Access Web v5 sous Websphere

Un fichier EAR (Enterprise Application aRchive) contient des informations supplémentaires par rapport au fichier WAR classique. Il contient notamment le nom de l'application déployée ainsi que le "context root". Le fichier EAR, tout comme le WAR, est un fichier zip.

Pour créer le fichier EAR, il faut respecter les étapes suivantes :
  1. Créer un répertoire du nom de l'application à déployer (par exemple : hraccess).
  2. Copier dans ce répertoire le fichier WAR (ex : hraccess.war).
  3. Créer un répertoire META-INF.
  4. Créer un fichier application.xml dans le répertoire META-INF, contenant les lignes indiquée plus loin,
  5. Adaptez les informations surlignées,
  6. Zipper le répertoire complet du nom de l'application (hraccess).
  7. Renommer le fichier hraccess.zip en hraccess.ear
Exemple de application.xml:
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application
1.2//EN" "http://java.sun.com/j2ee/dtds/application_1_2.dtd">
<application id="Application_ID">
<display-name>hraccess</display-name>
<module id="WebModule_1">
<web>
<web-uri>hraccess.war</web-uri>
<context-root>hraccess</context-root>
</web>
</module>
</application>


 A noter :
  • <display-name> hraccess </display-name> précise le nom de l'application Web déployée.
  • <web-uri> hraccess.war </web-uri> précise le nom du fichier WAR contenu dans le fichier EAR.
  • <context-root> hraccess </context-root> précise le "context root" de l'application. Il s'agit du path à renseigner dans l'url (ex : http://NomServeur:NumPort/hraccess) correspondant à l'application Web.