Hallo an Dich!
Zuletzt ging es an dieser Stelle um das Deployen von Java Anwendungen auf Tomcat. Heute wird das Ganze erweitert um das erfolgreiche Einbinden von SAP’s JAVA-Connector JCo 3.0
JCo 2.0 wird relativ gut im Netz behandelt, doch mit JCo3 sieht es nicht so gut aus.
Was du brauchst:
jco lib: libsapjco3.so
jco jar: sapjco3.jar
libsapjco3.so kommt ins JDK-Verzeichnis.
unter ubuntu ist das:
/usr/lib/jvm/java-1.5.0-sun/jre/lib/i386
Die sapjco3.jar muss in den classpath der Anwendung, die auf tomcat deployed werden soll.
Weiterhin muss die sapjco3.jar im tomcat 6 unter lib kopiert werden. bei mir: (/usr/local/share/tomcat6/lib)
danach kann wie im tomcat deployment text vorgegangen werden, um zu deployen.
Eine Lösung habe ich für alle die, die JCo auf Tomcat6 betreiben wollen, jedoch auf zwei probleme stoßen.
1. Man kann den DestinationDataProvider nur einmal registrieren
2. die Abfrage Environment.isDestinationDataProviderRegistered() produziert nach einigen Durchläufen folgende Exception:
java.lang.ExceptionInInitializerError: Error getting the version of the native layer: java.lang.UnsatisfiedLinkError: com/sap/conn/rfc/driver/CpicDriver.nativeCpicGetVersion
Der Fehler wird vermutlich durch einen Bug in JCo hervorgerufen. Möglich ist auch, dass es an falschen Einstellungen des Dataproviders liegt. Wie auch immer: eine Lösung ist, das setzen dees Dataproviders in einen leeren Try Catch Block zu schreiben und somit die fehlerhafte isDestinationDataProviderSet() methode nicht aufzurufen.
Code mit isDestinationDataProviderSet():
public SAPConnection(SAPServerData serverData){
this.serverConnectionProperties = new Properties();
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_ASHOST, serverData.getHost());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_SYSNR, serverData.getSystemNr());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_CLIENT, serverData.getClient());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_USER, serverData.getUser());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_PASSWD, serverData.getPassword());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_LANG, serverData.getLanguage());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "5");
//this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_EXPIRATION_PERIOD, Integer.toString(serverData.getTimeout()));
//set properties of testsystem provider
provider.changePropertiesForABAP_AS(serverConnectionProperties);
//avoid multiple provider loading, which would lead to an exception
if(!Environment.isDestinationDataProviderRegistered()){
//register provider
Environment.registerDestinationDataProvider(provider);
}
//try to establish connection
try{
this.destination = JCoDestinationManager.getDestination(SAP_SERVER);
this.repository=this.destination.getRepository();
}
catch( JCoException e){
e.printStackTrace();
return;
}
}
Code ohne isDestinationDataProviderRegistered():
public SAPConnection(SAPServerData serverData){
this.serverConnectionProperties = new Properties();
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_ASHOST, serverData.getHost());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_SYSNR, serverData.getSystemNr());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_CLIENT, serverData.getClient());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_USER, serverData.getUser());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_PASSWD, serverData.getPassword());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_LANG, serverData.getLanguage());
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");
this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "5");
//this.serverConnectionProperties.setProperty(DestinationDataProvider.JCO_EXPIRATION_PERIOD, Integer.toString(serverData.getTimeout()));
//set properties of testsystem provider
provider.changePropertiesForABAP_AS(serverConnectionProperties);
//avoid multiple provider loading, which would lead to an exception.
try {
//register provider
Environment.registerDestinationDataProvider(provider);
} catch (Exception e1) {}
//try to establish connection
try{
this.destination = JCoDestinationManager.getDestination(SAP_SERVER);
this.repository=this.destination.getRepository();
}
catch( JCoException e){
e.printStackTrace();
return;
}
}
Hallo Freunde des Java-Codes.
Da die Anleitungen auf der Apache Tomcat Seite sehr sehr ausschweifend sind, möchte ich hier ene enorm kurze Anleitung bringen, wie man mittels Eclipse 3.4 und Apache Tomcat Servlets schnell udn sicher verfügbar machen kann.
Vorraussetzungen: Du hast im Eclipse (JAVA EE mit Web Tools) ein funktionierendes Programm und ein Servlet, was als Webservice dienen und auf die restlichen Klassen zugreifen soll. Ihr habt einen lokalen Tomcat 6.0 Server laufen und der kann per Eclipse gestartet werden. Per Browser könnt ihr lokal bereits auf das Servlet zugreifen.
Schritt 1: Erstellen eines WAR-Files (Das ist beinahe ein JAR File, doch enthält es zusätzliche Dateien, um Tomcat zu konfigurieren)
WAR ezeugen: File->Export->WAR File
Schritt 2: War File auf Tomcat ‘deployen’: kopiere das WAR file auf den Server, auf dem das Live-System letztendlich laufen soll. Der Pfad ist dabei uninteressant.
Schritt 3: Öffne einen Browser (ich nehme dazu Links, weil die Live-Server ja meist nicht zugreifbar sind) und gehe auf http://localhost:8080 (das ist die Standard Einstellung von Tomcat. Solltest du das geändert haben, so musst du das an der URL natürlich auch ändern!)
Schritt 4: Klicke links im Menü auf ‘Tomcat Manager’ und log dich als ein Benutzer ein, der in der ‘manager’-Gruppe ist.
Schritt 5: Im Vorletzten Feld ‘Deploy’ musst du nun unter ‘WAR file to deploy’ und dort unter ‘Select WAR file to upload’ dein soeben hochgeladenes WAR-File auswählen und dann auf ‘Deploy’ klicken.
Schritt 6: Starte den Tomcat Server neu und du kannst dein Servlet nutzen.
–kdot