问题标签 [weld]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 使用 cdi 注入缓存的实例
我想使用 @Inject 向 CDI 应用程序公开由外部框架管理的实例。这些实例必须由其他框架提供,因为它们的生命周期基于各种缓存策略。
例如:同一实例在同一线程范围内可见,可能存在于许多请求范围内,会话范围不适用。似乎我需要定义一个针对这些实例的新范围?
做这个的最好方式是什么?扩展,生产者方法可以吗?
我几乎可以使用以下方法使用生产者方法:
但这迫使我明确生成的类型,这是不可能的,因为没有通用的框架接口。
任何帮助表示赞赏。
java - WELD-000044 无法从 org.jboss.weld.bean-se-module-ProducerField 获取实例
我正在尝试在 DAO 类中注入一个实体管理器并使用焊接容器对其进行测试,但我不断收到以下异常:
org.jboss.weld.exceptions.NullInstanceException:WELD-000044 无法从 org.jboss.weld 的 org.jboss.weld.bean-se-module-ProducerField-com.playground.cdi_tutorial.beans.Resources.em 获取实例。 bean.builtin.CallableMethodHandler.invoke(CallableMethodHandler.java:60) at org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43) at javax.persistence.EntityManager_$$_javassist_2.createQuery(EntityManager_$$_javassist_2. java) 在 com.playground.cdi_tutorial.model.EventDAO.getAllEvents(EventDAO.java:22) 在 com.playground.cdi_tutorial.beans.ValidationService.validateEvenNumbers(ValidationService.java:23) 在 com.playground.cdi_tutorial.beans.MyFactory .sayHi(MyFactory.java:15) 在 com.playground.cdi_tutorial.beans.MyFactoryTest.should_say_bye(MyFactoryTest.java:26) 在 sun.reflect。NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method. java:601) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 在 org.junit.runReflectiveCall(FrameworkMethod.java:44)。 runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java: 79) 在 org.junit.runners 的 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)。BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit .runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit。在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner 的 runner.TestExecution.run(TestExecution.java:38)。 runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
我尝试如下注入实体管理器:
EmProducer 看起来像这样:
}
生产者类如下所示:
在我的测试中,当这行代码被命中 Query q = em.createQuery("from Employee"); 我得到了上面的例外。实体管理器 em 不为空。
PS:我使用 WeldJUnit4Runner (http://www.hostettler.net/blog/2012/04/02/how-to-test-a-jsf-named-bean/) 来运行我的测试。
我将衷心感谢您的帮助。
谢谢!
java - Seam 持久性能否在独立应用程序中使用(在任何 Web 容器之外)
接缝持久性 (http://www.seamframework.org/Seam3/PersistenceModule) 可以在独立的焊接驱动应用程序中使用吗?独立是指任何 Web 容器之外的应用程序;只是一个简单的 Java 应用程序。
我想答案在理论上是肯定的,但恐怕它们是潜伏在黑暗中的依赖项(Servlet / Java EE / 等)。
我们非常满意地在我们的独立应用程序中使用 Weld,我试图弄清楚是否可以使用 Seam 持久性。
我没有找到任何文件验证/无效这种可能性。
cdi - 使用 CDI 修改类注释
尝试使用 CDI 扩展事件ProcessAnnotatedType
来更改@javax.ws.rs.Path
JAX-RS 资源。
...然后在引导之后,使用构建 beanjavax.enterprise.inject.spi.BeanManager
期望以下代码打印“change_me/....”
...但这不起作用。javax.ws.rs.Path
对于 JAX-RS 资源 'jaxrsClass' 保持不变。
怎么了?
ant - 使用 ant+ivy 的 Arquillian Weld-EE 测试设置
我按照入门指南建立了一个项目。我必须使用常春藤。这些是我的依赖项:
问题:虽然我映射到“*”,但 deps 没有传递解析。我必须手动添加每个罐子,就因为我被常春藤困住了吗?还是我错过了什么?
澄清:
我使用映射“myconf->default( )”transitive="true"。我这样读到:“获取依赖项的默认配置并将其映射到“myconf”。():如果依赖项不提供“默认”,则使用它提供的每个配置。所有这些都应该传递完成,这意味着每个子依赖项也将被映射。
但我得到的是:只有指定的罐子,以及运行测试时的大量 CNFE。我读到了 maven 项目中引用的 arquillian-container pom,我开始担心没有适用于 ivy 和 arquillian 的“开箱即用”依赖映射机制。如果有人可以确认这一点或提供我可以使用的工作(最佳:测试)依赖项配置,我很高兴。非常感谢!
jsf - 如何避免 jsf 中的 BusyConversationException
我在浏览 jsf 项目中的页面时遇到 BusyConversationException。如果用户在 ajax 调用期间试图导航到另一个页面,这通常会发生。当用户在单击另一个链接后立即单击一个链接而不等待页面加载时,也会发生这种情况。
例如,如果用户点击了多个链接,这些链接是通过类似于下面的代码生成的,我们肯定会得到这个异常。另一个例子是,假设用户在文本字段中输入查询,我们的应用程序发出 ajax 调用来搜索此查询。在该查询期间,如果用户单击某个按钮导航到另一个页面,也会发生 BusyConversationException。
我可以在扩展 ExceptionHandlerWrapper 类的 ExceptionHandler 类中捕获这种类型的异常,但我无法保存当前状态,对于这种情况,我能做的最好的事情就是在发生此异常时重定向到主页。
有什么办法可以避免这种情况吗?提前感谢您的回答和评论。
java - 注入 (@Inject) 字段是否安全发布?
当我在类中使用字段注入时,如下所示:
我可以对“安全发布”做任何假设吗”状态或者换一种说法,假设 MyClass 本身是线程安全的,在使用这个字段时我应该注意什么并发风险?
我的直觉通常是尽可能创建所有字段 final ,但这不适用于字段注入。当然,我可以使用构造函数注入,但是我通常最终不得不创建一个额外的“假”无参数构造函数来进行代理。问题不大,但使用字段注入更方便。另一种选择可能是将字段标记为易失性(甚至使用锁定...),但这真的有必要吗?
JSR-299 规范似乎没有回答这个问题。我在 Weld 等实现上使用 CDI。
- 我注入的对象将被多个线程使用(例如,@ApplicationScoped)。我要这个。
- 我知道如果 MyClass 是不可变的,安全发布就不是问题。但我不一定只注入不可变对象。
- MyClass 本身被假定为线程安全的;这不是我关心的问题。由于 Java 内存模型的规则,严格来说,关注的是不安全的发布,例如线程看到 MyClass 的半构造实例的可能性。
java - CDI 对话 id 始终为 1 并且在尝试恢复对话时捕获到 NonexistentConversationException
我有两个 JSF 控制器和三个共享 CDI 对话的支持 bean。调用第一个控制器后,调用非 JSF Web 应用程序以使用户登录 (OpenAM/OpenSSO),然后调用第二个控制器。通过将 '?cid=1234' 附加到第二个控制器的页面请求来保留对话 ID。
我的控制器注释如下:
@Named (javax.inject.Named)
@ConversationScoped (javax.enterprise.context.ConversationScoped)
并将控制器注入如下:
@Inject (javax.inject.Inject)
私人短暂的对话对话;(javax.enterprise.context.Conversation)
支持 bean 注释如下:
@Named (javax.inject.Named)
这是在 JBoss 7.1 上运行的,它使用 Weld 进行 CDI。
这工作正常,但是在进行了一些不相关的更改后,它不再工作了。
现在的问题是,当第一个控制器被调用时,我调用了 conversation.begin(),我返回的会话 ID始终为1。此外,当我回到第二个控制器时,我收到以下错误:
org.jboss.weld.context.NonexistentConversationException: WELD-000321 找不到要恢复 id 1 的对话
我尝试使用新会话多次访问 Web 应用程序,并且尝试从不同的选项卡和不同的浏览器访问它。始终返回对话 ID“1”。此外,据我所知,我不会在两个控制器调用之间的任何时候终止会话或对话。
java - Java Weld 空表达式工厂
我使用 JBoss AS 7.1.1 + CDI(焊接)+ JSF + Intellij IDEA。我创建了项目并下载了文件:
一切都很好,直到我开始使用 Weld(创建 beans.xml 并将 ManagedBeans 重命名为 Named)。在此之后,工件停止部署并出现错误:
“配置失败!WELD-001001 无法传递空表达式工厂”。
哪里有错?也许技术版本不兼容?我已经用 IDE Idea 下载了文件。
编辑: