我在wildfly8(jboss 8)服务器上使用Primefaces 4.0时遇到问题。
我在本地有相同的服务器,与在生产中部署应用程序的远程服务器具有相同的设置。
当我将应用程序部署到远程服务器时,p:dataTable为空。只有使用素数面LazyDataModel的表是空的。
日志中没有错误。
我还尝试将我部署到远程服务器的maven构建ear部署在本地服务器上,并且在本地正常工作。显然,远程服务器上有一些差异,但我看不出可能是什么,standalone.xml在本地和远程上是相同的
有任何迹象表明是什么导致了这种奇怪的行为?
我已经打印了一些结果,看看代码中发生了什么,在count方法中,我得到了4520的返回,所以SQL运行正常,问题是在xhtml中,如果我把#{billsBean.billsData.rowCount}
放在数据应该在的表之前,我得到0。在本地机器上,对于相同的视图和相同的代码,我得到4520
因此,看起来数据在表的渲染过程中丢失了。
@Named
@Stateless
public class LazyBillsDataModel extends LazyDataModel<Bill> implements Serializable {
private static final long serialVersionUID = -6488655263171321725L;
@Inject
@DomainsDB
private EntityManager em;
@EJB
BillHandler billHandler;
@Inject private Logger log;
public LazyBillsDataModel() {
super();
}
@Override
public List<Bill> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
System.out.println(">>>>>>>> enetering load data for BILLS");
log.debug(">>>>>>>> enetering load data for BILLS");
if (sortField == null || sortField.equals("")) {
sortField = "bill.dateCreate";
}
List<Bill> data = selectData(first, pageSize, sortField, DataUtilsWeb.transformSortOrder(sortOrder), filters);
// row count
this.setRowCount(count(filters));
return data;
}
private int count(Map<String, String> filters) {
String hql = "select count(bill.idBill) from Bill bill ";
if (filters != null && filters.size() > 0) {
hql += " where " + prepereWhereFilters(filters);
}
Query query = em.createQuery(hql);
fillQueryWitkFilterData(query, filters);
System.out.println(">>>>>>>> count " + ((Long) query.getSingleResult()).intValue());
return ((Long) query.getSingleResult()).intValue();
}
@SuppressWarnings("unchecked")
private List<Bill> selectData(int first, int pageSize, String sortField, String sortOrder, Map<String, String> filters) {
List<Bill> data = new ArrayList<Bill>();
String hql = "select bill from Bill bill left join fetch bill.organization left join fetch bill.billType left join fetch bill.billStatus ";
if (filters != null && filters.size() > 0) {
hql += " where " + prepereWhereFilters(filters);
}
// sorting
if (sortField != null && !sortField.equals("")) {
hql += " order by " + sortField;
if (sortOrder != null && !sortOrder.equals("")) {
hql += " " + sortOrder;
}
}
Query query = em.createQuery(hql);
fillQueryWitkFilterData(query, filters);
// define query boundaries
query.setFirstResult(first);
query.setMaxResults(pageSize);
data = (List<Bill>) query.getResultList();
System.out.println(">>>>>>>> BILLS laoded num : " + data.size());
log.debug(">>>>>>>> BILLS laoded num : " + data.size());
return data;
}
......
}
我已经解决了问题
在wildfly 8.0 FINAL版本中,standalone.xml似乎发生了变化,在本地,我从2014年2月20日开始使用8.0 FINAL,在服务器上,我从14年4月18日开始使用 8.0 FINAL
在比较了两台服务器的standalone.xml后,他们发现不同
所以我开始合并它们,我发现ejb3子系统中缺少这一部分
<subsystem xmlns="urn:jboss:domain:ejb3:2.0>
<stateless>
<bean-instance-pool-ref pool-name="slsb-strict-max-pool"/>
</stateless>
不知道这个标志的作用,但在插入这个文本后,primffaces表显示出了完整的数据。