0

我正在尝试将 Datanucleus 与 datanucleus-spatial 插件一起使用。我正在为我的映射使用注释。我正在尝试使用 PostGIS 和 Oracle 空间。我将回到 datanucleus 的教程。我所经历的没有任何意义。我的开发环境是带有 MAven 2.2.1 的 Netbeans 7.x(我尝试过 7.0、7.2 和 7.3)。使用位于http://www.datanucleus.org/products/datanucleus/jdo/guides/spatial_tutorial.html的 Datanucleus 教程中的 Position 类,我发现如果我的 Maven 依赖项中不包含 datanucleus-spatial 插件,它连接到 PostGIS 或 Oracle 没问题,并提交数据,空间数据被存储为一个 blob(我预计这是因为不存在空间插件)。使用 PostGIS,本教程工作得很好。

我通过用 oracle.spatial.geometry.JGeometry 替换 org.postgis.Point 类来修改 Position 类,并将我的连接指向 Oracle 服务器。如果没有空间,该点再次存储为 blob。使用空间我得到以下异常:

java.lang.ClassCastException:org.datanucleus.store.rdbms.datasource.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 无法转换为 oracle.jdbc.OracleConnection

修改后的类如下所示:

@PersistenceCapable
public class Position
{
   @PrimaryKey
   private String name;

   @Persistent
   private JGeometry point;

   public Position(String name, double x, double y)
   {
       this(name, JGeometry.createPoint(new double[]{x, y}, 2, 4326));
   }

   public Position(String name, JGeometry point)
   {
       this.name = name;
       this.point = point;
   }

   public String getName()
   {
       return name;
   }

   public JGeometry getPoint()
   {
       return point;
   }

   @Override
   public String toString()
   {
       return "[name] "+ name + " [point] "+point;
   }
}

在美妙的 DataNucleus Spatial 世界中,我缺少什么吗?为什么添加空间时它会失败?即使我正在注释,我是否需要 JDO xml 文件?教程中是否有未提供的注释?如果需要教程中显示的 jdo xml 文件以及我收到这些错误的原因,我应该把它放在哪里?我目前在我的项目上落后 3 周,如果这不能很快解决,我将切换到 Hibernate。

4

2 回答 2

0

您没有提供堆栈跟踪,因此除了 DBCP 导致问题外,无法判断,您可以轻松地使用任何其他受支持的连接池。如果某些 Oracle“连接”对象不能转换为其他 JDBC 连接,那么 Oracle JDBC 驱动程序可能是针对不同版本的 JDBC 而不是这个版本的 DBCP?(并且某些版本的 JDBC 破坏了向后兼容性)。帖子中没有提供任何信息来确认或排除这种情况(日志告诉你一些)。如前所述,还有很多其他可用的连接池。

DN 空间教程是自包含的,并且有下载和 GitHub 链接,并且定义了如果使用 JDO XML 文件的去向。提供的教程有效

最后,可能值得一读......

于 2013-06-25T06:34:45.947 回答
0

为了避免cannot be cast to oracle.jdbc.OracleConnection错误,我建议您使用可以在中央 maven 存储库中找到的datanucleus-geospatial 3.2.7 版本。

于 2014-02-06T20:15:16.130 回答