我正在运行一个 Web 应用程序,它具有应用程序的前端 ( JSF
, CDI
) 和后端 ( EJB
, Hibernate
) 部分,每个部分都位于单独的WildFly 9.0.1.Final AS
. 前端通过Remote EJB Client
JNDI 名称与后端通信。
一些前端代码:
@ViewScoped
@Named("ddc")
public class DynamicDatatableController implements Serializable {
@Produces
@Resource(lookup = "ejb:bpm-back-ear/bpm-back-dynamicTable/DynamicTableBean!bc.bpm.dynamicTable.back.beans.remote.DynamicTableBeanRemote")
private DynamicTableBeanRemote dtb;
private Integer tableId;
private DynamicTable table;
@PostConstruct
public void init{
table = dtb.getTable(tableId);
}
}
以及一些后端接口代码:
@Remote
public interface DynamicTableBeanRemote {
List<DynamicTable> getTable(Integer tableId);
}
还有一些后端 bean 代码:
@Stateless
@LocalBean
public class DynamicTableBean implements DynamicTableBeanRemote {
final static Logger LOGGER = LoggerFactory.getLogger(DynamicTableBean.class);
@PersistenceContext(unitName = "bpmBeans")
private EntityManager em;
@Override
public List<DynamicTable> getTableList(Integer tableId) {
return em.find(DynamicTable.class, tableId);
}
}
问题是,无论我做了多少请求,使用 JMeter 或刷新几个浏览器选项卡,DynamicTableBean
在任何给定时间只有一个实例是活动的。每个请求都由队列中的那个 bean 实例执行。如您所知,该应用程序绝对不可用,因为它绝对是单线程 EJB 明智的。可能是什么问题呢?