在WildFly 8/10上,我有一个简单的SLSB触发CDI事件:
@Stateless
@Remote(CDITestRemote.class)
@Local(CDITestLocal.class)
public class CDITestBean implements CDITestRemote, CDITestLocal {
@Inject
private Event<IVolumeEvent> events;
@Override
public String insert(final String value) {
final IVolumeEvent event = new VolumeEvent();
events.fire(event);
return String.format("value: %s", value);
}
}
以及用于EJB触发的事件类型的@ApplicationScoped
“CDI事件观察者”:
@ApplicationScoped
public class VolumeEventObserver {
private Logger logger = LoggerFactory.getLogger(VolumeEventObserver.class);
@Inject
private TransactionHandler txHandler;
public void inProgress(
@Observes(during = TransactionPhase.IN_PROGRESS) final IVolumeEvent event) {
logger.info("@Observes progress() {}", String.valueOf(txHandler));
}
public void afterSuccess(
@Observes(during = TransactionPhase.AFTER_SUCCESS) final IVolumeEvent event) {
logger.info("@Observes success() {}", String.valueOf(txHandler));
}
public void afterFailure(
@Observes(during = TransactionPhase.AFTER_FAILURE) final IVolumeEvent event) {
logger.info("@Observes failure() {}", String.valueOf(txHandler));
}
}
TransactionHandler
是一个@RequestScoped
CDI bean:
@RequestScoped
public class TransactionHandler {
// some methods here...
}
当我在注入到REST资源的EJB实例上调用插入()
时,在对REST的请求期间,我在任何观察者方法中看到了相同的TransactionHandler
实例endpoint如预期:
11:23:58,476 INFO [VolumeEventObserver] (default task-11) @Observes progress() TransactionHandler@7687eead
11:23:58,479 INFO [VolumeEventObserver] (default task-11) @Observes success() TransactionHandler@7687eead
但是,当我进行远程EJB调用时,我会在同一请求期间看到不同的实例:
11:42:01,461 INFO [VolumeEventObserver] (EJB default - 2) @Observes progress() TransactionHandler@2e65f10d
11:42:01,463 INFO [VolumeEventObserver] (EJB default - 2) @Observes success() TransactionHandler@2a5a7019
因此,TransactionHandler
似乎不属于请求范围。
JSR-299表示请求范围处于活动状态:
在任何EJB的任何远程方法调用期间,在任何EJB的任何异步方法调用期间[…]
由于没有ContextNotActiveExc0019
,我认为请求范围是活动的-那么为什么我得到不同的实例呢?
它是相同的线程(从日志条目中可以看出),并且事务也是相同的。
黑暗中的一枪:你试过用这个吗?
@ApplicationScoped
public class VolumeEventObserver {
private Logger logger = LoggerFactory.getLogger(VolumeEventObserver.class);
@Inject
private Instance<TransactionHandler> txHandler;
public void inProgress(
@Observes(during = TransactionPhase.IN_PROGRESS) final IVolumeEvent event) {
logger.info("@Observes progress() {}", String.valueOf(txHandler.get()));
}
}
也许“实例”会起作用。
您看到的行为符合规范。规范说明在远程EJB调用期间请求上下文处于活动状态。它并没有说对同一bean的重复调用在单个请求中运行。
问题内容: 我的问题是给定的代码: 我访问: 我应该期望[‘a’,’bbb’]的输出,除了Flask似乎只接受第一个参数而忽略其余参数。 这是Flask的限制吗?还是设计使然? 问题答案: 你可以使用与Django类似的,但由于某些原因,Flask文档中未提及: 结果是: 使用如果参数是查询字符串(如题),如果值来自具有相同名称的多个表单输入。 结合了两者,但通常应避免使用更具体的集合。
CORS策略阻止从起源'https://www.happydesertsafari.com'访问'https://happydesertsafari.com/happy-new/getlocations.php?getall=true&_=1578818763165'的XMLHttpRequest:请求的资源上没有'access-control-allow-origin'标头。
我正在为同一位置获取不同格式的Azure资源位置 像这样,以不同的格式获取所有位置。由于此唯一性,正在数据库中创建行。现在我通过保存一个包含所有可能位置格式的JSON文件来处理这个问题,但这不是一个好的处理方法,因为如果新添加了位置,则需要更新位置。使用Java和Mysql如何有效地处理这个问题?
我想知道南非目前的日期和时间。 如何在甲骨文中检查不同时区的当前时间和日期? 我将在数据表中添加时区值,从中可以得到当前日期和时间? 我有一个国家表,我将根据国家保存时区。现在在程序中,我必须检查其他表格中的一个日期是否为当前日期。So查询:从DUAL中选择时区“非洲/约翰内斯堡”的SYSTIMESTAMP;不会解决我的问题。
我们有一个具有多个副本的服务,它可以在没有事务和阻塞方法的情况下使用存储。因此我们需要通过某种“分片”键来同步多个实例之间的并发请求。现在,我们在Kubernetes环境中作为副本集托管该服务。 难道你不知道任何简单的开箱即用的方法,如何做到这一点,而不是从头开始实现它吗? 下面是我们如何做到这一点的几个想法: > 将服务部署为StatefulSet,并实现一些代理API,通过从HTTP请求分片密
问题内容: 我有一个包含以下列的数据库表: 在此表中,唯一的唯一值位于id中,即主键。 我想基于datetime值检索该表中的最后一组不同的记录。例如,下面是我的桌子 我想检索ID为4、7、8和9的记录,即具有不同代码(基于datetime值)的最后一组记录。我强调的只是我要实现的目标的一个示例,因为此表最终将包含数百万条记录和数百个单独的代码值。 我可以使用什么SQL语句来实现这一目标?我似乎无