几个 EAR、JPA 和接口

Posted

技术标签:

【中文标题】几个 EAR、JPA 和接口【英文标题】:several EARs, JPA and interfaces 【发布时间】:2010-11-15 13:59:13 【问题描述】:

我有工作app1.ear,包含:

JPA 实体,MyObjectImpl,从 api.jar 实现接口 MyObject api.jar 带有 MyObject 接口和 EJB Remote 接口 ejb.jar,带有 EJB,提供访问和修改 JPA 实体的方法

第二个 app2.ear 应该只使用 api.jar 中的接口与 app1.ear 通信。在耳朵之间传递 Java 基本类型时,一切正常。 但是,当 app2.ear 尝试从 MyObjectapp1.ear 实例中检索时,会引发 CORBA MARSHAL 异常,即 MyObjectImpl 找不到类:

"IOP00810257: (MARSHAL) Could not load class com.zzz.MyObjectImpl"

app2.ear 中放置 MyObjectImpl 可以解决问题,但我不想将 JPA 实现暴露给其他 ear 应用程序。 我错过了什么或者我的方法是错误的?请告知要做什么或在哪里挖掘。 非常感谢!

PS:服务器 GF 3.0.1,没有特定于 GF 的部署描述符,两个耳朵都运行在同一个 JVM 上

【问题讨论】:

【参考方案1】:

在反序列化期间需要 impl 类。如果您不想公开 impl 类,另一种方法是使用 XML 或 JSON 或 protobuff。

【讨论】:

我主要关心的是隐藏 JPA 注释。是否有可能:MyObjectImpl 实现 MyObject,MyObjectJPA 扩展(只是注释)MyObjectImpl,让其他耳朵可以使用 MyObject 和 MyObjectImpl?容器会将 MyObjectJPA 反序列化为 MyObjectImpl 吗?不敢相信没有办法向客户隐藏 JPA 注释。

以上是关于几个 EAR、JPA 和接口的主要内容,如果未能解决你的问题,请参考以下文章

java web spring jpa 在以接口为dao的方法里使用原生sql,联合查找没有对应实体,用啥来接收? 求大神

如何使用接口和 JPA

springData__jpa对数据库进行操作---dao接口和 测试类

Spring JPA 存储库接口和默认方法用例

比较JPA的EntityManager接口与Hibernate的Session接口

17 Spring Data JPA的常用接口分析