2014-10-02 1 views
3

Я создал базу данных Oracle XE для проведения некоторых тестов с помощью приложения. Это приложение использует JDBC для работы с базой данных. В частности, я использую Liquibase для добавления/обновления схемы.Невозможно поддерживать соединение JDBC с использованием Oracle XE

Мои JDBC соединение Ссылка: JDBC: оракул: тонкий: @ // локальный: 1521/х

Я могу подтвердить, что он попадает в базу данных, как ему удается создать две таблицы, прежде чем оно ошибки вне:

liquibase.exception.LockException: liquibase.exception.UnexpectedLiquibaseException: java.sql.SQLRecoverableException: Closed Connection 
     at liquibase.lockservice.LockService.releaseLock(LockService.java:152) 
     at liquibase.Liquibase.update(Liquibase.java:117) 
     at com.company.liquibase.LiquibaseAdapter.update(LiquibaseAdapter.java:53) 
     at com.company.startup.LiquibaseInitializingBean.afterPropertiesSet(LiquibaseInitializingBean.java:42) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFac 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactor 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory. 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.ja 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.jav 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472) 
     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:388) 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293) 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632) 
     at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073) 
     at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
     at java.util.concurrent.FutureTask.run(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 
Caused by: liquibase.exception.UnexpectedLiquibaseException: java.sql.SQLRecoverableException: Closed Connection 
     at liquibase.snapshot.jvm.JdbcDatabaseSnapshotGenerator.hasTable(JdbcDatabaseSnapshotGenerator.java:63) 
     at liquibase.snapshot.jvm.JdbcDatabaseSnapshotGenerator.hasDatabaseChangeLogLockTable(JdbcDatabaseSnapshotGenerator.java:49) 
     at liquibase.database.AbstractDatabase.hasDatabaseChangeLogLockTable(AbstractDatabase.java:549) 
     at liquibase.lockservice.LockService.releaseLock(LockService.java:135) 
     ... 30 more 
Caused by: java.sql.SQLRecoverableException: Closed Connection 
     at oracle.jdbc.driver.PhysicalConnection.getMetaData(PhysicalConnection.java:5216) 
     at org.apache.commons.dbcp.DelegatingConnection.getMetaData(DelegatingConnection.java:345) 
     at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getMetaData(PoolingDataSource.java:245) 
     at liquibase.snapshot.jvm.JdbcDatabaseSnapshotGenerator.getMetaData(JdbcDatabaseSnapshotGenerator.java:258) 
     at liquibase.snapshot.jvm.JdbcDatabaseSnapshotGenerator.hasTable(JdbcDatabaseSnapshotGenerator.java:54) 
     ... 33 more 

Это прекрасно работает с моей базой данных Oracle, я просто не могу заставить ее работать с XE. Я предполагаю, что в XE не должно быть какой-то настройки, но я не совсем уверен, что это будет. Кажется, что соединение закрывается, когда этого не должно быть.

Я попробовал несколько драйверов ojdbc безрезультатно. Я могу установить параметры подключения в SQL Developer и легко получить доступ к базе данных. Я также использую запрос проверки «SELECT 1 FROM DUAL».

Если есть дополнительная информация, которую я мог бы предоставить, чтобы у меня ее нет, сообщите мне.

+0

Только некоторые дикие идеи: Вы открываете несколько соединений с одной и той же БД? Вы используете соединение _same_ из _different threads_? –

+0

@SylvainLeroux Я считаю, что в момент, когда он терпит неудачу, он открывает только одно соединение, но может открывать и закрывать его для каждого создания таблицы. Похоже, что, возможно, соединение передается в пул и закрывается, но не выселяется должным образом, но запрос проверки должен предотвратить это. – AHungerArtist

ответ

2

Проблема заключалась в том, что Oracle XE не разрешает разделение. К сожалению, ошибки и трассировки стека, которые я получал, были совсем не полезны, поэтому почему-то не было понятно, почему это произошло.