【问题标题】:EJB Glassfish v3.1.2 client passed data to session bean is always nullEJB Glassfish v3.1.2 客户端向会话 bean 传递的数据始终为空
【发布时间】:2012-06-08 23:54:35
【问题描述】:

我在调用从客户端传递方法参数的会话 bean 方法时遇到问题

应用,数据到达方法调用时始终为null或设置为默认值。

虽然方法的过程与对象配合得很好

例如:

-我们有方法来持久化一个对象实体 addStudent(Student student); - 从客户端我们创建学生对象设置学生字段,如学生姓名等,调用方法 addStudent(ourStudent); 这个 ourStudent 到达方法的字段为 null 或默认值。学生被添加 这些空字段。

提前致谢。

【问题讨论】:

  • 是的 jndi 查找作品,请考虑以下内容:来自客户端:Student student = new Student(); student.setName("someName");远程.addStudent(学生);会话:现在调用发生方法继续在名称为 null 的学生对象和其他为 null 的字段上进行,所以 null 字段 student 被添加到数据库中,为什么会这样?
  • EclipseLink 动态编织? (如果是这样,请确保您尝试关闭编织)。学生类显式实现 Serializable?
  • 您需要发布 addStudent 所做的事情,以及如何获取 EntityManager 并将其与事务相关联,以及学生是否在 addStudent 方法中具有名称(或者如果它在序列化或某些其他过程)。

标签: java glassfish ejb ejb-3.0 eclipselink


【解决方案1】:

您正在将 EclipseLink 与编织一起使用,但它不起作用。你应该尝试不编织。 可能通过编辑你的persistence.xml(s)

<persistence-unit name="XXX" transaction-type="XXX">
    <jta-data-source>XXX</jta-data-source>
    <jar-file>Or List of Classes or something else</jar-file>
    <properties>
      [other properties]
      <property name="eclipselink.weaving" value="false"/>
    </properties>
  </persistence-unit>

更新: JPA 实现可以通过多种替代方式处理实体,这是一个不厌其烦的列表:

  • 扩展(这是 JPA 规范要求非私有默认值的方式 实体的构造函数)
  • 包装
  • 类的字节码操作(使其符合 EclipseLink “想要”的方式)
  • ThreadLocal 代理事物
  • 使用属性的基本反射
  • 使用 getter setter 的基本反射(如果有的话)

EclipseLink 调用字节码注入“编织”(What is Java bytecode injection?) 动态编织是在“运行时”进行编织 - 基本上是当类由类加载器加载时。 静态编织是在部署之前进行编织,但在编译之后。 对于 EclipseLink weaving 是最快的方法性能明智,它也是其他原因的首选方法。不幸的是,让编织工作通常有点棘手。完全有可能这对您的项目无关紧要,对于很多典型项目来说都无关紧要。

如果有客户端通过远程接口访问 bean,并且有实体作为参数传递或通过该连接返回值,则动态编织将不起作用。 在大多数生产场景中,特别是如果应用程序/产品不是非常小,静态编织比动态编织更受欢迎...... 要阅读有关静态与动态编织以及如何配置它的更多信息,我还没有真正找到任何优秀的资源,但这至少是半官方的: Using_EclipseLink_JPA_Weaving

发生在你身上的是实体在一端被编织,而在另一端没有被编织 -> 绝对不能工作。

好消息是,您可能根本不必关心这些编织物,或者您可能会关心。 当您禁用编织时,EclipseLink 会退回到另一种处理 JPA 实体的方法。 EclipseLink 仅在启用编织时才支持某些功能(但不需要 JPA)。

发件人:What_You_May_Need_to_Know_About_Weaving_JPA_Entities 列出了 EclipseLink 明确使用编织的内容:

  • 延迟加载(间接)
  • 更改跟踪
  • 获取组
  • 内部优化

(对于其中一些方法,如果禁用编织,则可以回退到其他方法,我猜除了“内部优化”之外的所有方法)

【讨论】:

  • 还请解释一下,添加此属性时现在发生了什么影响,因为我担心它可能会停止另一个功能或影响获取实体或其他东西?
  • 明天下午大约 10-14 小时会到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
相关资源
最近更新 更多