TOPIC: Verbindung zur H2 DB schlägt fehl
7 months 3 weeks ago #573
Ich habe im DataSource Explorer eine neue H2 DB angelegt. Danach diese per SQL Script mit Tabellen befüllt. Das hat auch funktioniert, d.h. in der Tree Ansicht waren alle Struktuen vorhanden. Danach habe ich die DB - wie bei bisherigen Rapidclipse üblich - disconnected. Danach habe ich die Funktion Install Datasource into existing Project aufgerufen. Das funktionierte bis zu der Anzeige meiner angelegten Tabelllen. Im Bereich "Table Associations" brach der Import Wizzard ab mit:


org.hibernate.exception.GenericJDBCException: Error calling Driver#connect
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:118)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:41)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58)
at org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:106)
at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:40)
at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:19)
at org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:138)
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:110)
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:74)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
at org.hibernate.cfg.JDBCReaderFactory.newJDBCReader(JDBCReaderFactory.java:35)
at org.hibernate.cfg.JDBCReaderFactory.newJDBCReader(JDBCReaderFactory.java:24)
at org.hibernate.cfg.JDBCBinder.readTableList(JDBCBinder.java:182)
at org.hibernate.cfg.JDBCMetaDataConfiguration.readTableStubs(JDBCMetaDataConfiguration.java:158)
at org.jboss.tools.hibernate.runtime.v_5_1.internal.ConfigurationFacadeImpl.readTableStubs(ConfigurationFacadeImpl.java:243)
at xdev.eclipse.internal.hibernate.metadata.MetadataUtils.lambda$0(MetadataUtils.java:90)
at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:63)
at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:108)
at xdev.eclipse.internal.hibernate.metadata.MetadataUtils.readMetadataStub(MetadataUtils.java:77)
at xdev.eclipse.internal.server.core.ui.wizard.generateentities.SelectTablesWizardPage.readMetadata(SelectTablesWizardPage.java:362)
at xdev.eclipse.internal.server.core.ui.wizard.generateentities.SelectTablesWizardPage.access$1(SelectTablesWizardPage.java:357)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2240)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2267)
at xdev.eclipse.internal.server.core.ui.wizard.generateentities.SelectTablesWizardPage.lambda$2(SelectTablesWizardPage.java:231)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:119)
Caused by: org.h2.jdbc.JdbcSQLException: Datenbank wird wahrscheinlich bereits benutzt: "Locked by another process". Mögliche Lösungen: alle Verbindungen schliessen; Server Modus verwenden
Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-176]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:344)
at org.h2.message.DbException.get(DbException.java:178)
at org.h2.message.DbException.get(DbException.java:154)
at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:462)
at org.h2.store.FileLock.lockFile(FileLock.java:356)
at org.h2.store.FileLock.lock(FileLock.java:136)
at org.h2.engine.Database.open(Database.java:622)
at org.h2.engine.Database.openDatabase(Database.java:260)
at org.h2.engine.Database.<init>(Database.java:254)
at org.h2.engine.Engine.openSession(Engine.java:57)
at org.h2.engine.Engine.openSession(Engine.java:164)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142)
at org.h2.engine.Engine.createSession(Engine.java:125)
at org.h2.engine.Engine.createSession(Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:331)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:107)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:91)
at org.h2.Driver.connect(Driver.java:74)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38)
... 25 more


Die Datenbank läßt sich danach auch nicht mehr im DB Explorer öffnen. Sofern benötigt sende ich Ihnen das SQL Script per Mail

Beste Grüße
Last Edit: 7 months 3 weeks ago by mobidat.
The topic has been locked.
7 months 3 weeks ago #574
Hallo mobidat,

Wir konnten den Fehler gemäß Ihrer Beschreibung nicht reproduzieren aber im Detail der Exception findet man ein kleinen Hinweis siehe Screenshot:

ExceptionDetail_2016-11-30.png


Mehrere Möglichkeiten könnten hier der Fall sein:

1. Sie haben die Datenbank mit einem externen Tool geöffnet - die H2 Embedded Datenbank kann nur mit einer Connection gleichzeitig belegt werden
2. Sie haben eine zweite Instanz RapidClipse offen - siehe 1.
3. RapidClipse wurden unvorhergesehen beendet und hängt mit einem JavaTask noch immer im TaskManager fest - in diesem Fall einfach mal Task Manager öffnen und den Task beenden.

Euer RapidClipse Team
Last Edit: 7 months 3 weeks ago by RapidClipse Team.
The topic has been locked.
7 months 3 weeks ago #575
Hallo XDEV Team

Danke für die prompte Reaktion!
Kann das evtl auch daran liegen, dass beim Hochfahren von Rapidclipse automatisch die Sample DB "ungefragt" gestartet wird?

Info Meldung im Error Log: H2 sample database started @ port 5.435, databases: northwind


Caused by: org.h2.jdbc.JdbcSQLException: Datenbank wird wahrscheinlich bereits benutzt: "Locked by another process". Mögliche Lösungen: alle Verbindungen schliessen; Server Modus verwenden

Rapidclipse1.png


Ich habe diese Meldung ebenfalls entdeckt und daher sicherheitshalber Windows neu gestarte (BOOT). Der Fehler blieb leider. Hinzu kommmt das eine Verbindung zur Datenbank beim Projekt hergestellt werden konnte und im Wizzard die Tabellenstrutur zunächst korrekt angezeigt wird. Erst bei der Table Assoziation bricht Rapidclipse ab.
Last Edit: 7 months 3 weeks ago by mobidat.
The topic has been locked.
7 months 3 weeks ago #576
Hallo mobidat,

könnten Sie einen ScreenShot Ihrer DB Verbindung senden. DataSourceExplorer --> Rechtsklick auf DBConnection --> Properties --> H2 Profile Properties
Ihr abgesetztes SQL Script können Sie uns wie schon angeboten per Mail an This email address is being protected from spambots. You need JavaScript enabled to view it. senden.

RapidClipseTeam
The topic has been locked.
7 months 1 week ago #599
Hallo XDEV
Habe am 30.11. entsprechende Dokumente an den Support gesendet und leider bisher nicht erfahren, ob der Fehler beim H2 Import verifiziert werden konnte.
The topic has been locked.
7 months 1 week ago #620
Hallo mobidat,

Die Ursache ist die Art der Anbindung genauer gesagt der ConnectionString der sieht bei Ihnen So aus "jdbc:h2:D:\MyDB\<.....>" er sollte aber so aussehen "jdbc:h2:tcp://localhost:5435/<....>"
Der Grund ist einfach, wird eine H2 direkt per Datei referenziert ist das wie eine Embedded Datenbank und es kann nur eine Connection darauf geöffnet werden.

Wir würden folgende Vorgehensweise empfehlen:

1. Die Datenbank zur Entwicklungszeit auf dem Server belassen
2. Erst am Ende beim Deployment die Datenbank embedded mit deployen

Euer RapidClipse Team
The topic has been locked.