jira.codehaus.org

  • Log In Access more options
    • Online Help
    • Keyboard Shortcuts
    • About JIRA
    • JIRA Credits
    • What?s New
  • Dashboards Access more options (Alt+d)
  • Projects Access more options (Alt+p)
  • Issues Access more options (Alt+i)
  • GeoTools
  • GEOT-2594

JDBC-NG cannot handle views on Oracle anymore

  • Log In
  • Views
    • XML
    • Word
    • Printable

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 2.5.6
  • Fix Version/s: 2.5.7
  • Component/s: jdbc
  • Labels:
    None

Description

Changes in http://jira.codehaus.org/browse/GEOT-2560 resulted in failure to use views in Oracle:

java.io.IOException: Error looking up primary key

	at org.geotools.jdbc.JDBCDataStore.getPrimaryKey(JDBCDataStore.java:743)

	at org.geotools.jdbc.JDBCDataStore.createFeatureSource(JDBCDataStore.java:592)

	at org.geotools.data.store.ContentDataStore.getFeatureSource(ContentDataStore.java:349)

	at org.geotools.data.store.ContentDataStore.getFeatureSource(ContentDataStore.java:314)

	at org.geotools.data.store.ContentDataStore.getSchema(ContentDataStore.java:299)

	at org.geoserver.catalog.util.LegacyCatalogImporter.readFeatureType(LegacyCatalogImporter.java:503)

	at org.geoserver.catalog.util.LegacyCatalogImporter.imprt(LegacyCatalogImporter.java:173)

	at org.geoserver.config.GeoServerLoader.initialize(GeoServerLoader.java:119)

	at org.geoserver.config.GeoServerLoader.postProcessBeforeInitialization(GeoServerLoader.java:81)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:350)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1330)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)

	at java.security.AccessController.doPrivileged(AccessController.java:219)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)

	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)

	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)

	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)

	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)

	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)

	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)

	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)

	at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:495)

	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:162)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)

	at java.security.AccessController.doPrivileged(AccessController.java:219)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)

	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)

	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)

	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)

	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)

	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)

	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)

	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)

	at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:495)

	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:162)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)

	at java.security.AccessController.doPrivileged(AccessController.java:219)

	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)

	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)

	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)

	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)

	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)

	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)

	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)

	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)

	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)

	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)

	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)

	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)

	at com.ibm.ws.wswebcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:652)

	at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinish(WebApp.java:354)

	at com.ibm.ws.wswebcontainer.webapp.WebApp.initialize(WebApp.java:292)

	at com.ibm.ws.wswebcontainer.webapp.WebGroup.addWebApplication(WebGroup.java:92)

	at com.ibm.ws.wswebcontainer.VirtualHost.addWebApplication(VirtualHost.java:157)

	at com.ibm.ws.wswebcontainer.WebContainer.addWebApp(WebContainer.java:671)

	at com.ibm.ws.wswebcontainer.WebContainer.addWebApplication(WebContainer.java:624)

	at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:335)

	at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:551)

	at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1305)

	at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1138)

	at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:569)

	at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:817)

	at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:951)

	at com.ibm.ws.runtime.component.ApplicationMgrImpl$1.run(ApplicationMgrImpl.java:1493)

	at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:4097)

	at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:4194)

	at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:245)

	at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:1498)

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.lang.reflect.Method.invoke(Method.java:618)

	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:62)

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.lang.reflect.Method.invoke(Method.java:618)

	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:265)

	at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1092)

	at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:973)

	at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:231)

	at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:238)

	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:833)

	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802)

	at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1082)

	at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)

	at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:975)

	at com.ibm.ws.management.connector.AdminServiceDelegator.invoke(AdminServiceDelegator.java:139)

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

	at java.lang.reflect.Method.invoke(Method.java:618)

	at com.ibm.ws.management.connector.soap.SOAPConnector.invoke(SOAPConnector.java:351)

	at com.ibm.ws.management.connector.soap.SOAPConnector.service(SOAPConnector.java:207)

	at com.ibm.ws.management.connector.soap.SOAPConnection.handleRequest(SOAPConnection.java:55)

	at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:680)

	at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:484)

	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)

Caused by: 

java.sql.SQLException: ORA-01702: a view is not appropriate here


	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)

	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)

	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)

	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)

	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)

	at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)

	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)

	at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1614)

	at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1579)

	at oracle.jdbc.OracleDatabaseMetaData.getIndexInfo(OracleDatabaseMetaData.java:3485)

	at org.geotools.jdbc.JDBCDataStore.getPrimaryKey(JDBCDataStore.java:721)

	... 104 more

The code looking up index metadata should run only on tables, views do not support indexes in any database that I know of (oracle has the ability to support primary key on views thought, so don't un-hook the whole pk lookup, just the index part)

  • Options
    • Sort By Name
    • Sort By Date
    • Ascending
    • Descending
    • Download All

Attachments

  1. Text File
    GEOT-2594.patch
    03/Jul/09 5:23 AM
    19 kB
    Andrea Aime
  2. Text File
    GEOT-2594-db2.patch
    03/Jul/09 12:05 PM
    4 kB
    Christian Mueller

Issue Links

is depended upon by

Bug - A problem which impairs or prevents the functions of the product. GEOS-3272 Oracle NG cannot deal with views anymore

  • Critical - Crashes, loss of data, severe memory leak.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.
is duplicated by

Bug - A problem which impairs or prevents the functions of the product. GEOT-2612 Failure to get features from Oracle view

  • Major - Major loss of function.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.
is related to

Improvement - An improvement or enhancement to an existing feature or task. GEOT-2560 Use Unique Index where possible, if a table does not have a PK defined

  • Major - Major loss of function.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.

Activity

Ascending order - Click to sort in descending order
  • All
  • Comments
  • History
  • Activity
Hide
Permalink
Andrea Aime added a comment - 03/Jul/09 3:13 AM
We need to add a test on views, every database supports them
Show
Andrea Aime added a comment - 03/Jul/09 3:13 AM We need to add a test on views, every database supports them
Hide
Permalink
Andrea Aime added a comment - 03/Jul/09 5:23 AM
Here is a patch that fixes the problem with tests for h2, postgis and oracle

A couple of notes about the tests. The test is parametrized in two ways to deal with Oracle specific oddities:
- it reports the pk column as non nullable in views too, all other databases don't
- it supports pks on views, so I added a test for that case as well (maybe other major dbms support this behaviour as well, but I'm not sure)
Show
Andrea Aime added a comment - 03/Jul/09 5:23 AM Here is a patch that fixes the problem with tests for h2, postgis and oracle A couple of notes about the tests. The test is parametrized in two ways to deal with Oracle specific oddities: - it reports the pk column as non nullable in views too, all other databases don't - it supports pks on views, so I added a test for that case as well (maybe other major dbms support this behaviour as well, but I'm not sure)
Hide
Permalink
Christian Mueller added a comment - 03/Jul/09 12:05 PM
Adding patch file for db2, test runs successful
Show
Christian Mueller added a comment - 03/Jul/09 12:05 PM Adding patch file for db2, test runs successful
Hide
Permalink
Justin Deoliveira added a comment - 04/Jul/09 1:00 AM
Patch looks good. Can we add a quick comment just before the call to isView() stating that in no databases that we know of unique indexes are supported on views so we don't even both to check.
Show
Justin Deoliveira added a comment - 04/Jul/09 1:00 AM Patch looks good. Can we add a quick comment just before the call to isView() stating that in no databases that we know of unique indexes are supported on views so we don't even both to check.
Hide
Permalink
Andrea Aime added a comment - 19/Jul/09 10:00 AM
Fixed on 2.5.x and trunk
Show
Andrea Aime added a comment - 19/Jul/09 10:00 AM Fixed on 2.5.x and trunk
Hide
Permalink
Ben Caradoc-Davies added a comment - 19/Jul/09 8:44 PM
I can confirm that this fixes the problem reported in GEOT-2612. Thanks.
Show
Ben Caradoc-Davies added a comment - 19/Jul/09 8:44 PM I can confirm that this fixes the problem reported in GEOT-2612. Thanks.

People

  • Assignee:
    Andrea Aime
    Reporter:
    Andrea Aime
Vote (0)
Watch (2)

Dates

  • Created:
    03/Jul/09 3:11 AM
    Updated:
    02/Jun/11 8:16 AM
    Resolved:
    19/Jul/09 10:00 AM
  • Atlassian JIRA (v5.0.4#731-sha1:3aa7374)
  • Report a problem
  • Powered by a free Atlassian JIRA open source license for Codehaus. Try JIRA - bug tracking software for your team.