如何使用 jax-rs 子资源定位器处理持久性上下文(EntityManager)?

2024-04-25

我在我的应用程序中使用 jax-rs Restful Web 服务和子资源定位器。但是,将entityManager 传递给子资源后,我无法在此子资源中保留任何新对象。

然而,entityManager 允许我查询它的数据。

这是我的主要资源:

@Path("/registrations")
@Stateless
public class RegistrationsResource {

    @Context
    private UriInfo context;

    @PersistenceContext(unitName="pctx")
    private EntityManager em;

    public RegistrationsResource() {
    }

    //POST method ommited

    @Path("{regKey}")
    public RegistrationResource getRegistrationResource(@PathParam("regKey")
    String regKey) {
        return RegistrationResource.getInstance(regKey, em);
    }

}

这是我的子资源:

public class RegistrationResource {

    private String regKey;
    private EntityManager em;

    private RegistrationResource(String regKey, EntityManager em) {
        this.regKey = regKey;
        this.em = em;
    }

    @Path("securityQuestion")
    @GET
    public String getQuestion() {
        return "iamahuman"+regKey;
    }

    @Path("securityQuestion")
    @POST
    public void postSecurityAnswer(String answer) {
        if(!answer.equals("iamahuman"+regKey)){
            throw new WebApplicationException(Status.BAD_REQUEST);
        }

        //Getting this information works properly
        List<RegistrationEntity> result = em.createNamedQuery("getRegistrationByKey")
            .setParameter("regKey", regKey).getResultList();

        switch(result.size()){
            case 0 :
                throw new WebApplicationException(Status.NOT_FOUND);
            case 1:
                break;
            default:
                throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR);
            }

            RegistrationEntity reg = result.get(0);
            UserEntity newUser = new UserEntity();

            newUser.setHashedPassword(reg.getPwHash(), reg.getSalt());
            newUser.setUsername(reg.getUsername());
            newUser.setName(reg.getName());
            newUser.setSurname(reg.getSurname());

            //CRASHES HERE
            em.persist(newUser);
    }
}

正如您所看到的,它从数据库中获取注册对象,创建新用户进行注册并尝试保留它。但是,em.persist(newUser) 会抛出 TransactionRequiredException。

我的问题是:我应该如何将 EntityManager 传递给子资源,以便它可以正确保留新对象?


抱歉再次挖掘这个问题,但我建议如下:

  • 还将子资源注释为 @Stateless EJB
  • 将 @EJB 注入成员字段放入父资源类中,如下所示:
    
    
        @EJB private RegistrationResource registrationResource;
      
  • 在“getRegistrationResource()”中,不调用子资源的构造函数,而是返回注入的EJB引用:
    
    public RegistrationResource getRegistrationResource() {
        return this.registrationResource;
    }  

但是,要实现此功能,您不能将“@PathParam”作为构造函数参数传递。您必须通过“@Context”或另一个@Path 声明在子资源中单独访问它。
这使您能够以与父资源中完全相同的方式将 EntityManager 注入子资源中,而无需将其传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 jax-rs 子资源定位器处理持久性上下文(EntityManager)? 的相关文章

  • 如何生成带logo的二维码?

    我正在为 Android 设备开发应用程序 我想生成带有徽标的二维码 With ZXing I know how to generate simple QR codes like this one But I want to generat
  • 如何设置评分栏的星星颜色?

    如何设置评分栏的星星颜色 我想要黄色星星 最简单的方法 android progressTint color color 光滑有光泽
  • 如何将json从android发送到php?

    为了将 json 从 android 发布到 php 我使用了 Volley 库StringRequest目的 StringRequest sr new StringRequest Request Method POST url new R
  • 查看登录设备

    我想查看Log在设备上 即System out println 我可以查看DDMS但如何在运行时在设备屏幕上查看APK文件 还有一个适用于 Android 的 Logcat 应用程序 code google com p android ra
  • Servlet 包含 Tomcat 中的 HTTP 标头

    我有一个 servlet 它的请求调度程序包含另一个 servlet 包含的 servlet 设置了我想在包括小服务程序 因此 我在 include 方法中传入一个自定义 HTTPResponse 对象 该对象捕获来自 servlet 的所
  • Java心跳设计

    我需要在我的 Java 项目上实现一个心跳系统 3 5 个客户端和 1 个服务器 但我有一些问题 1 客户端需要有 2 个套接字吗 1 用于心跳 1 用于接收我的软件的正常消息 2 我看到在特定情况下 当客户端滞后时 客户端不会收到消息 如
  • 何时使用环境变量与系统属性?

    我想知道以下哪种方法是首选方法 我们可以将事情设置为APP HOME path to file export in profile或类似的东西 并将其访问为System getenv APP HOME 或者 也可以使用属性作为 DAPP H
  • Java - Servlet 的默认 contentType

    在servlet中 通常我们会指定一个contentType 然后我们就可以打印出html代码了 response setContentType text html PrintWriter out response getWriter 如果
  • Java中的字符算术

    在玩的过程中 我遇到了一些对我来说似乎很奇怪的事情 以下不是有效的 Java 代码 char x A x x 1 possible loss of precision 因为其中一个操作数是整数 所以另一个操作数被转换为整数 结果无法分配给字
  • Java TreeMap时间复杂度-lowerKey

    时间复杂度是多少lowerKey Java实现中的操作TreeMap 我认为它是 log n 但我在文档中找不到它 更基本操作的复杂性已有详细记录 此实现提供了有保证的 log n 时间成本 containsKey 获取 放置和删除操作 顺
  • cipher.update在java中做什么?

    我正在实施 DES CBC 我很困惑什么cipher init cipher update and cipher dofinal做 我只是使用 init 来设置密钥dofinal得到结果 我不使用更新 那是对的吗 另外使用时结果有什么不同U
  • 如何从java程序中编译.java文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 Java 内部编译外部 java 文件 https stackoverflow com questions 10889186 compiling external java files from
  • int 到 long 赋值

    我一直在尝试这个 int 和 long 转换 我尝试分配一个int变量为along多变的 代码如下 public static void main String args int i 1024 long j i long k i i i i
  • 将文件附加到 WCF REST 服务响应

    我有一个看起来像这样的资源 users id summary format format When format是 xml 或 json 我用一个由 WCF 自动编码的用户摘要对象进行响应 到目前为止还不错 但当format等于 pdf 我
  • 策略模式的现实示例

    我一直在读关于OCP原理 http en wikipedia org wiki Open closed principle以及如何使用策略模式来实现这一目标 我打算尝试向几个人解释这一点 但我能想到的唯一例子是根据 订单 的状态使用不同的验
  • 在 Android 应用程序中编辑/添加 IPTC 元数据

    我看过许多其他类似的问题 但似乎没有一个有准确的答案 我正在开发一个可处理大量图像的 Android 应用程序 我希望通过编辑 IPTC 关键字标签 或其他适当标签 的值来向图像添加信息 我在用元数据提取器 http drewnoakes
  • 遍历多行字符串

    我得到一些数据 def data some useless text n even more n finally interesting text 我怎样才能得到其中 有趣的部分 所以基本上所有行都不是以 开头的 Groovy 的一种选择是
  • 错误:java.lang.NoSuchMethodError:org/springframework/asm/ClassVisitor.(I)V

    我的 POM 中有这两个依赖项 我认为这是造成此问题的原因 但我尝试了许多不同的方法和更新的版本 但没有任何效果对我有用 有人可以帮忙吗 XML文件
  • Java:如何复制对象数组?

    现在 我有一个 Point 对象数组 我想制作一个COPY该数组的 我尝试过以下方法 1 Point temp mypointarray 2 Point temp Point mypointarray clone 3 Point temp
  • 从 Web 服务器异步调用应用程序

    我有一个用 Spring 制作的 在 Tomcat 上运行的 Web 应用程序 在同一台机器上有一个普通的 Java 应用程序 我想通过从Web服务器调用Java应用程序来执行它 但我想让应用程序不会使用服务器的资源 它涉及分类器的训练 因

随机推荐

  • 获取个人资料的 Facebook 创建日期[重复]

    这个问题在这里已经有答案了 是否可以通过使用 Graph API 获取 Facebook 个人资料的创建日期 时间 我需要它来建立一个身份验证机制 该机制不允许刚刚创建的 Facebook 用户 调用 Facebook API 是一个 相对
  • 找不到主要出口来加载“XYZComponent”

    我在 Net MVC 组件中加载了 ng2 代码 但控制台中显示以下错误 异常 未捕获 承诺 错误 找不到加载 UsersComponent 的主要出口 错误 找不到加载 UsersComponent 的主要出口 知道可能是什么问题吗 我正
  • Ruby On Rails 更新 Heroku 动态路由

    我有一个使用应用程序范围的 slugs 的应用程序 使用懒惰的宝石 https github com RISCfuture slugalicious与 Sluggable 表 并使用以下代码路由到这些 slugs Slugs begin S
  • 在 Fluent nHibernate 中使用派生类

    我有两个共享公共字段的表 我不想重新映射所有这些 而是 希望拥有一个具有公共字段的基类 对于 POCO 来说这很简单 class Base public string commonField get set class Derived Ba
  • 如何在 C# 中读取文本文件并将数据添加到 int 数组中?

    我正在尝试读取一个文本文件 其中包含以逗号分隔的数字 当我阅读时使用File Readline 我把它拿到string 我需要将其转换为 int 数组 但它给出了错误 文本文件的内容 146429 143689 144380 141523
  • 将 unicode 对象转换为带有实体的拉丁字符串

    我有一个 unicode 对象 例如 x u a 日本語 en i hall le 并希望将其转换为带有 h tml entities 的 latin 1 字符串 例如 a amp 26085 26412 35486 en 269 i ha
  • C/C++ stdlib 命名约定的名称?

    我想知道 C C 标准库中使用的命名约定是否有一个名称 或者至少有一个可以查找规则的备忘单 例如 push back underscore used setstate but not used here string npos when t
  • 没有 id 或名称的 Spring bean

    我正在审查一些 Spring 代码 并且看到一些没有 id 或名称的 bean def 做这件事的人不在场 无法询问 该应用程序运行良好 我不知道这必然意味着什么 有人知道这是否有什么特别的含义吗 某些 Bean 不需要由上下文文件中的其他
  • Spring SAML 扩展和 Spring Security CSRF 保护冲突

    我们有一个带有 Spring Security 3 2 4 的 Spring MVC 4 0 5 应用程序 其中包括运行良好的 CSRF 保护 我们现在添加 SAML 安全扩展 spring security saml2 core 1 0
  • 如何在 JSTL 中设置 cookie

    我正在尝试实现以下目标 但不确定是否可能以及语法应该是什么
  • Python:运行所有子目录中的脚本

    我是Python新手 我正在用它来做一些数据分析 我的问题如下 我有一个包含许多子目录的目录 每个子目录都包含大量数据文件 我已经编写了一个 Python 脚本 当在这些子目录之一中执行时 该脚本会执行数据分析并将其写入输出文件 该脚本包含
  • 在 Postgres 中将数组转换为行

    如果我在 SQL 语句中有类似的内容 A B C 如何将其转换为具有多行的列 如下所示 col A B C 我无法更改该字符串的创建方式 因为它是从外部程序注入到 SQL 查询中的 例如 我不能将其作为 A B C 用方括号替换 我可以把任
  • 无法通过 WSO2 API Manager 中的自定义中介流中的呼叫中介器

    在 WSO2 AM 1 10 中创建自定义中介流以实现 API 链接 作为第一步 我创建了此流程作为测试 它调用 REST 服务以生成令牌并将响应返回给客户端
  • Java Swing 组件中的 HTML 标签

    向 Swing 组件 例如 JLabels 添加 HTML 标签是否会使 JFrame 的渲染速度变慢 我的意思是 Swing 组件中 HTML 渲染的性能如何 是的 这取决于你的 html 的复杂程度 实际上 当你的 jlabel 中有
  • jquery 自动完成不响应动态插入的元素

    我们正在研究使用 jquery 动态插入元素的自动完成 之前对静态元素进行过自动完成 下面是插入一个自动完成添加元素的 html 源代码 同一页面上可能插入多个元素 插入元素的 id 在插入之前是未知的 id 因元素而异
  • 在 jupyter 中 for 循环播放音频

    我有大量需要注释的训练数据 为了做到这一点 我需要听一堆声音片段并记下我听到的内容 我在笔记本上为此写了一个小脚本 我的主要问题是 IPython 显示不循环显示 举个例子 import numpy import IPython displ
  • 在没有活动的情况下启动应用程序,我的广播接收器不工作

    在我的应用程序中 我有一个广播接收器 用于捕获发送到手机的消息
  • Observer() 的结果似乎没有考虑 PyEphem 中的海拔影响

    我对 PyEphem 模块给出的与 Observer 查询相关的结果以及海拔的影响进行了查询 我从几个来源了解到 例如http curious astro cornell edu question php number 388 http c
  • 如何在 Spring MVC 中执行自定义验证?

    我有以下代码 允许用户更新姓名和年份 Model Entity public class Person implements Serializable private static final long serialVersionUID 1
  • 如何使用 jax-rs 子资源定位器处理持久性上下文(EntityManager)?

    我在我的应用程序中使用 jax rs Restful Web 服务和子资源定位器 但是 将entityManager 传递给子资源后 我无法在此子资源中保留任何新对象 然而 entityManager 允许我查询它的数据 这是我的主要资源