Il s’agit d’une continuation de la programmation serveur dans JCo Partie 1. Dans cet article, je traiterai de la mise en place des constructions du programme Java faisant office de serveur.
L’objet Java clé dans la programmation du serveur JCO est le JCO.Server, qui est facile à utiliser, mais très puissant. À un niveau élevé, seules ces trois choses sont nécessaires pour configurer la classe de serveur :
- étendre la classe JCO.Server
- dans votre constructeur, appelez l’un des constructeurs JCO.Server
- remplacer le handleRequest(JCO.Function function) methode
Vous trouverez ci-dessous un exemple de configuration de serveur de base. Lorsque le serveur est en cours d’exécution, toutes les requêtes provenant du système SAP configuré seront envoyées au fonction handleRequest()
public class JcoServer extends JCO.Server
{
public JcoServer(String gwhost, String gwserver, String programid, IRepository repository)
{
super(gwhost,gwserver,programid,repository);
}
protected void handleRequest(JCO.Function function)
{
//code for the function goes here. expliqué plus tard
}
}
Pour démarrer réellement le serveur, la procédure standard consiste à écrire une classe wrapper qui gérera le démarrage et l’arrêt du serveur, l’obtention des paramètres de connexion, la configuration du référentiel, etc.
La classe JCO.Repository
La classe JCO.Repository est un objet important. Cet objet stocke le modèle du module fonction que vous avez créé, ou dans notre cas, emprunté, depuis SAP. Il existe deux manières différentes de créer le JCO.Repository :
- Créez-le manuellement en code Java avec des objets JCO.MetaData
- Demandez à la fonction JCO.createRepository() d’appeler SAP et de renvoyer automatiquement le modèle de fonction pour les structures d’importation, d’exportation et de table.
Dans le code ci-dessous, nous exploitons le référentiel créé par SAP. Le référentiel garde une trace des métadonnées de la fonction, de sorte que pendant l’exécution de votre serveur, il conserve les métadonnées des appels dans le référentiel. gardez à l’esprit que vous effectuez un appel RFC dans SAP pour obtenir les informations, vous aurez donc besoin des objets d’autorisation et des groupes de fonctions suivants :
- authorization objects S_RFC, ACTVT:16, FUGR
- Function Groups RFC1, SDIFRUNTIME, SG00, SRFC, SUNI, SYST
The JCO.Client Class
La classe JCO.Client est nécessaire ici car nous créons automatiquement le référentiel à partir de SAP. Si nous devions créer les métadonnées manuellement, nous n’en aurions pas besoin. Nous pourrions également créer un pool de connexions pour cela, mais c’est uniquement pour la recherche de métadonnées, donc je ne le fais pas. J’utilise également un fichier de propriétés pour créer la connexion client à SAP. Ceci est très utile et comporte plusieurs paramètres de connexion intégrés. J’utilise juste le strict minimum ici :
- jco.client.client SAP client
- jco.client.user Logon user
- jco.client.passwd Logon password
- jco.client.lang Logon language
- jco.client.sysnr SAP system number
- jco.client.ashost SAP application server
- jco.client.gwhost Gateway host
- jco.client.gwserv Gateway service
public class JcoWrapper
{
private JcoServer jcs = null;
public static void startServer()
{
java.util.Properties props = new java.util.Properties();
java.net.URL url = ClassLoader.getSystemResource(“sapconnection.properties”);
props.load(url.openStream());
JCO.Client client = JCO.createClient(props);
IRepository repository = JCO.createRepository(“REP”, client);
JcoServer jcs = new JcoServer
(“gwhost”, //gateway host, often the same as host
“sapgw00”, //gateway service, generally sapgw+
“JCOSERVER01”, // corresponds to program ID defined in SM59
repository);
jcs.start();
}
public static void stopServer()
{
jcs.stop();
}
public static void main(String[] args)
{
this.startServer() ;
}
}
Alors maintenant, avec les parties 1 et 2, nous avons la possibilité d’écouter les appels SAP. La troisième partie portera sur la façon de faire quelque chose avec les données que nous recevons.