我正在处理一个项目,我必须处理不同类型的传入消息文件(xml,edifact等)。该项目使用EJB构建在jboss中,用于重复执行任务。
我不是本地人做EJB以及你使用它们的方式,所以我试着倾听,我的同事说什么以及我读到了什么。我已经告诉过,一个核心概念是将逻辑排除在你的实体之外(它们只是数据存储对象),因为实体jar文件包含在使用任何服务的每个程序中,而你却没有希望所有那些调用项目的更新都能在逻辑上进行任何更改,您希望在中心空间进行更改。
对我来说听起来很明智。这就是我认为EJB提供服务于数据的服务的地方。我遇到的问题是我的远程EJB不能改变任何对象,因为它们(当然)是按值传递的。返回对象的更改版本也不起作用,因为该对象已经存在并在不同的地方引用。
如何对对象进行操作,以集中方式修改对象?我将在几十个项目中对该对象进行相同的操作。我能想到的唯一方法是添加一个tool.jar,它违背了EJB的目的,并没有把逻辑放在实体中,或者添加一个带有跳回地址的驼峰路由,这看起来非常复杂和难以了解代码阅读器。
要么我误解了一些基本原则,错过了一个重要的工具,要么我们的设计必须有严重的缺陷。
(更具体一点:我有一个Message-Entity,它有许多属性,如收件人,发件人,邮件大小,......已经设置。对于某种消息,我必须做同样的操作,涉及在消息中设置多个字段,并添加需要附加到消息实体的多个实体。我的EJB可以完成所有这些,但是当然会丢失更改,并且返回修改后的对象不起作用,因为对原始消息实体的多次引用。)
答案 0 :(得分:0)
我可能忽略了这一点,但实体对象是数据库行的表示 - 为什么不只是保留远程会话bean的更改?数据库正是为了提供一致的状态视图,所以它是理想的地方。