【发布时间】:2014-08-05 04:03:33
【问题描述】:
我们的应用程序使用由 MyFaces 1.2.9 和 Trinidad 1.2.14 实现的 JSF 1.2,在 Weblogic Portal 10.3.2、JDK 1.6_22 上运行。当系统负载过重时(使用 HP LoadRunner 模拟负载并模拟 800 个并发用户),我们看到呈现给浏览器的 html 页面存在问题。
我们看到生成的 id 用于标记 id,并且在 javascript 中丢失了父容器名称,而是带有 null 后跟字段 id。
我们的 JSP 文件布局如下:
homemenu.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=windows-1252"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr" %>
<%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh" %>
<f:view>
<f:subview id="renderBody">
<jsp:include page="../tabMenu.jsp" />
</f:subview>
...
tabMenu.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=windows-1252"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr" %>
<%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh" %>
<f:view>
<f:subview id="tabmenu">
<jsp:include page="portalTemplate.jsp" />
</f:subview>
...
生成的 HTML 将包含如下代码:
<input type="hidden" name="org.apache.myfaces.trinidad.faces.FORM" value="renderBody:tabmenu:j_id_id2pc3">
value 属性包含正确的容器 ID,在本例中为 renderBody:tabmenu
在系统负载一段时间后(大约 30 - 45 分钟,大约 800 个并发用户/会话)生成的 HTML 将丢失容器 ID。
<input type="hidden" name="org.apache.myfaces.trinidad.faces.FORM" value="null:j_id_id2pc3">
该值以前将 renderBody:tabmenu 作为其父 ID,现在改为 null。
现在这不会导致应用程序功能出现问题,但会导致我们的 LoanRunner 测试出现问题。 LoadRunner 正在寻找完整的 ID,当系统开始将它们生成为 null 时,这会导致 LoanRunner 测试失败并出错。
什么可能导致生成的 ID 丢失其父 ID?为什么我们只在系统负载时看到这个?一旦系统开始生成null,它会继续生成null,即使在没有负载的情况下,直到应用程序重新启动。
我们已尝试设置系统属性 org.apache.myfaces.trinidad.CLIENT_ID_CACHING=off 希望这是一个缓存问题,但它没有任何影响。
【问题讨论】:
标签: java jsp jsf-1.2 myfaces trinidad