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)


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 java : Sélectionner tout - Visualiser dans une fenêtre à part
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 xml : Sélectionner tout - Visualiser dans une fenêtre à part
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