问题标签 [cdi]
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.
annotations - 在运行时注入/选择数据源的任何方式?
我有一个 MySQL 数据库,其中包含许多数据库,每个数据库都以特定的客户命名。
每个客户部署一个 webapp。webapp 的名称决定了底层数据库的名称。当 webapp 启动时,我有一个修改过的 Spring PropertyPlaceholderConfigurer 来获取 ServletContext(如果可以)并确定名称。然后我在我的数据源设置中取消引用它。工作精美。完全相同的代码可以部署给所有客户,他们可以毫无问题地找到他们的数据库(也是用于定位 MySQL 主机的 DNS 名称)。
我想切换到 GlassFish 或 JBoss AS 6,并且仍然使用直接的 JEE6 API/注释做同样的事情。
有没有办法做到这一点?我不担心安全性——数据集足够大,足以证明它们自己的机器和 web 应用程序的合理性,并且由于数据库模型与代码相关联,它们需要保持同步。由于并非每个客户都需要手头任务的最新代码,因此他们以不同的速度进行修订。
我喜欢 JEE6 的便利性,它整合了 Spring 曾经拥有的很多东西,然后还有一些,但我讨厌不得不处理应用程序服务器及其白痴,但将 Spring 拼凑在一起也不好玩。
java - 在 CDI(焊接)中注入对象列表
假设我有一个名为 的接口,以及SocialNetworkService
三个实现 -TwitterService
和.FacebookService
FriendFeedService
现在我想,每当我的托管 bean(或任何 Web 组件)收到消息时,在所有社交网络中共享它。我试过:
但它不起作用(部署错误)。(也尝试了@Any
预选赛 - 结果相同)
那么,有没有办法注入接口的所有(或部分)实现的列表?
我知道给定注入点不应有多个可能的 bean 的规则。我想我可以通过创建一个生成列表的生产者并使用来实现这一点Instance<SocialNetworkService>
,但这对于这项任务来说似乎太多了。
jboss - 混合 Spring MVC 和 CDI/JEE6 的最佳方式是什么?
我不是 JSF 的粉丝。Spring MVC 对我来说很有意义,我过去曾使用过它。
你能说服我放弃它或提供将它很好地集成到 JEE6 并与 CDI 共享和陷阱的提示。
我不介意只为 MVC 东西提供应用程序上下文,但如果我在 MVC 控制器中使用 @Inject 或 @EJB,会出现什么问题?
Seam3 看起来很有趣,但它准备好投入生产了吗?
java - Seam Faces 导致部署时错误
我使用 ICEfaces 2.0 Beta 1 和 Seam Faces 3.0.0 Alpha 3 Snapshot 在 GlassFish 3.0.1 上从 EAR(捆绑 EJB-JAR 和 WAR)中运行 Java EE 6 应用程序。
当我部署 EAR 时,我收到一个错误。当我删除 Seam Faces 时,不会发生此错误。这是我的 GlassFish 日志中的错误(我编辑了第一位,它只是列出了我的会话 bean 并说它们已被转换。由于 StackOverflow 的 30000 个字符的限制,我切断了最后几个例外。):
是什么赋予了?我已经在网上搜索了这个异常,它看起来像是在 EJB-JAR 和打包在单个 EAR 中的 WAR 上启用 CDI 时发生,但只有我的 WAR 启用了 CDI(只有它有 beans.xml )。我尝试将依赖项移至 EAR,但那时我得到了一个不同的异常。
谢谢!:)
jakarta-ee - CDI:跨不同模块/bean档案使用拦截器
我的 Java EE 6 应用程序包含一个 war 和一个打包在 ear 文件中的 ejb 模块。我将 CDI 用于 DI(即我在两个模块中都有一个 beans.xml 文件)。我也想使用在war模块的ejb模块中定义的日志拦截器。我在 ejb 的 beans.xml 中启用了拦截器:
这仅适用于在ejb 模块中使用拦截器注释的类。战争模块中的类不会被拦截(尽管它们也被拦截器注解)。我认为解决方案是在战争的拦截器中启用拦截器(如上)。但是无法使用以下消息部署应用程序:
严重:加载应用程序时出现异常:WELD-001417 启用的拦截器类 com.test.interceptor.LoggingInterceptor 既没有注释 @Interceptor 也没有通过可移植扩展注册
我的 LoggingInterceptor 看起来像这样:
和拦截器绑定:
如何将拦截器用于两个模块?
java - 如何使用 Weld 轻松注入字符串常量?
我们有一种情况,我们以 Map 的形式为正在运行的程序提供外部配置。我发现 JSR-330 依赖注入提供了一种更简洁的方式来在代码中使用该配置映射,而不是传递映射或使用 JNDI 来获取它。
让 JSR-330 实现自动填写此字段。
使用 Guice,我可以设置值
我希望能够在 Weld 中做同样的事情(将“server.username”绑定到例如“foobar”)并且我知道机制最有可能是 beans.xml,但我更喜欢简单的“将此地图提供给 Weld ,请”代码替代。什么是这样做的好方法?
编辑 2013-10-16:在研究了在编译时而不是运行时工作的 Dagger 之后,我发现我们通常每个程序有 10-20 个,我们可以@Provider
接受每个配置字符串的方法,然后在配置中查找地图。这允许特定于方法的行为(包括默认值)、提供 javadoc 的能力以及将所有这些方法放在同一个类中的能力。它也适用于开箱即用的 Weld。我正在考虑在博客条目中写一个更完整的解释。
eclipse - JSF2 + CDI(焊接)bean + Eclipse Helios 的内容辅助
我在 eclipse helios 中尝试 JSF2 CDI (weld) beans 而不是ManagedBeans
,但无法在表达式语言中为我的Named
beans ( #{myNamedBean.
Ctrl+ Space}
thingy)执行自动完成
但是 OTOH 使用 ManagedBeans,内容辅助运行良好.. Eclipse Helios 是否支持 CDI bean 的内容辅助?
有人有这方面的经验吗?
java - 使用 CDI @Inject 注入 Spring bean
我正在尝试将 Spring 上下文中定义的 bean 注入 CDI 托管组件,但没有成功。bean 没有被注入,而是在每次应该执行注入时创建一个新实例。我的环境是带有 JBoss Weld 的 Tomcat 7。
Spring ApplicationContext 很简单:
CDI 托管 bean 如下所示:
这是我的faces-config.xml
但是,当我test
从 JSF 页面中访问该属性时,Test
每次访问都会创建一个新实例。这是一个简单的例子:
我得到以下输出:
刷新后:
我可以看到第一个输出是正确的。无论我多久刷新一次页面,testFromSpring
都会从 Spring 上下文中定义的 bean 返回值。然而,第二个输出清楚地表明,每次调用组件getTest
上的方法时,都会创建并注入一个新实例,而不是像我期望的那样使用 Spring 上下文中的实例。test
Test
那么,这种行为的原因是什么?
如何将 Spring 上下文中的 bean 注入 CDI 托管 bean?
我还尝试使用使用 Spring 上下文中定义的名称的限定符,但现在抛出异常,指示找不到 bean:
对于代码
transactions - Java EE 6 CDI 事件是事务性的吗?
Java EE 6 CDI 事件是事务性的吗?
如果我在事务中触发事件,然后回滚事务,事件侦听器的效果是否也会回滚?
这种行为是否依赖于事件侦听器本身支持事务?
如果我尝试从事件侦听器中回滚异常,它会回滚触发事件的事务吗?
java - 通用 CDI 生产者方法未按预期工作
我有一个 CDI 生产者方法 - 根据与此示例无关的某些条件 - 创建不同类型的对象:
但是在使用这个生产者时,我总是在以下情况下得到一个错误:
它仅在生产者的 create 方法在方法签名中具有预期类型时才有效:
现在 String get 已正确注入,但我无法从生产者方法中生成一个整数。但这正是我想要避免的,因为生产者本身应该是完全通用的。
我做错了什么还是没有办法实现我想要的行为?