CDI 事务拦截器不工作

2024-01-18

我有一个包含以下类的 Java SE 应用程序:

main:

public static void main(String args[])
    {
        Weld weld = new Weld(); 
        WeldContainer container = weld.initialize(); 

        ShopCar sc = container.instance().select(ShopCar.class).get(); 
        sc.execute();
        weld.shutdown();
    }

我的 DAO(未完全实现):

/**
 *
 * @author vFreitas
 * @param <T> The type T 
 */
public class JpaDAO<T> implements DAO<T>, Serializable
{
    /* The EntityManager of my connection */
    private final EntityManager em;
    /* The class to be persist */
    private final Class<T> classe;

    private ThreadLocal<EntityManager> threadLocal;

    /* Builder */
    /**
    *
    * @author info1
    * @param classe The class to that will represent T
    * @param em A new instance of EntityManager 
    */
    public JpaDAO(Class<T> classe, EntityManager em)
    {
        this.classe = classe;
        this.em = em;
        threadLocal = new ThreadLocal<>();
        threadLocal.set(em);
    }

    @Override
    @Transacional
    public void save(T entity)
    {
        //em.getTransaction().begin();
        em.persist(entity);
        //em.getTransaction().commit();
    }

...

我的 DAO 工厂:

public class DAOFactory<T>
{
    @Inject @MyDatabase private EntityManager em;

    @SuppressWarnings({ "rawtypes", "unchecked" })    
    @Produces
    public JpaDAO<T> createJpaDAO(InjectionPoint injectionPoint) throws 
            ClassNotFoundException 
    {    
        ParameterizedType type = (ParameterizedType) injectionPoint.getType();    
        Class classe = (Class) type.getActualTypeArguments()[0];   
        return new JpaDAO<>(classe,em);    
    }    
}

拦截器注释:

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@InterceptorBinding
public @interface Transacional 
{

}

和我的拦截器Impl:

@Interceptor
@Transacional
public class TransacionalInterceptor 
{

    @Inject @MyDatabase
    private EntityManager manager;

    @Inject private ThreadLocal<EntityManager> threadLocal;

    Logger logger = LoggerFactory.getLogger(TransacionalInterceptor.class);

    @AroundInvoke
    public Object invoke(InvocationContext context) throws Exception 
    {
        manager = threadLocal.get();
        //EntityTransaction trx = manager.getTransaction();
        if(!manager.getTransaction().isActive())
        {
            manager.getTransaction().begin();
            System.out.println("Starting transaction");
            Object result = context.proceed();
            manager.getTransaction().commit();
            System.out.println("Committing transaction");
            return result;
        }

beans.xml:

<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd" >

    <interceptors>
        <class>shopcar.util.TransacionalInterceptor</class>
    </interceptors>
</beans>

当我保存一个实体时,它说我需要打开我的事务......所以我的拦截器没有被调用。我做了很多搜索,但不知道我的代码有什么问题。我很感激一些帮助。谢谢!


好的,我必须重新阅读您的问题才能看到问题。

问题是在你的生产者方法中,你正在实例化一个 DAO。因为你使用实例化它new您绕过拦截器绑定。

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

CDI 事务拦截器不工作 的相关文章

  • 如何使用 IO Codenameone 发布图片/图像

    因为 codenameone 不能使用外部库 HttpConnection 所以我必须使用 Codenameone 提供的内部库 API 只是我已经设法使用 ConnectionRequest 将数据发布到格式化文本 字符串 我想知道是否有
  • Android 上的 setTimeOut() 相当于什么?

    我需要等效的代码setTimeOut call function milliseconds 对于安卓 setTimeOut call function milliseconds 您可能想查看定时任务 http developer andro
  • mvn dependency:analyze 结果不正确

    我一直在寻找一种工具 它能够向您显示未使用的依赖项 我很快就偶然发现了 Maven 命令mvn dependency analyze 这样做的问题是 它经常检测到 未使用的 依赖项 如果缺失 这些依赖项就会导致构建失败 这是优化项目的示例
  • JLabel.setText() 中的换行符

    使用 JLabel setText 时如何插入换行符 我尝试使用 Html 但似乎可以使其适用于 setText 仅适用于 jLabel 的初始声明 最初声明 jlabel 时的方法是 label new JLabel Hello Worl
  • lombok - 多个镜头中的 @Builder 模式

    I use Builder of 龙目岛项目 https github com rzwitserloot lombok 所以考虑我有这个例子 Builder public class Client private Getter Setter
  • 将 Spring Boot 应用程序部署到 Heroku 失败并显示“无效标志:--release -> [帮助 1]”

    当我尝试将代码部署到 Heroku 时 通过git push heroku master 我收到 Maven 错误 remote ERROR Failed to execute goal org apache maven plugins m
  • Android - Java - 发送 facebook 聊天消息的意图(facebook 禁用 xmpp)

    Facebook 已弃用 xmpp API 有没有办法打开意图 或将数据传递到fb 以在Android设备上发送聊天消息 设备上安装的 Facebook 和 Messenger 应用 谢谢 您需要将 uri 传递给意图 这里10000572
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • Java反序列化中避免重复对象

    我有两个列表 list1 和 list2 其中包含对某些对象的引用 其中某些列表条目可能指向同一对象 然后 由于各种原因 我将这些列表序列化为两个单独的文件 最后 当我反序列化列表时 我想确保我不会重新创建超出需要的对象 换句话说 List
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 如何迭代SparseArray?

    有没有办法迭代 Java SparseArray 适用于 Android 我用了sparsearray通过索引轻松获取值 我找不到 看来我找到了解决方案 我没有正确注意到keyAt index 功能 所以我会这样做 for int i 0
  • 无法运行简单的 doclet 程序:包 com.sun.javadoc 不存在

    我正在尝试运行一个简单的 doclet 程序 但无法编译它 javac cp cygdrive c Progra 2 Java jdk1 8 0 65 lib tools jar A java 但它抛出 A java 1 错误 包 com
  • 如何实现再次播放功能?

    我希望在游戏结束时得到提示 如果我还想再玩一次的话 并使用 Y N 输入 退出游戏或重复游戏 我该如何以最有效的方式解决这个问题 编辑 描述资源路径位置类型 类型 Main Main java ScaredyCat src se grupp
  • 何时以及为何使用缓冲输入和输出流? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我读到这些是为了减少磁盘 网络调用开销而使用的 这在写操作的情况下似乎很好 但是进行缓冲读取有什么好处呢 如果您按字节读取文件 则每次都会进
  • 在调试模式下,哪些代码更改会自动反映在 Eclipse 中?

    我使用 eclipse 用于编写 调试 作为 IDE 在调试模式下 当我进行一些更改 例如初始化局部变量 时 它们会自动反映 但其他更改例如更改静态变量的值 有时我会收到一条消息 说我需要重新启动虚拟机 有时则不需要 现在的问题是哪些类型的
  • Spring Boot 健康执行器 - 什么时候上线?

    我找不到任何有关 Springs Health Actuator 何时返回 UP 状态的文档 你能依靠一切吗 Components正在初始化 会不会 Controller准备好满足请求了吗 为了测试应用程序上下文是否已加载 您可以执行此自定
  • 如何在 SpringDoc OpenAPI 3 中引用文件?

    我有 Spring Boot 项目 我想在其中记录我的 API 这里是正在处理的 Web 服务的示例 ApiResponses value ApiResponse responseCode 200 content Content media
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram

随机推荐

  • iOS - PushViewController 与 PresentModalViewController 的区别

    调用有什么区别presentModalViewController and pushViewController when 动画设置为 否 即使是 那只是可以更改的动画样式 导航控制器是在呈现模态视图时定义的 因此它也可以通过调用堆栈进行导
  • 安排任务以供将来执行

    我看过Task http msdn microsoft com en us library system threading tasks task 28v vs 110 29 aspx and Timer http msdn microso
  • Drools 在 where 子句中获取 List 的第一个元素

    是否可以从中获取列表的第一个元素whenDrools 中的条款 如果我不知道列表中的对象字段值 而我只想检索第一个元素 我该怎么做 rule TestRule1 dialect java when c Collection listCust
  • 在mongodb中使用ReflectionDBObject类插入java对象?

    我正在尝试将java中用户定义类的对象插入mongodb集合中 我的班级是这样的 class C extends ReflectionDBObject int i C 插入代码是 Mongo m new Mongo localhost co
  • 自定义表单生成器的数据库设计(和结果存储)

    我正在尝试实现一个自定义表单生成器 类似于Wufoo http wufoo com and Google http docs google com 虽然我创建了一个简单的 UI 来创建这些自定义表单 但我的问题在于数据库设计 创建表单后 J
  • 如何使用Python模拟字符串键盘输入?

    我使用的是 windows 8 并且有 windows api 模块 我正在尝试创建一个方法 TypeInput argument argument is a string 目的是如果参数是字符串 我的方法会模拟参数的类型 很遗憾 我目前使
  • 什么是开发 Pod?

    一般来说 我对 CocoaPod 和 IOS 很陌生 我尝试使用我在 podfile 中本地构建的框架 如下所示 Pods for Example pod OsonWidget path gt OsonWidget 当我运行pod inst
  • RxJS 如何创建或模拟异步?

    我在理解 RxJS 可观察对象和主题的执行模型 顺序时遇到问题 我读了很多关于 RxJS observables 的文献和博客文章 因为它们的订阅可以取消 并且可以通过以下方式发出多个结果 值 next 这个问题可能很容易回答 但是 RxJ
  • android中如何设置gridlayout每一行的背景图片?

    我正在构建一个应用程序 我想在其中设置网格布局的每一行不同的图像 有一个图像文件路径 url 的数组列表 只需从 getView 方法内部调用它 例如 layoutName setBackground imageList get posit
  • Javascript 多行字符串和意外令牌非法

    我在它自己的单独的 js 文件中有一个多行字符串模板 用于下划线 js 然而 无论我如何逃避换行符 我仍然得到 未捕获的语法错误 意外的标记非法 当文件加载到浏览器中时 位于文件的第一行 App Templates template1 di
  • Python 转义序列 \N{name} 不按定义工作

    我正在尝试打印给定名称的 unicode 字符 如下所示 coding utf 8 print N SOLIDUS print N BLACK SPADE SUIT 然而我得到的输出并不是很令人鼓舞 转义序列按原样打印 ActivePyth
  • Laravel 4 - 如何通过 Eloquent ->paginate() 使用“offset”而不是“page”?

    我正在将现有的 REST API 迁移到 Laravel 4 1 该 API 目前使用offset作为查询字符串参数来指定offset的记录需要 我想使用默认的 Eloquentpaginate 但这些搜索page查询字符串参数 当然 它使
  • 使用 ant debug 在命令行中构建并运行具有子项目的 Android 项目

    我正在尝试从命令行构建一个 android 项目 我的 android 项目在我的主 android 项目中有一个子项目 当我运行 ant debug 命令时 它显示构建类时出现错误 因为未从子项目中找到库类 所以我认为子项目没有正确包含
  • 如何使用底部选项卡导航处理 SafeArea 的背景颜色?

    目前的行为 大家好 我想设置底部选项卡的背景颜色 所以我做了如下
  • 代表 MSA(Microsoft 个人)和 AAD 帐户的 Azure Ad v2.0 端点

    我们有一个面向用户的 Web 应用程序和一个中间层 ASP NET Core Web api 目前在 Azure Ad v1 0 端点上使用 OAuth 2 0 代表流 OBO 仅对 AAD 帐户进行身份验证 我们还需要对 MSA 个人 帐
  • 车把缩小 HTML

    在 Node js Express 应用程序中 是否有一种方法可以在将所有 Handlebars 模板发送到渲染器之前缩小它们 我考虑创建一个 Express 中间件来对 HTML 响应正文进行缩小 但我很快意识到这是非常无效的 因为缩小会
  • 使用正则表达式替换特定的 HTML 标签

    好吧 这对你们来说很简单 我们使用 ActiveReports RichTextBox 来显示一些随机的 HTML 代码 ActiveReport 支持的 HTML 标签可以在这里找到 http www datadynamics com H
  • 从子类访问实例变量

    我正在尝试从子类访问父类的数据成员 我不知道如何称呼它 我找到了很多有关访问类变量但不是子类中的实例变量的信息 这是我的代码 class Shape var woohoo def initialize end def area end en
  • 模板类,函数特化

    我想要一个类似于下面的模板类 然后 我想要其中有一个具有模板专业化的函数 具体取决于 CLASS 模板参数 我该如何进行这项工作 我意识到我提供的代码在很多层面上都是错误的 但这只是为了说明这个概念 template
  • CDI 事务拦截器不工作

    我有一个包含以下类的 Java SE 应用程序 main public static void main String args Weld weld new Weld WeldContainer container weld initial