【发布时间】:2011-08-25 09:31:03
【问题描述】:
我需要一些关于用 Java 设计 N 层系统的“集成层”的建议。该层负责为“业务层”(位于单独的服务器上)保存和检索数据。我是 J2EE 的新手,我已经阅读了一些书籍和博客。技术首字母缩写词的字母汤让我感到困惑,所以我有几个问题。
首先,我目前所拥有的:我正在使用 JPA(通过 Hibernate)将数据持久化并检索到数据库中。我制作了我的数据访问对象 EJB,并计划部署到应用程序服务器 (JBoss),这使得事务更容易(它们处于我的 DAO 的功能级别),我不必担心获取 EntityManager 的句柄(依赖注入)。下面是一个例子:
@Entity
class A{
@Id
Long id;
@OneToMany
List<B> setOfBs = new ArrayList<B>;
}
@Entity
class B{
@Id
Long id;
}
@Remote
public interface ADAO{
public A getAById(Long id);
}
@Stateless
class ADAOImpl implements ADAO{
@PersistenceContext
EntityManager em;
public A getAById(Long id){ ... }
}
我的问题:业务层应如何与集成层交换数据。我已经阅读了 RESTful 服务,它们看起来很简单。我担心的是获取和设置频率增加时的性能(HTTP 通信似乎不是特别快)。另一种选择是 RMI。我的 DAO 已经是 EJB。我可以让业务层直接访问它们(通过 JNDI)吗?如果是这样,如果上面示例中的 @OneToMany 链接被延迟加载会发生什么?
例如,如果业务层执行以下操作:
Context context = new InitialContext(propertiesForIntegrationTierLookup);
ADAOImpl aDao = (ADAOImpl) context.lookup("something");
A myA = aDao.getAById(0);
int numberOfBs = myA.setOfBs.size();
如果延迟加载 setOfBs 列表,当业务层(在单独的服务器上)访问该列表时,大小是否正确?列表是否通过 EJB 的魔力以某种方式正确加载?如果不是(我期望的),解决方案是什么?
抱歉,帖子太长了。就像我说的那样,我是 J2EE 的新手,我已经阅读了足够多的内容来了解总体思路,但是我需要帮助来将这些部分组合在一起。
【问题讨论】:
标签: java rest jakarta-ee ejb n-tier-architecture