# Mehrere Abfragen gleichzeitig - was passiert da?



## newbie1 (9. Feb 2005)

Hallo zusammen,

bin absoluter Neuling was Java angeht und hab mit Müh und Not nen Agenten zum Laufen gebracht, der mir über JDBC Daten aus einer DB2 liefert, die ich dann in einer Notes-DB weiterverarbeite.
Funktioniert auch alles ganz gut, nur bin ich bis jetzt die einzige Testperson.

Meine Frage ist nun: Was passiert wenn mehrere Mitarbeiter gleichzeitig eine Abfrage über diesen JDBC-Agent starten? Ist das problemlos möglich oder muss ich das irgendwie sperren, einschränken was auch immer?

Wie gesagt, bin völlig planlos und auf euch Cracks hier angewiesen. Bitte klärt mich auf damit ich die Sache mit gutem Gewissen freigeben kann.


----------



## foobar (9. Feb 2005)

Was ist denn ein Agent?????



> Meine Frage ist nun: Was passiert wenn mehrere Mitarbeiter gleichzeitig eine Abfrage über diesen JDBC-Agent starten? Ist das problemlos möglich oder muss ich das irgendwie sperren, einschränken was auch immer?



Sind die Methoden synchronized?
Sperrst du die Datensätze beim lesen?
OptimisticLocking?
PessimisticLocking?


----------



## abollm (9. Feb 2005)

newbie1 hat gesagt.:
			
		

> [..]
> bin absoluter Neuling was Java angeht und hab mit Müh und Not nen Agenten zum Laufen gebracht, der mir über JDBC Daten aus einer DB2 liefert, die ich dann in einer Notes-DB weiterverarbeite.
> Funktioniert auch alles ganz gut, nur bin ich bis jetzt die einzige Testperson.
> 
> Meine Frage ist nun: Was passiert wenn mehrere Mitarbeiter gleichzeitig eine Abfrage über diesen JDBC-Agent starten? Ist das problemlos möglich oder muss ich das irgendwie sperren, einschränken was auch immer? [..]



Das ist eigentlich eine Grundsatzfrage zu einem DBMS (Datenbank-Managementsystem). Jedes bessere dieser DBMS - wozu ich auch DB2 zähle - verfügt über einen Sperr- oder Locking-Mechanismus. Mit anderen Worten: Der jeweils in Bearbeitung befindliche Datensatz wird im Moment der Bearbeitung gesperrt. Wenn nun ein Nutzer einen Datensatz in Bearbeitung hat, kann er _momentan_ nicht durch einen anderen bearbeitet werden. Erst wenn das DBMS den Datensatz wieder freigegeben hat, kann ein anderer seine Transaktion durchschreiben. Es ist klar, dass diese Einschränkungen für DML-Befehle gelten (INSERT, UPDATE, DELETE), während der SELECT-Befehl diesen Einschränkungen nicht unterliegt.

Wie das DBMS genau das Locking (Optimistic Locking etc.) durchführt hängt i.d.R. von ihm selbst ab. Das ist aber dann ein anderes Thema.


----------



## newbie1 (9. Feb 2005)

Ok, du weißt nicht was ein Agent ist und ich weiß nicht was optimisticLocking und pessimisticLocking ist.

Mein Java-Code befindet sich in einem Agenten in meiner Notes-DB. Ein Agent läuft auf dem Server und wird vom User z.B. durch Klicken auf eine Schaltfläche gestartet.

Hier ist ein Teil des Codes, vielleicht kannst du ja damit was anfangen:


```
import lotus.domino.*;
import java.sql.*;
import java.io.*;
import java.util.*;

public class JavaAgent extends AgentBase {

	public void NotesMain() {

		try {
			Session session = getSession();
			AgentContext agentContext = session.getAgentContext();
			Database db = agentContext.getCurrentDatabase();
			Document doc = agentContext.getDocumentContext();
			Document profildok = db.getProfileDocument("Profildok", "");
			
						
			PrintWriter pw = getAgentOutput();
			Connection con=null;
			Statement stmt=null;
			ResultSet rs=null;
			
			String JDBCDriverName="Name des Treibers";
			String system="Pfad zur Datei auf DB2";

			String user = "NameUser"; 
			String pwd = "Passwort"; 

			DriverManager.registerDriver((Driver) Class.forName(JDBCDriverName).newInstance());
			con = DriverManager.getConnection(system,user,pwd);
			stmt = con.createStatement();
			
						
			// Abfrage
			String sql = "SELECT feldnamen FROM datei WHERE ...";
			rs = stmt.executeQuery(sql);
			
				
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}
```


----------



## newbie1 (9. Feb 2005)

@abollm

Versteh ich dich richtig, dass es auf die Administration der DB2 ankommt, wie das gehandelt wird? Dann sollte ich mich wohl mit dem DB2-Admin unterhalten.

Also vielen Dank auf jeden Fall.


----------



## Bleiglanz (9. Feb 2005)

weil bei jedem Aufruf eine Connection geöffnet wird und es keine Member-Variablen gibt, sollte es eigentlich (vom Code her gesehen) keine Probleme geben.

Dass verschiedene User bei gleichzeitigem Zugriff evtl. nicht die gleichen Daten sehen (weil sich auf der DB was ändert) ist eine ganz andere Geschichte...


----------



## abollm (9. Feb 2005)

newbie1 hat gesagt.:
			
		

> @abollm
> 
> Versteh ich dich richtig, dass es auf die Administration der DB2 ankommt, wie das gehandelt wird? Dann sollte ich mich wohl mit dem DB2-Admin unterhalten.
> 
> Also vielen Dank auf jeden Fall.



Kann sein, da ich es nicht genau weiß. Günstig ist es auf jeden Fall, den Admin zu fragen. Irgendwo habe ich einmal gelesen, dass DB2 standardmäßig Optimistic Locking verwendet. Von Oracle weiß ich, dass dort die Wahlmöglichkeit zwischen Optimistic und Pessimistic Locking besteht..


----------

