我有一个基于Stuts2 / Google Guice / JPA构建的java Web应用程序。它使用hibernate作为JPA供应商。我想添加支持,以便可以在Google的App Engine上使用。当然,我遇到了查询和映射的问题。例如多对多和连接不被支持。
我正在努力想出最好的解决方案,让我的应用程序能够独立运行。例如,在JPA供应商支持的任何数据库上使用tomcat / jetty或使用datanucleus作为供应商的Google App Engine。
我想到的一个解决方案是将JPA用于我的独立实现,将JDO用于Google的App Engine。显然,这需要我使用JPA和JDO注释来注释我的模型对象,并为DAO层编写另一个实现。
其他人尝试过其他任何好的解决方案吗?
答案 0 :(得分:1)
您可以将查询重定位到XML配置。这样,您可以在一个配置中查询RDBMS,在另一个配置中查询BigTable。
另一个想法是DataNucleus也是JPA供应商。您可以通过将它作为GAE和Servlet容器上的主要JPA供应商来简化您的开发。 JPA供应商通常在他们对元数据的处理方面存在很小的差异,这可能会让您感到头疼。
答案 1 :(得分:1)
我认为你的方法很好。我认为良好的设计架构是最好的方法。您很可能会在DAO层中看到很多差异。一个好的设计会看到一个DAO接口,然后每个特定的模型访问都有自己的接口实现,例如JpaMyObjectDAO,JpaGAEObjectDAO等。与您一样,App Engine在声明您的实体类时有一些特殊要求。也许您可以拥有不同版本的实体类(每个版本都符合其存储方案,如App Engine或Hibernate),然后为您的更高层使用一个通用的DTO表示。