我的目标是从 JSF2 ExceptionHandlerWrapper 中获取所有在役 CDI 管理的 bean(某个父类)的集合。请注意,异常处理程序部分很重要,因为类本身不是有效的注入目标。所以我的假设(也许不正确)是我唯一的途径是通过 BeanManager 编程。
使用BeanManager.getBeans,我可以成功地获得可用于注入的所有bean的集合。我的问题是,当使用BeanManager.get引用获取bean的上下文实例时,如果bean不存在,它将被创建。所以我正在寻找一个只会返回实例化bean的替代方案。下面的代码是我的起点
public List<Object> getAllWeldBeans() throws NamingException {
//Get the Weld BeanManager
InitialContext initialContext = new InitialContext();
BeanManager bm = (BeanManager) initialContext.lookup("java:comp/BeanManager");
//List all CDI Managed Beans and their EL-accessible name
Set<Bean<?>> beans = bm.getBeans(AbstractBean.class, new AnnotationLiteral<Any>() {});
List<Object> beanInstances = new ArrayList<Object>();
for (Bean bean : beans) {
CreationalContext cc = bm.createCreationalContext(bean);
//Instantiates bean if not already in-service (undesirable)
Object beanInstance = bm.getReference(bean, bean.getBeanClass(), cc);
beanInstances.add(beanInstance);
}
return beanInstances;
}
我们到了。。。通过javadoc,我发现了Context,它有两个版本的bean实例get()方法。其中一个,在创建上下文中传递时,具有与BeanManager.getReference()相同的行为。但是,另一个只接受 Bean 引用并返回上下文实例(如果可用)或 null。
利用这一点,这里是只返回实例化bean的原始方法的版本:
public List<Object> getAllCDIBeans() throws NamingException {
//Get the BeanManager via JNDI
InitialContext initialContext = new InitialContext();
BeanManager bm = (BeanManager) initialContext.lookup("java:comp/BeanManager");
//Get all CDI Managed Bean types
Set<Bean<?>> beans = bm.getBeans(Object.class, new AnnotationLiteral<Any>() {});
List<Object> beanInstances = new ArrayList<Object>();
for (Bean bean : beans) {
CreationalContext cc = bm.createCreationalContext(bean);
//Get a reference to the Context for the scope of the Bean
Context beanScopeContext = bm.getContext(bean.getScope());
//Get a reference to the instantiated bean, or null if none exists
Object beanInstance = beanScopeContext.get(bean);
if(beanInstance != null){
beanInstances.add(beanInstance);
}
}
return beanInstances;
}
YOG2 中,使用 node-ral 进行后端服务管理,我们引入后端服务管理层主要是解决以下几个问题 后端服务配置统一管理 封装异常处理、超时重试,提升系统稳定性 封装日志,便于线上问题追查 抽象请求协议、数据格式与数据编码,统一用户接口 在后端服务配置统一管理方面,我们的准则是配置优于硬编码,虽然使用类似 request 一类的库也可以很好的实现 HTTP 请求服务,但是它并没有明确的控制诸如服
更改启动服务 在运行级别对应的文件夹中,您可以看到许多文件名以 S## 和 K## 起始的启动脚本链接。例如: /etc/rcS.d/S35mountall.sh 挂载文件系统 /etc/rcS.d/S40networking 启用网络支持 /etc/rc2.d/S13gdm 启动登录管理器 /etc/rc2.d/S20makedev 创建设备文件 /etc/rc2.d/S23xin
systemd systemd 是系统和服务管理进程,管理着系统启动和服务器进程。该进程可以在系统启动和系统运行时对系统资源、服务器守护进程和其他进程进行管理。 守护进程是在执行各种任务的后台等待或运行的进程。一般情况下,守护进程在系统启动时自动启动并持续运行至关机或被手动停止。按照惯例,许多守护进程的名称以字母d结束;为了监听连接,守护进程使用 socket 套接字。这是与本地或远程客户端的主要
我想从方法中检索注释(自定义编写的注释)。通常我可以通过访问 但是如果bean由CDI容器管理(我使用的是OpenWebBeans),那么类在运行时会得到增强。然后我必须使用超类来请求注释。目前,我试图通过在类名中查找“$$”来检测是否管理该类。但对我来说,这似乎是一个非常肮脏的解决方案。 有什么好方法可以从CDI管理的bean中检索注释吗? 详细地说,我的代码是这样的:我创建了一个注释“Cool
Apache 是一款流行的 web 服务器,然而对于其配置者来说并不轻松。 Puppet 可以在一定程度上缓解配置者因管理 Apache 服务器所带来的痛苦。 操作步骤 如果 Apache 模块还不存在就创建它: # mkdir /etc/puppet/modules/apache # mkdir /etc/puppet/modules/apache/templates # mkdir /etc/
问题内容: 我们有以下设置。 STM(Stingrey Traffic Manager)进行负载平衡+会话粘性 Weblogic的“集群” 由第三方工具处理的身份验证 因此,我不必担心有关水平缩放/运行应用程序多个实例的会话。STM / Weblogic集群确保后续请求到达同一托管服务器。 我们目前拥有的是一个整体应用程序,并且我们正在尝试转向微服务。同样,我们也不会离开当前的基础架构(即STM
在会话范围内具有一个简单的CDI bean,其中注入了一个实体管理器: 现在,当通过EL#{myBean.test插入}调用函数时,有两件事似乎很奇怪: 1)将@Transactional注释移动到方法创建(int)我得到: javax.persistence。TransactionRequiredException:JBAS011469:执行此操作需要事务(使用事务或扩展持久性上下文) 2) 改
我有一个ear项目,分为3个模块: 网络模块, 我有一个类似这样的类: 此类属于实体模块。 该类的实例是在我的@Entity对象的@MempdSuperclass中的@PreUpdate钩子中创建的。这个类(和所说的钩子),看起来像这样: 扩展此类的实体类与UserServiceProviderEnterpriseImpl类位于同一模块中。 我的问题出现在这一行: ...它有时会抛出NoSuchE