我運行具有前端(JSF
,CDI
)和後端(EJB
,Hibernate
)應用程序的各部分的網絡應用程序中,每個在單獨的WildFly 9.0.1.Final AS
注入。前端通過Remote EJB Client
通過JNDI名稱與後端進行通信。無國籍遠程豆經由@Resource僅提供單個實例
一些前端代碼:
@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或刷新一些瀏覽器選項卡,只有一個的實例在任何時候都活着。每個請求都由隊列中的一個bean實例執行。如你所知,應用程序絕對不可用,因爲它絕對是單線程的EJB。可能是什麼問題呢?
試圖將jboss-ejb3.xml添加到無狀態EJB的ejb-jar中(src/main/resources/META-INF/jboss-ejb3。 xml)和WildFly配置,但結果是現在只有一個實例被創建,沒有被銷燬,但是被每個請求重用。執行仍然在隊列中,沒有多個實例,並行執行等等。 – Candyman
打開jboss日誌記錄以調試/跟蹤並檢查日誌。您應該看到顯示池正在使用的日誌。 – 6ton
使用了池,但無論發送多少個請求,只創建一個EJB。用CLI檢查這個特定的bean。 – Candyman