[java]SAP JCO Connexion Factory
Bonjour
pour faciliter les connexions à SAP j'ai développé une petite factory qui utilise sapjco3 et sapidoc3
le but est de faciliter l'utilisation de sapjco en fournissant un factory.
La connexion est définie comme une ressource classique en java et bénéficie donc de la possibilité "try with resource" de java7
de plus la connexion factory expose via jmx l'accès au information sur la librairie sapjco, permet de modifier dynamiquement le niveau de trace.
pour chaque connexion (destination au sens SAP) un MBean est exposé permetant de visualiser ses propriétés et assure une test de connexion (ping)
https://github.com/sekaijin/jco-fact...x.png?raw=true
une difficulté rencontrée avec sapjco3 est que cette librairie ne peux être utilisée avec maven sans à utiliser le scope système ce qui ne facilite pas la portabilité du projet de poste en poste. pour pallier cette difficulté j'ai inclus deux sous projet sapjco et sapidoc qui ne sont que des coquilles vides reproduisant l'API de SAP.
cela permet de compiler un project jco ou idoc sans avoir les librairie. mais au runtime rien ne peut se substituer aux librairies fournies par SAP.
Code:
1 2 3 4 5 6 7 8
| DestinationDataProvider.startup(4, "target");
Properties prop = readProperties();
JcoConnexionFactory connexionFactory = new JcoConnexionFactoryImpl();
try( JCoConnexion connexion = connexionFactory.getConnexion(aDestinationName, prop);){
JCoDestination destination = connexion.getDestination();
destination.ping();
DestinationDataProvider.shutdown();
}... |
Vous pouvez l'utiliser avec osgi
Dans ce cas le démarrage ( DestinationDataProvider.startup();) et l'arrêt (DestinationDataProvider.shutdown();) sont automatiques: pris en charge par l'activator.
vous pouvez l'utilisé via bleuprint (ou spring-dm)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <blueprint
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<manifest xmlns="http://karaf.apache.org/xmlns/deployer/blueprint/v1.0.0" xsi:schemaLocation="http://karaf.apache.org/xmlns/deployer/blueprint/v1.0.0 http://karaf.apache.org/xmlns/deployer/blueprint/v1.0.0">
Export-Service = com.sap.conn.jco.factory.JCoConnexion
Bundle-Name = CUSTOMER :: SAP :: IE2
Bundle-Version = 1.0.1
Bundle-Vendor = MyCompagnie
Bundle-Description = SAP Connexion IE2
Bundle-SymbolicName = sap-ie2
</manifest>
<reference id="jcoFactory" timeout="20000" interface="com.sap.conn.jco.factory.JcoConnexionFactory" filter="(name=JcoConnexionFactory)" />
<bean factory-ref="jcoFactory" id="sap-ie2" factory-method="getConnexion" destroy-method="close">
<argument value="ie2" />
<argument>
<props>
<prop key="jco.client.ashost">localhost</prop>
<prop key="jco.client.sysnr">40</prop>
<prop key="jco.client.client">100</prop>
<prop key="jco.client.user">testuser</prop>
<prop key="jco.client.passwd">testuser</prop>
<prop key="jco.client.lang">EN</prop>
<!-- Load balancing -->
<prop key="jco.client.gwhost">localhost</prop>
<prop key="jco.client.gwserv">sapgw40</prop>
<prop key="jco.destination.pool_capacity">10</prop>
<!-- (in secondes) -->
<prop key="jco.destination.expiration_check_period">10</prop>
<prop key="jco.destination.expiration_time">10</prop>
</props>
</argument>
</bean>
<!-- use the connexion on bean or share it as service like this -->
<service ref="sap-ie2" interface="com.sap.conn.jco.factory.JCoConnexion">
<service-properties>
<entry key="destinationName" value="IE2"/>
</service-properties>
</service>
</blueprint> |
Vous trouverez ce projet sur github
https://github.com/sekaijin/jco-factory/
A+JTY