我是否正确使用了 EJB?

2024-01-08

我正在使用 JEE6 堆栈,包括 JPA 2.0、JSF 2.0、EJB 3.1 等。

我的架构设置方式如下:

我有 JPA 注释的 DAO,使用 hibernate 作为我的 JPA 提供程序。 我有与我的facelet/xhtml 页面相对应的JSF 托管bean。 我有处理所有数据库请求的 EJB。

我的 XHTML 页面有 JSF EL,它可以调用我的托管 bean。我的托管 bean 包含对由 EJB 管理的 DAO 实体的引用。例如,我有一个映射到数据库表的用户实体。我有一个用户 EJB,它处理返回用户的所有 CRUD 操作。我有一个编辑用户的页面。高级工作流程将是:导航到用户编辑页面 -> EL 调用位于加载用户的托管 bean 中的方法。该方法从 EJB 调用 userEJB.loadUser(user) 以从数据库获取用户。用户被编辑并提交 -> 在托管 bean 中调用一个函数,该函数调用 EJB 中的一个函数来保存用户。 ETC。

我在使用 EJB 访问 JSF 页面中的数据时遇到问题。 我遇到了很多延迟初始化错误的问题,我相信这是由于我的设置方式造成的。

例如,我有一个客户端实体,它有一个延迟加载的用户列表。为了得到 客户端 我在 EJB 中调用一个方法,该方法会访问数据库、找到客户端并返回它。稍后的 我希望访问此客户端的用户列表,为此我必须通过调用某种方法返回 EJB 以加载这些用户(因为它们是延迟加载的)。这意味着我必须创建一个方法,例如

public List<User> getUserListByClient(Client c)
{
    c = em.merge(c); return c.getUserList();
}

这种方法的唯一目的是加载用户(我什至不确定这种方法是否良好或有效)。 如果我自己进行会话管理,我希望在整个请求中保持会话打开并直接访问属性,这样就可以了,因为会话无论如何都会打开,EJB 中似乎有一层额外的间接层这让我的事情变得很困难。

我确实喜欢 EJB,因为我喜欢它们由容器控制、池化、免费提供事务管理等事实。但是,我感觉我错误地使用了它们,或者我错误地设置了我的 JSF 应用程序。

任何反馈将不胜感激。

thanks,


如果我正在做会话管理 我自己,我想离开 会话针对整个请求打开 并直接访问该属性,这 会很好,因为会议会是 无论如何打开

确实,这就是在视图中打开会话 http://community.jboss.org/wiki/OpenSessioninView模式(也称为在视图中打开 EntityManager)。它也可以与 EJB 一起使用。理想情况下,事务应该在业务层/EJB 中进行管理,因此这与纯层架构略有不同。但它解决了视图中延迟加载的问题,而且很简单。

否则,您必须确保立即加载事务结束后将使用的信息。或者您可能依赖 DTO,但随后它就开始变得麻烦。

这里还有两个链接涵盖该主题并讨论优点/缺点和替代方案:

  • 那么问题:在视图模式中打开会话 https://stackoverflow.com/questions/1847040/open-session-in-view-pattern
  • 谢比亚博客:JPA 实施模式 http://blog.xebia.com/category/jpa/implementation-patterns/尤其是this one http://blog.xebia.com/2009/04/27/jpa-implementation-patterns-lazy-loading/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我是否正确使用了 EJB? 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 使用 ui:repeat 和 b:carousel?

    环境 我正在使用 JSF2 2 Bootsfaces 0 9 1 Primefaces 6 0 JEE7 和 Hibernate 5 2 以及 MySQL 5 7 DB 我拥有的 我有一个包含一组图像的模型 该集合包含我的自定义 Image
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • 使用 pysftp 或 Paramiko,如何获得包含属性的完整目录列表?

    正如标题所示 我正在尝试获取目录中所有文件和目录的列表 包括它们的属性 我正在寻找至少名称 大小 上次修改时间 以及它是文件还是文件夹 我在 Windows 上使用 Python 3 我试过了listdir 我得到了一个没有属性的文件列表
  • java.lang.Long 和 scala.Long

    我不知道我的代码中发生了什么 日志在这里 error blahblah SampleApp scala 22 53 overloaded method value reduce with alternatives error func or
  • Oracle“总”计划成本确实低于其某些要素

    我不明白为什么有时一个计划的总成本可能很小 但查看计划内部我们会发现巨大的成本 确实查询速度很慢 有人能给我解释一下吗 这是一个例子 显然 成本较高的部分来自主选择中的一个字段 该字段在子视图上执行 listagg 并且该子视图的连接条件包
  • 在运行时创建XmlRpcUrl接口

    目前 我正在使用 xml rpc net 接口通过以下语句静态创建 XML RPC XmlRpcUrl http dillieodigital wordpress com xmlrpc php public interface ICSBlo
  • DLLImport 在哪里查找非托管 DLL?

    一个简单的问题 在 Net 中声明 DLLImport 属性时 运行时在哪里寻找解决该 DLL 依赖关系的方法 我是否必须转储 DLL 和所有itsbin 文件夹中的依赖项 我认为它的工作方式与 LoadLibrary 类似 Maybe 使
  • 如何比较 PHAsset 和 UIImage

    我已经转换了一些PHAsset to UIImage PHImageManager manager PHImageManager defaultManager manager requestImageForAsset asset targe
  • 隐藏页面中的div并使其仅在打印引导程序3 MVC 5上可见

    有一个网页向用户显示信息 如果用户决定打印它 我想包含屏幕上不需要的附加信息 但在打印时会很有帮助 为了实现这种行为 我试图做一个div仅在打印时可见 但它并没有起作用 div class visible print hidden lg h
  • 如何构建卡方分布表

    我想在 python 中生成一个卡方分布表作为概率水平和自由度的函数 给定已知的卡值和自由度 如何计算概率是这样的 In 44 scipy stats chisqprob 5 991 2 Out 44 0 05001161502657908
  • 在 git rebase -i 中删除提交不会减少 .git 文件夹的大小

    我有一个 git 存储库 其中 git文件夹是7MB 然后我添加并提交了一个 exe 文件 该文件是16MB其次是 git gc aggressive git prune 经过上述我的 git文件夹现在是23MB 接下来我做了一个git r
  • sklearn Kfold 访问单折叠而不是 for 循环

    使用 cross validation KFold n n folds folds 之后 我想访问索引以进行单折叠的训练和测试 而不是遍历所有折叠 那么我们来看一下示例代码 from sklearn import cross validat
  • 有没有一种方法可以在不使用暂存缓冲区的情况下更新纹理?

    我正在与https vulkan tutorial com https vulkan tutorial com 深度缓冲代码作为基础 进行了一些更改以每帧更新命令缓冲区 我正在使用一种粗略的方法来检查 fps 不确定它到底有多准确 但我正在
  • 亲子信号沟通陷入僵局

    我已经实现了两个程序 parent cpp child c 它们应该通过信号进行通信 以交替方式无限期地工作 然而 由于某种原因 程序在随机的时间后进入死锁 我无法弄清楚为什么 发送给父进程的信号似乎在没有执行信号处理程序的情况下被丢弃 因
  • git log --follow 已重命名的目录有什么技巧吗?

    git 命令有一个有用的命令可以在重命名后跟踪文件 如下所示git log follow path to some file 不幸的是 它仅适用于单个文件 我希望能够做相当于git log follow some directory 做到这
  • 是否可以在不使用 Javascript 的情况下在 Web 引擎中检索 HTML 元素?

    有没有办法识别点击元素的类型webView 如文本框 单选按钮 按钮等 使用webEngine getDocument 假设我单击一个文本字段 我可以获得单击位置的 x y 坐标 是否可以识别该特定位置中存在的元素 像这样的东西docume
  • Jackson 中的通用元组反序列化

    碰巧我需要支持来自外部数据源的 Java JSON 数据 有一种常见的模式 它是一个包含固定数量的某些不同类型元素的数组 我们称之为元组 下面是我使用 FasterXML Jackson 对具有特定预期元素类型的 3 元素元组进行反序列化的
  • JSON 数据结构在列表和布尔值之间变化是否有效

    jstree 的 json 数据结构定义在https github com vakata jstree https github com vakata jstree 这是一个例子 text Root node children Child
  • CoreDNS 在获取端点、服务、命名空间时遇到问题

    我在 master 上的 CoreDNS 上遇到以下问题 另请参阅 master 上的ready is 0 1 E0321 22 54 45 590231 1 reflector go 126 pkg mod k8s io email pr
  • 为什么我们不能递增 (++) 或递减 (--) 数字文字

    例如 在下面的 JavaScript 代码中 为什么我们在使用变量时不会收到错误 但在使用数字文字时却收到错误 在节点 v6 9 5 上运行 let x 2 console log x 2 let y 2 console log y 3 c
  • jQuery e.stopPropagation() - 如何在不完全破坏 dropbox 功能的情况下使用?

    短篇故事 stopPropagation 可以防止下拉菜单关闭 这很好 但它也会阻止下次打开保管箱 这很糟糕 很长的故事 我正在使用 Twitter Bootstrap 并且在下拉菜单中放置了一个搜索框 如下所示 div ul class
  • 我是否正确使用了 EJB?

    我正在使用 JEE6 堆栈 包括 JPA 2 0 JSF 2 0 EJB 3 1 等 我的架构设置方式如下 我有 JPA 注释的 DAO 使用 hibernate 作为我的 JPA 提供程序 我有与我的facelet xhtml 页面相对应