Wenn Sie in Ihrem JCo Client mit Multi-Threading arbeiten wollen, benötigen Sie das Interface SessionReferenceProvider. Mit diesem Interface können Sie im JCo eine einfache Session-Referenz erzeugen.
In einer Multi-Thread Umgebung muss die Aufteilung von Objekten (z.B. JCoTable-Objekten) zwischen verschiedenen Threads vorsichtig gehandhabt werden. Beachten Sie, dass vielfache, konkurrierende SAP-Aufrufe für dieselbe direkte Verbindung nicht möglich sind.
Multi-Threading
public static void step5MultiThreading() throws JCoException {
}
static class SessionManager implements SessionReferenceProvider { Hashtable<String, MySessionReference> availableSessions = new Hashtable<String, MySessionReference>(); List<Thread> threadPool = new ArrayList<Thread>();
public MySessionReference appSessionStarted() { Thread currThr = Thread.currentThread(); String id = String.valueOf(currThr.getId()); MySessionReference ref = availableSessions.get(id); if(ref == null) { ref = new MySessionReference(id); availableSessions.put(id, ref); } return ref; }
public MySessionReference appSessionFinished() { Thread currThr = Thread.currentThread(); String id = String.valueOf(currThr.getId()); MySessionReference ref = availableSessions.remove(id); return ref; }
public JCoSessionReference getCurrentSessionReference(String scopeType) { //ignore scopes return appSessionStarted(); }
public boolean isSessionAlive(String sessionId) { return availableSessions.containsKey(sessionId); }
public void jcoServerSessionContinued(String sessionID) throws SessionException { }
public void jcoServerSessionFinished(String sessionID) { }
public void jcoServerSessionPassivated(String sessionID) throws SessionException { }
public JCoSessionReference jcoServerSessionStarted() throws SessionException { return null; }
static class MySessionReference implements JCoSessionReference { private String sessionId; MySessionReference(String id) { sessionId = id; }
public void contextFinished() { }
public void contextStarted() { }
public String getID() { return sessionId; } } }
public static void main(String[] args) throws JCoException { step1Connect(); step2ConnectUsingPool(); step3SimpleCall(); step4WorkWithTable(); } } |