Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加Google应用程序引擎支持并保持独立支持_Java_Google App Engine_Jpa_Jdo - Fatal编程技术网

Java 添加Google应用程序引擎支持并保持独立支持

Java 添加Google应用程序引擎支持并保持独立支持,java,google-app-engine,jpa,jdo,Java,Google App Engine,Jpa,Jdo,我有一个基于Stuts2/GoogleGuice/JPA构建的java web应用程序。它使用hibernate作为JPA供应商。我想添加支持,以便它可以在谷歌的应用程序引擎上使用。当然,我在查询和映射方面遇到了问题。例如,不支持多对多和联接 我正试图想出一个让我的应用程序能够独立运行的最佳解决方案。例如,在JPA供应商支持的任何数据库上的tomcat/jetty中,或以datanucleus为供应商的Google App Engine中 我想到的一个解决方案是将JPA用于我的独立实现,将JDO

我有一个基于Stuts2/GoogleGuice/JPA构建的java web应用程序。它使用hibernate作为JPA供应商。我想添加支持,以便它可以在谷歌的应用程序引擎上使用。当然,我在查询和映射方面遇到了问题。例如,不支持多对多和联接

我正试图想出一个让我的应用程序能够独立运行的最佳解决方案。例如,在JPA供应商支持的任何数据库上的tomcat/jetty中,或以datanucleus为供应商的Google App Engine中

我想到的一个解决方案是将JPA用于我的独立实现,将JDO用于谷歌的应用程序引擎。显然,这需要我用JPA和JDO注释来注释模型对象,并为DAO层编写另一个实现


还有其他人尝试过的好解决方案吗?

您可以将查询重新定位到XML配置。这样,您可以在一种配置中查询RDBMS,在另一种配置中查询BigTable


另一个想法是DataNucleus也是JPA供应商。您可以通过使它成为GAE和Servlet容器上的主要JPA供应商来简化开发。JPA供应商通常会在元数据处理方面有细微的差异,这可能会让您省去一些麻烦。

我认为您的方法是一种很好的方法。我认为良好的设计架构是最好的方法。您很可能会在DAO层中看到很多差异。一个好的设计会看到一个DAO接口,然后每个特定的模型访问都会有它自己的接口实现,例如JpaMyObjectDAO、JpaGAEObjectDAO等。同样像您siad一样,App Engine在声明实体类时也有一些特殊的要求。也许您可以拥有不同版本的实体类(每个实体类都符合其存储方案,如AppEngine或Hibernate),然后为更高的层使用一个通用的DTO表示

不幸的是,GAE现在无法处理多对多关系。您所能做的最好的事情就是在每个类上携带键的集合,并在DAO/服务层中处理这些集合。如果您只擅长通过DAO/服务层访问内容,而不是大量的属性访问(
Service.getContactByCategory(category)
,而不是
category.getContacts()
),那么您应该能够重新实现DAO,以便在调用时加载密钥。这是一个现有的应用程序,像你建议的那样使用这项服务不是一种选择。无论哪种方式,我都必须有一个不同的服务实现,因此这将不仅仅是将查询放在不同的XML文件中。我已经很好地分离了DAO接口和服务接口,因此更改实现相当容易。看起来这就是我要走的路。我仍然在考虑使用DTO对象而不是模型对象。现在,我一直使用模型对象到视图。