Der Zugriff auf die Datenbank erfolgte direkt über den Sybase-Treiber mit DriverManager. Es hat ordnungsgemäß funktioniert, wir konnten unsere gespeicherten Prozeduren aufrufen.
Vor kurzem migrieren wir auf einen Anwendungsserver (auf JBoss 5) und die Aufrufe an die Datenbank erfolgen jetzt über einen JNDI-Connector unter Verwendung einer DataSource:
Code: Select all
Properties ppt = new Properties();
ppt.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
ppt.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
ppt.put("java.naming.provider.url", "jdbc/sybase");
InitialContext ctx = new InitialContext(ppt);
DataSource ds = (DataSource) ctx.lookup(AConfig.getInstance().getDatasourceJndiName());
Connection conn = ds.getConnection();
In dieser Einstellung schlagen jedoch mehrere Prozeduren mit folgendem Fehler fehl:
"Stored procedure '**‘ darf
nur im unverketteten Transaktionsmodus ausgeführt werden.“
oder diese Art, für andere Fälle (wobei sich der fehlgeschlagene Befehl ändert):
TRUNCATE TABLE-Befehl nicht zulässig
innerhalb einer Transaktion mit mehreren Anweisungen
Nach dem, was ich im Internet gefunden habe, sieht es so aus als würde etwas im JBoss oder im Connector selbst eine Transaktion öffnen, was diese Fehler verursacht. Daher sind die verschiedenen Lösungen, die ich für diese speziellen Probleme finden konnte, zu lokalisiert, und es scheint ein größeres Problem zu sein.
Gibt es eine Möglichkeit, dieses Verhalten zu verhindern (vorausgesetzt dass dies das eigentliche Problem ist)?
Meine Kenntnisse in diesem speziellen Bereich sind recht dürftig neu für mich. Daher fehlen in dieser Beschreibung wahrscheinlich wichtige Details. Bitte teilen Sie mir mit, wie ich diese Frage verbessern kann und welche Details ich bei Bedarf hinzufügen kann.