我有一个应用程序,它有一个@Remote@Singleton
EJB,它注入了由CDI生成的@requestscope
实体管理器。同一服务器(wildfly 9)/JVM上的另一个应用程序将使用此EJB从实体管理器获取结果。
EJB的第一次调用将返回预期结果。当调用返回时,它生成实体管理器,获取数据并再次处理实体管理器。由于关闭了实体管理器,该EJB的每个后续调用都将抛出一个错误。未对新实体经理进行生产/处置。
这是预期的巴哈维奥吗?我的代码中有错误吗?
IFrameworkResourceManager framework = _applicationContext.getFrameworkResourceManager();
final User resolvedUser = framework.resolveUser(username, domain);
// ...
final Rights resolvedRights = framework.resolveRights(resolvedUser.getGuid(), applicationId);
// ...
这段代码在CDI生产者中执行,一旦为用户创建了新的http会话,CDI生产者就会再次执行。如果在调用resolveRights
之前再次调用getFramworkResourceManager
,则不会发生任何更改。
public IFrameworkResourceManager getFrameworkResourceManager() {
return IFrameworkResourceManager frm = (IFrameworkResourceManager) ctx
.lookup("java:global/WebFramework/WebFrameworkImpl!my.package.IWebFramework");
}
不管我是使用直接JNDI查找还是@EJB
注入。返回的实例被报告(toString()
)为远程EJB无状态ejblocator的代理,对于“/WebFramework/WebFrameworkImpl”,视图是我的接口。包裹IWebFramework,关联性为无
@LocalBean
@Singleton
public class WebFrameworkImpl implements IWebFramework, Serializable {
@Inject
private EntityManager _entityManager;
@Override
public User resolveUser(String username, String domain) {
System.out.println(_entityManager + " || " + _entityManager.isOpen());
// execute query using QueryDSL and the injected entityManager
}
@Override
public Rights resolveRights(String guidUser, int applicationId) {
System.out.println(_entityManager + " || " + _entityManager.isOpen());
// execute query using QueryDSL and the injected entityManager
}
}
@Remote
public interface IWebFramework extends IFrameworkResourceManager {
// some methods...
}
public interface IFrameworkResourceManager {
public User resolveUser(String username, String domain);
public Rights resolveRights(String guidUser, int applicationId);
}
Sysout ofresolveUser
:org。冬眠jpa。内部的EntityManagerImpl@379e882b| |正确
Sysout ofresolveRights
:org。冬眠jpa。内部的EntityManagerImpl@379e882b| |假
编辑20.11.2015 13:43:持久化单元的类型为RESOURCE\u LOCAL
。此外,所有@ResourceScoped
bean都会受到影响<代码>@PostConstruct和@PreDestroy
仅在第一次EJB调用时调用。每个后续调用都使用资源范围bean的前一个实例,这是不正确的。
编辑20.11.2015 13:55:如果从提供EJB的同一应用程序中调用EJB,则一切都会正常工作。此行为仅在从其他应用程序调用时出现。
编辑20.11.2015 15:24:JBoss AS 7.1.3。最终,Wildfly 9.0.0。最终和Wildfly 10.0.0。CR4全部生效。但根据CDI规范(1.0至1.2)第6.7.4章,这应该是可行的。我已经填写了错误报告(WFLY-5716)。
此有线行为的错误修复已合并到焊接存储库中:
使用RESOURCE\u LOCAL
时,您应该从EntityManager数据库创建EntityManager并自行处理,如:
private EntityManagerFactory factory = Persistence.createEntityManagerFactory("unit-name");
public void someMethod(){
EntityManager em = emf.createEntityManager();
EntityTransaction tx = null;
try {
tx = em.getTransaction();
tx.begin();
// do some work
tx.commit();
}
catch (RuntimeException e) {
if ( tx != null && tx.isActive() )
tx.rollback();
throw e; // or display error message
}
finally {
em.close();
}
}
为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。 在本节中,我们将介绍一部分远程管理的技能。 查看
因此,客户机请求CPU和内存(我相信我需要两个队列),服务器用这些值进行响应。 是否可以简单地创建和,本例使用Python中的Pika库。
使用远程调试 为了与qemu配合进行源代码级别的调试,需要先让qemu进入等待gdb调试器的接入并且还不能让qemu中的CPU执行,因此启动qemu的时候,我们需要使用参数-S –s这两个参数来做到这一点。在使用了前面提到的参数启动qemu之后,qemu中的CPU并不会马上开始执行,这时我们启动gdb,然后在gdb命令行界面下,使用下面的命令连接到qemu: (gdb) target remot
本文向大家介绍使用portainer连接远程docker的教程,包括了使用portainer连接远程docker的教程的使用技巧和注意事项,需要的朋友参考一下 Portainer是一个轻量级的docker环境管理UI,可以用来管理docker宿主机和docker swarm集群。他的轻量级,轻量到只要个不到100M的docker镜像容器就可以完整的提供服务 Portainer的Hub地址是:htt
我使用RxJava异步处理servlet请求。在每个请求期间,使用flatMap操作符对远程服务API进行大量异步调用。 由于资源限制,我需要限制针对该API的并发请求总数。对于使用其并发参数在单个平面图中调用API的单个Rx流来说,这是微不足道的。但是我的应用程序中有多个独立的流(基本上每个ServletRequest一个),并且每个流都有多个对API的平面图调用。 因此,我认为我必须将所有远程
我已经用Oracle Enterprise Linux安装了VirtualBox image。它包含已安装的Oracle Database 12.1.0。 在虚拟机网络设置中,我选择“Bridget Adapter”。接下来Linux我配置了连接设置:静态IP地址:192.168.0.110 现在我可以使用ping 192.168.0.110 ping到虚拟机。 虚拟机上的文件: tnsnames