Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich habe in einer FirstSpirit-Instanz (5.1.410.67084) eine interne PostgreSQL-Datenbank (Version 9.1) konfiguriert. Als Betriebssystem kommt Ubuntu Linux 12.04.1 zum Einsatz. Java-Version (auf dem Server) ist 1.8.0_45.
Es geht darum, strukturierte Daten von FirstSpirit aus in dieser Datenbank zu persistieren. Bei der Einrichtung der PostgreSQL-Datenbank (als DBA-Layer) bin ich wie im Kapitel 4.9.5.3 des Administratoren-Handbuches beschrieben vorgegangen, d.h. es gibt einen separaten FirstSpirit-Datenbankbenutzer (myuser) mit vollen Rechten auf die Datenbank "mydb". Die Berechtigung dieses Benutzers habe ich auf der Linux-Kommandozeile verifiziert, indem ich mich über den PostgreSQL-Client (psql) mit dem Benutzer auf die Datenbank (mydb) verbunden und einen "CREATE TABLE" Befehl abgesetzt habe. Der Benutzer konnte eine Tabelle anlegen.
Den JDBC-Treiber (postgresql-9.4-1201.jdbc41.jar) habe ich (wie im Administrator-Handbuch, Kapitel 4.9.2, beschrieben) in ein .fsm-Modul verpackt und über den FirstSpirit ServerManager installiert. Das hat alles ohne Probleme geklappt. Ebenso problemlos konnte ich eine Datenbank-Verbindung im Datenbank-Reiter mit folgender JDBC-Konfiguration anlegen:
# postgress_mydb
jdbc.DRIVER=org.postgresql.Driver
jdbc.PASSWORD=MY_PASSWORD
jdbc.POOLCYCLE=60
jdbc.POOLMAX=1
jdbc.POOLMIN=1
jdbc.POOLTIMEOUT=180
jdbc.URL=jdbc:postgresql://localhost:5432/mydb
jdbc.USER=myuser
jdbc.layerclass=de.espirit.or.impl.postgres.PostgreSQLLayer
module=JDBC_PostgreSQL_9_1
"Test connection" liefert mir keine Fehler zurück. Die Verbindung per JDBC scheint also generell zu funktionieren. Die Datenbankkonfiguration habe ich in den Projekteigenschaften meines FirstSpirit-Projektes konfiguriert und als "Ausgewählt" markiert.
Wenn ich in FirstSpirit im TemplateStore unter Datenbankschemata nun ein neues Datenbankschema mit einer Tabelle anlegen und speichern möchte, erhalte ich folgende Fehlermeldung:
Error while accessing database:
org.postgresql.util.PSQLException: ERROR: permission denied for database mydb
FSVersion=5.1.410.67084#4536;JDK=1.8.0_45 64bit Oracle Corporation;OS=Mac OS X 10.10.4 x86_64;Date=07.07.2015 14:54:53
de.espirit.or.SchemaException: org.postgresql.util.PSQLException: ERROR: permission denied for database mydb
at de.espirit.or.impl.generic.GenericSchemaSynchronizer.createSchema(GenericSchemaSynchronizer.java:249)
at de.espirit.or.impl.generic.GenericSchemaSynchronizer.updateDB(GenericSchemaSynchronizer.java:131)
at de.espirit.or.impl.schema.SchemaImpl.updateDBTables(SchemaImpl.java:410)
at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:1064)
at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:75)
at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.syncSchemaWithDB(ContentManagerImpl.java:1375)
at de.espirit.firstspirit.content.ContentManagerImpl.syncSchema(ContentManagerImpl.java:728)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:97)
at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:68)
at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:605)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:572)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:425)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:38)
Caused by: org.postgresql.util.PSQLException: ERROR: permission denied for database mydb
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:398)
at de.espirit.or.impl.generic.GenericSchemaSynchronizer.createSchema(GenericSchemaSynchronizer.java:246)
at de.espirit.or.impl.generic.GenericSchemaSynchronizer.updateDB(GenericSchemaSynchronizer.java:131)
at de.espirit.or.impl.schema.SchemaImpl.updateDBTables(SchemaImpl.java:410)
at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:1064)
at de.espirit.or.impl.AbstractSessionHandler.syncSchemaWithDB(AbstractSessionHandler.java:75)
at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.syncSchemaWithDB(ContentManagerImpl.java:1375)
at de.espirit.firstspirit.content.ContentManagerImpl.syncSchema(ContentManagerImpl.java:728)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)
at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:97)
at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:68)
at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)
at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:605)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:572)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:425)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:377)
at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:55)
at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)
at de.espirit.firstspirit.server.$Proxy33.syncSchema(Unknown Source)
at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.syncSchemaWithDB(SessionHandlerImpl.java:136)
at de.espirit.or.impl.AbstractSession.syncSchemaWithDB(AbstractSession.java:504)
at de.espirit.or.impl.SessionImpl.syncSchemaWithDB(SessionImpl.java:26)
at de.espirit.firstspirit.store.access.templatestore.SchemaImpl.saveExternalAttributes(SchemaImpl.java:306)
at de.espirit.firstspirit.store.access.DefaultStoreElement.save(DefaultStoreElement.java:718)
at de.espirit.firstspirit.store.access.DefaultStoreElement.save(DefaultStoreElement.java:683)
at de.espirit.firstspirit.store.access.DefaultStoreElement.save(DefaultStoreElement.java:666)
at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.writeToServer(AbstractGuiStoreElement.java:689)
at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.store(AbstractGuiStoreElement.java:1350)
at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:606)
at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:595)
at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:579)
at de.espirit.firstspirit.client.gui.tree.store.AbstractGuiStoreElement.save(AbstractGuiStoreElement.java:570)
at de.espirit.firstspirit.client.action.SaveAction.actionPerformed(SaveAction.java:77)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
at de.espirit.firstspirit.client.tree.FSTree.processKeyBinding(FSTree.java:721)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2929)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
at java.awt.Component.processEvent(Component.java:6302)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4752)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at de.espirit.firstspirit.client.keymap.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:167)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:141)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:131)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
Hat jemand eine Idee, worin das Problem bestehen könnte? Wie kann ich den Fehler weiter eingrenzen?
Vielen Dank & viele Grüße
Hendrik
Hallo Hendrik,
es fehlt vermutlich folgende Zeile in der Konfiguration:
jdbc.SCHEMA=public
Siehe Kapitel "4.9.7.4 Konfigurationsbeispiel: PostgreSQL".
Ohne jdbc.SCHEMA ist es automatisch ein sogenannter FirstSpirit DBA-Layer, der DB-Admin-Rechte benötigt um selbstständig neue Benutzerkonten und Schemate in der Datenbank anlegen zu können. Mit jdbc.SCHEMA ist es ein FirstSpirit Standard-Layer der eigentlich immer verwendet werden sollte.
Hallo Hendrik,
es fehlt vermutlich folgende Zeile in der Konfiguration:
jdbc.SCHEMA=public
Siehe Kapitel "4.9.7.4 Konfigurationsbeispiel: PostgreSQL".
Ohne jdbc.SCHEMA ist es automatisch ein sogenannter FirstSpirit DBA-Layer, der DB-Admin-Rechte benötigt um selbstständig neue Benutzerkonten und Schemate in der Datenbank anlegen zu können. Mit jdbc.SCHEMA ist es ein FirstSpirit Standard-Layer der eigentlich immer verwendet werden sollte.
Hallo Holger,
vielen Dank, es lag tatsächlich an dem fehlenden jdbc.SCHEMA=public. Nachdem ich das in die JDBC-Konfiguration eingefügt hatte, trat die Fehlermeldung im SiteArchitect nicht mehr auf.
Viele Grüße
Hendrik