标签: jdo

不确定我是否理解TransactionAwarePersistenceManagerFactoryProxy

我正在尝试使用org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy我的Spring项目,但我不确定如何使用它或者它是否正是我正在寻找的.我意识到它可以帮助我的DAO使用简单的JDO PersistenceManagerFactory.另一个问题是:如果代理没有正确完成会发生什么?我还可以使用它来访问我的工厂来创建一个事务感知持久性管理器吗?如果工厂管理的对象是单例,这会改变吗?为什么不直接访问PersistenceManagerFactory?也许PersistenceManagerFactoryUtils.getPersistenceManager更适合我的需求?可以getObject返回null吗?

java spring persistence dao jdo

191
推荐指数
1
解决办法
3万
查看次数

Hibernate vs JPA vs JDO - 各自的优点和缺点?

我熟悉ORM作为一个概念,几年前我甚至将nHibernate用于.NET项目; 但是,我没有跟上Java中的ORM主题,也没有机会使用这些工具.

但是,现在我可能有机会开始为我们的某个应用程序使用一些ORM工具,以试图摆脱一系列遗留Web服务.

我很难说出JPA规范之间的差异,你对Hibernate库本身的看法,以及JDO提供的内容.

所以,我知道这个问题有点开放,但我希望得到一些意见:

  • 各自的优点和缺点是什么?
  • 你会建议哪个新项目?
  • 当使用一个框架与另一个框架有意义时,是否存在某些条件?

java orm hibernate jpa jdo

173
推荐指数
9
解决办法
11万
查看次数

Google App Engine上的JDO vs JPA for Java

我想用Struts2在Google App Engine上开发我的项目.对于数据库,我有两个选项JPA和JDO.请问各位建议我吗?两者对我来说都是新的,我需要学习它们.所以我会在你的回复后专注于一个.

谢谢.

java google-app-engine jpa jdo

81
推荐指数
9
解决办法
3万
查看次数

Java AppEngine:JDO或JPA,如何选择?

为将在Google AppEngine上运行的Grails应用程序选择JDO或JPA的优缺点

java grails google-app-engine jpa jdo

36
推荐指数
3
解决办法
1万
查看次数

为什么在持久层(如JDO或Hibernate)上放置DAO层

数据访问对象(DAO)是一种常见的设计模式,由Sun推荐.但最早的Java DAO示例直接与关系数据库进行交互 - 它们本质上是做对象关系映射(ORM).如今,我看到DAO在成熟的ORM框架之上,如JDO和Hibernate,我想知道这是不是一个好主意.

我正在使用JDO作为持久层开发Web服务,并且正在考虑是否引入DAO.我在处理包含其他对象映射的特定类时遇到了问题:

public class Book {
    // Book description in various languages, indexed by ISO language codes
    private Map<String,BookDescription> descriptions;
}
Run Code Online (Sandbox Code Playgroud)

JDO足够聪明,可以将其映射到"BOOKS"和"BOOKDESCRIPTIONS"表之间的外键约束.它透明地加载BookDescription对象(我​​相信使用延迟加载),并在Book对象持久化时保留它们.

如果我要引入一个"数据访问层"并编写一个像BookDao这样的类,并将所有JDO代码封装在其中,那么这个JDO对子对象的透明加载不会绕过数据访问层吗?为了保持一致性,不应该通过一些BookDescriptionDao对象(或BookDao.loadDescription方法)加载和保存所有BookDescription对象吗?然而,以这种方式进行重构将使得模型的操作变得不必要地复杂化.

所以我的问题是,在业务层中直接调用JDO(或Hibernate,或者你想要的任何ORM)有什么问题?它的语法已经非常简洁,并且与数据存储区无关.如果有的话,将它封装在数据访问对象中有什么好处?

architecture persistence dao data-access-layer jdo

32
推荐指数
5
解决办法
2万
查看次数

承诺的JDO写入不适用于本地GAE HRD或可能重用的事务

我在app引擎上使用JDO 2.3.我使用Master/Slave数据存储区进行本地测试,最近切换到使用HRD数据存储区进行本地测试,我的部分应用程序正在破坏(这是预期的).正在破坏的应用程序的一部分是快速发送大量写入的地方 - 这是因为1秒限制的事情,它失败了并发修改异常.

好吧,所以这也是预料之中的,所以我让浏览器在失败后再次重试写入(可能不是最好的黑客,但我只是想让它快速运行).

但是一件奇怪的事情正在发生.即使提交阶段完成且请求返回我的成功代码,一些应该成功的写入(不会获得并发修改异常的写入)也会失败.我可以从日志中看到重试的请求工作正常,但是我猜这些似乎在第一次尝试时提交的其他请求从未"应用".但是从我读到的关于Apply阶段的内容来看,再次写入同一个实体应该强制应用......但事实并非如此.

代码如下.有些事情需要注意:

  1. 我试图使用自动JDO缓存.所以这就是JDO使用memcache的地方.除非您在事务中包装所有内容,否则这实际上不起作用.
  2. 所有请求正在执行的是从实体读取字符串,修改字符串的一部分,并将该字符串保存回实体.如果这些请求不在事务中,那么您当然会遇到"脏读"问题.但是对于事务,隔离应该处于"可序列化"的水平,所以我不知道这里发生了什么.
  3. 被修改的实体是根实体(不在组中)
  4. 我启用了跨群组事务

相关代码(这是简化版):

PersistenceManager pm = PMF.getManager();
Transaction tx = pm.currentTransaction();
String responsetext = "";
try {
    tx.begin();
    // I have extra calls to "makePersistent" because I found that relying
    // on pm.close didn't always write the objects to cache, maybe that
    // was only a DataNucleus 1.x issue though
    Key userkey = obtainUserKeyFromCookie();
    User u = pm.getObjectById(User.class, userkey);
    pm.makePersistent(u); // to make sure it gets cached for next …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine memcached jdo

28
推荐指数
1
解决办法
583
查看次数

通过GWT-RPC发送持久化JDO实例

我刚开始学习Google Web Toolkit并完成了Stock Watcher教程应用程序的编写工作.

我想正确的,如果一个人想坚持业务对象(如股票)使用JDO并将其发送从客户端来回/ 通过RPC那么就必须为该对象创建两个单独的类:一是与JDO注解用于在服务器上保留它以及另一个可序列化并在RPC上使用的服务器?

我注意到Stock Watcher有单独的类,我可以理解为什么:

  • 否则gwt编译器会尝试为持久化类引用的所有内容生成javascript,如JDO和com.google.blah.users.User等
  • 此外,服务器端类可能存在不适用于客户端的逻辑,反之亦然.

我只是想确保我正确地理解这一点.我不想创建我想要在RPC上使用的所有业务对象类的两个版本,如果我不需要的话.

gwt gwt-rpc jdo

21
推荐指数
1
解决办法
4443
查看次数

JPA和JDO之间的区别?

想在Google App Engine上开发我的项目.我想使用google big table作为数据库.对于数据库,我有两个选项JPA和JDO.请问各位建议我吗?两者对我来说都是新的,我需要学习它们.所以我会在你的回复后专注于一个.

jpa jdo

17
推荐指数
1
解决办法
1万
查看次数

Apache Cassandra的高级Java客户端选择

有四个高级API可以访问Cassandra,我没有时间尝试它们.所以我希望找到一个可以帮助我选择合适人选的人.

我会写下我对他们的发现:

DataNucleus将-卡桑德拉 - 插件

优点:

  • 支持JPA1,JPA2,JDO1 - JDO3 - 我在评论中看到,JDO比使用JPA的Hibernate更好地扩展
  • kundera中提到的所有专业人士?

缺点:

  • 到目前为止对JDO没有任何考验(当然只与我有关;)
  • 找不到文档!

昆德拉

优点:

  • 具有所有优点的JPA 1.0注释(标准符合,没有样板代码,......)
  • 承诺在不久的将来跟随功能:JPA听众,@ Preersers @PostPersist等 - 关系,@ OneToMany,@ ManyToMany等 - 交易支持,@ Transactional

缺点:

  • 插件的早期开发阶段?
  • 错误?
  • 没有可能解决JDO/JPA框架中的问题?

s7 pelops

优点:

  • 纯java api - >更好地控制持久性?

缺点:

  • 纯java api - >样板代码

hector 0.7

优点:

  • Maven化
  • spring integration - >依赖注入
  • 纯java api - >更好地控制持久性?
  • jmx监控?
  • 管理节点似乎很容易和灵活

缺点:

  • 纯java api(无注释) - >锅炉板代码

结论到目前为止

由于我对RDMS,Hibernate,JPA,Spring以及对EJB不再那么新闻充满信心,我的第一印象是,去kundera本来是正确的选择.但在阅读了一些有关JPO,DataNucleus的帖子后,我不再确定了.对于DataNucleus,学习曲线应该是陡峭的(对于经验丰富的JPA开发人员?),我不确定,我是否应该去实现它.

我主要担心的是插件的状态.还有JDO和Datanucleus-Cassandra-Plugin的论坛支持/帮助,因为据我所知,它并没有广泛传播.

有人在那里,谁有经验,有一些framworks已经可以给我一个提示?也许混合策略也是有意义的.如果(如果存在的话)JDO不灵活/足够/不足以满足我的需求,那么回归到一个更容易的pelops或hector的API?这可能吗?是否有类似于JPA的方法来获取SQL连接和获取/放置数据?


在阅读了一下之后,我发现了以下附加信息:

Datanucleus-Cassandra-Plugin基于pelops,也可以访问以获得更大的灵活性,更高的性能(?),这应该用于具有大量数据的列族,JDO/JPA访问应仅用于"管理"数据,性能不是那么重要,数据量不是很大.

对于hector或pelops来说,这仍然是个问题.

pelops为它后来的Datanucleus-Cassandra-Plugin可扩展性,或者hector,它对节点hanldling有更多的支持.

java jpa jdo datanucleus cassandra

14
推荐指数
2
解决办法
6876
查看次数

Datanucleus Programmatic API类增强

我正在使用Eclipse 3.7(OSGI),我可以进行手动增强(使用Datanucleus Eclipse插件和datanucleus-enhancer-2.1.0版本作为插件依赖项导入)

我现在正在尝试使用API​​类增强功能:http://www.datanucleus.org/products/accessplatform/jpa/enhancer.html#api

使用ASM 3.1在类路径和此代码中:

DataNucleusEnhancer enhancer=new DataNucleusEnhancer("JDO","ASM");
enhancer.setVerbose(true);
enhancer.addClasses(...);
enhancer.enhance();
Run Code Online (Sandbox Code Playgroud)

我明白了:

You have selected to use ClassEnhancer "ASM" yet the JAR for that enhancer does not seem to be in the CLASSPATH!
org.datanucleus.enhancer.NucleusEnhanceException: You have selected to use ClassEnhancer "ASM" yet the JAR for that enhancer does not seem to be in the CLASSPATH!
    at org.datanucleus.enhancer.DataNucleusEnhancer.init(DataNucleusEnhancer.java:224)
    at org.datanucleus.enhancer.DataNucleusEnhancer.addClasses(DataNucleusEnhancer.java:406)
Run Code Online (Sandbox Code Playgroud)

使用教程中建议的代码:

JDOEnhancer enhancer = JDOHelper.getEnhancer();
enhancer.setVerbose(true);
enhancer.addClasses(...);
enhancer.enhance();
Run Code Online (Sandbox Code Playgroud)

我明白了:

javax.jdo.JDOFatalUserException: There are 0 services entries for the …
Run Code Online (Sandbox Code Playgroud)

java api jdo datanucleus

14
推荐指数
1
解决办法
642
查看次数