hsqldb im file mode ohne schreibrechte auf den Ordner verwenden

Florian Strienz

Erfahrenes Mitglied
Hallo zusammen,

ich stehe gerade auf dem Schlauch. Ich verwende eine hsqldb für ein Projekt. Diese ist direkt in das Programm eingebunden und wird über im file mode geladen. Die Anwender haben keine Schreibbrechtigung auf den Ordner der DB. Wenn ich so das Programm starte bekomme ich follgende Fehlermeldung:

Code:
[TopLink Info]: 2009.01.19 12:00:22.988--ServerSession(13640204)--TopLink, version: Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))
[2009-01-19 12:00:23]  Exception in thread "main" [2009-01-19 12:00:23]  Local Exception Stack: 
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: File input/output error java.io.FileNotFoundException: Q:\ADD_ONS_CAD\APPLICATIONMANAGER\Data_ALPHA\DB\JAPM.script.new (Zugriff verweigert) Q:\ADD_ONS_CAD\APPLICATIONMANAGER\Data_ALPHA\DB\JAPM.script.new
Error Code: -29
	at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:305)
	at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:102)
	at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:184)
	at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:582)
	at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:280)
	at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:229)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
	at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)
	at com.schaeffler.japm.control.StartController.loadConfFiles(Unknown Source)
	at com.schaeffler.japm.control.StartController.initialize(Unknown Source)
	at com.schaeffler.japm.control.StartController.main(Unknown Source)
Caused by: java.sql.SQLException: File input/output error java.io.FileNotFoundException: Q:\ADD_ONS_CAD\APPLICATIONMANAGER\Data_ALPHA\DB\JAPM.script.new (Zugriff verweigert) Q:\ADD_ONS_CAD\APPLICATIONMANAGER\Data_ALPHA\DB\JAPM.script.new
	at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
	at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
	at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
	at org.hsqldb.jdbcDriver.connect(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:100)
	... 11 more

Ich stehe gerade auf dem Schlauf, wie ich der DB abgewöhnen kann, beim schließen der Verbindung dieses .new File zu schreiben. Ein normaler Anwender soll ja nur lesen.

Das Propertiesfiles sieht so aus:
Code:
#HSQL Database Engine 1.8.0.10
#Mon Jan 19 12:26:52 CET 2009
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=false
hsqldb.cache_size_scale=8
readonly=false
hsqldb.nio_data_file=true
hsqldb.cache_scale=14
version=1.8.0
hsqldb.default_table_type=memory
hsqldb.cache_file_scale=1
hsqldb.log_size=200
modified=yes
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.compatible_version=1.8.0

an der Einstellung readonly=false liegt es nicht, das propertiefile ist identisch mit dem aus einem anderen Projekt, wo das ganze so funktioniert.

//Edit
ich habe jetzt mal auf readonly=true umgestellt. Damit soll die DB angeblich auch von cd laufen. Leider gibts die gleiche Fehlermeldung

Gruß&Danke
Flo
 
Zuletzt bearbeitet:
Manchmal hilft es doch eine Nacht drüber zu schlafen. Das Problem war die Property modified=yes. Die DB war nicht komplett runtergefahren, so das die Java PA bei initialisieren die DB neu schreiben wollte. Daher kam das .script.new File.

Ich habe jetzt follgenden Befehl in mein build.xml eingefügt und schon läuft alles (readonly=true übergebe ich mit der URL im Programm, damit ich die DB extern editieren kann, die user aber ohne schreibrechte drauf zugreifen könnne).

<sql driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:${dist}\\DB\\JAPM" userid="SA" password="" classpath="${dist}\\hsqldb.jar">
checkpoint defrag;
shutdown compact;
</sql>

Gruß
Flo
 
Zurück