我正在阅读无状态会话bean,无法理解它的用法.
摘自下面的太阳教程
"..因为无状态会话bean可以支持多个客户端,它们可以为需要大量客户端的应用程序提供更好的可伸缩性"
在哪里使用无状态会话bean?什么样的应用程序使用它?
在"无状态会话bean"出现之前使用了什么机制来支持类似上下文中的多个客户端?
有人可以提供一些细节吗?
谢谢!
我从J2SE应用程序调用远程无状态会话bean,并希望缓存对会话bean的引用,以降低查找的成本.这个可以吗?
在EJB2中,ServiceLocator模式通常用于将查找缓存到远程资源,但EJB3没有单独的EJB Home(通常是缓存的)和Remote对象.
谷歌搜索,这是一个常见的答案是使用EJB3注入,但由于我正在从J2SE客户端调用远程EJB服务器,我不能使用注入.
管理属性集以应用于EJB的最佳方法是什么,并且可以轻松地在机器/环境(例如DEV,TEST,PROD)之间进行更改?例如,有没有办法在App Server上配置EJB属性(这可以保证您可以根据计算机/环境改变它们).
特别:
1)我有一个Singleton EJB,需要特定的某些属性集(环境).是否有注释用于告诉EJB容器在哪里查找这些属性并自动将它们应用于bean?
2)管理不同属性集的最佳方法是什么,即dev,test,prod,以便J2EE应用程序可以在服务器之间移植,并且您可以无缝地管理特定于每个服务器的属性?
如果有任何良好的文档链接 - 让我知道.我用Google搜索并没有直接看到上述各点.
configuration stateless-session-bean configuration-management java-ee
我希望能够在 Java 中执行异步任务,并能够保持与用户会话相关联的完成(如果可能的话)监视器。这是可能的,如果是的话,有什么方法可以做到?
目前,该任务作为无状态会话 bean 方法同步实现,该方法从 jax-rs 端点调用。
我查看了https://docs.oracle.com/javaee/7/tutorial/ejb-async001.htm但AsyncResult不可序列化,所以我想我无法将其添加到会话中。
asynchronous stateless-session-bean java-8 wildfly wildfly-10
无状态会话bean对具有相同方法的常规类提供什么?看起来有状态会话bean可以开箱即用,容器将确保状态看起来与任何地方的客户端相同.使用无状态会话bean提供的是普通类无法获得的内容吗?
如果您有分布式环境,那么您的EJB层是否可以进行故障转移?在我看来,你可以获得无状态会话bean的本地或远程实例,如果我只为我的应用程序使用一个服务器,因此从不使用远程接口是否有任何好处?
关于EJB的问题:
假设我有一个具有无限循环的会话bean.它在EJB事务下运行.现在当EJB的事务超时时,会导致无限循环线程中断或容器将停止运行无限循环的线程.
将Web服务公开为无状态会话bean是否存在与线程安全相关的好处?
(如果我错了,请纠正我)但我认为Web服务不是线程安全的,并且像Servlet一样,服务器只创建一个Web服务类实例(每个请求不是一个实例).
我不知道它们是否是从像无状态bean这样的bean池中分配的 - 是由app服务器提供的.我试图找到是否将@Stateless annoation与已经使用@WebService注释注释的Web服务一起使用 - 这将迫使应用服务器开始为每个传入请求从池中分配它们.这样我就知道我会为每个传入的请求创建一个单独的实例吗?
annotations web-services jax-ws stateless-session-bean java-ee
现在,使用EJB 3.1,我们可以找到javax.ejb.Singleton annocation,它可以确保这个bean将成为单例.
有没有一种方法可以确保单独使用EJB 3.0中的无状态bean,并在我的代码中进行一些修改(使用关键字static,或其他方式来做到这一点......)
只是想知道是否有一个像这样的静态推土机映射器会导致并发错误:
public static Mapper mapper = new DozerBeanMapper();
public static MyDTO toDTO(MyEntity e) {
MyDTO dto = mapper.map(e, MyDTO.class);
return dto;
}
Run Code Online (Sandbox Code Playgroud)
还是应该始终使用以下代码:
public static MyDTO toDTO(MyEntity e) {
Mapper mapper = new DozerBeanMapper();
MyDTO dto = mapper.map(e, MyDTO.class);
return dto;
}
Run Code Online (Sandbox Code Playgroud)
该方法在JBoss Server的@Stateless会话Bean中使用,可以同时访问。事实是我真的不知道Dozer是否利用库中的静态变量或实例变量来决定是否可以/应该在每个调用中使用静态Mapper或创建新实例。
我在glassfish中部署了一个war文件.我们有一些无状态会话bean,我们有1个同步方法.
但是,我注意到多个线程可以同时进入同步方法.glassfish是否有可能实例化此bean类的2个实例?有没有办法解决?
这段代码使我感到恼火,有时它起作用,而另一些时候却不起作用!
NamedQuery :(名称=“ User.findByLogin”,查询=“从用户u在哪里选择u.login =:login”)
public User findByLogin(String login) {
Query query = em.createNamedQuery("User.findByLogin");
query.setParameter("login", login);
try {
return (User) query.getSingleResult();
} catch (javax.persistence.NoResultException ex) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
错误使我发疯!
Avertissement:EJB5184:在EJB UserFacade上调用期间发生系统异常,方法:public dz.admin.entity.User dz.admin.service.UserFacade.findByLogin(java.lang.String)Avertissement:javax.ejb.EJBException .. .. 由以下原因引起:java.lang.ClassCastException:dz.elit.admin.entity.User无法转换为dz.elit.admin.service.UserFacade.findByLogin(UserFacade.java: 45)
ejb ×4
java-ee ×4
ejb-3.0 ×3
java ×2
annotations ×1
asynchronous ×1
caching ×1
dozer ×1
ejb-3.1 ×1
glassfish ×1
java-8 ×1
jax-ws ×1
jboss ×1
jndi ×1
jpql ×1
mapping ×1
singleton ×1
transactions ×1
web-services ×1
wildfly ×1
wildfly-10 ×1