A question about Lifecycle of a JavaServer Faces.

hello all
i read "The JavaServer� Faces Technology Tutorial",and mazed about Lifecycle of a JavaServer Faces.
It explains each of these lifecycle phases using the guessNumber example.
and if i submit the greeting.jsp ,who can give me particular about the jsf done in order....and the first step :Reconstitute Component Tree reconstitute greeting.jsp 's component tree or response.jsp?..

thanks!
i have another question:when the action event or A value-changed event occured,any Standard Request Processing Lifecycle begin?and the step of Reconstitute Component Tree occured?and when occur action event and when occur application event if a button or hyperlink is clicked?and what differentness between the processing to action event and application event by jsf?

Similar Messages

  • The status and statement about Oracle embrace JavaServer Faces

    Hi all:
    Have any expert could talking about the status and statement about Oracle embrace JavaServer Faces standard,
    whether Jdeveloper 10g have full support this standard now, and UIX direction ?

    development based on oracle technology and tool, If we wish adopt JavaServerFace technology, we should direct using Sun Java standard library or oracle UIX technology,
    give us some suggestion, how to start JavaServerFace application development ? is start from UIX ? and what is learning step ?

  • JavaServer Faces Unit Test Framework

    Based on my knowledge, there isn't any handy JSF Unit test tools. To facilitate UI developers and QAs to do test, I have created a prototype project to evaluate a solution.
    For a Simple JSF enabled JSP file:
    <?xml version="1.0" encoding="UTF-8"?>
    <jsp:root version="1.2" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page">
       <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" />
         <f:view>
              <h:form>
                <h:outputText value="Please input:"/>
                   <h:inputText id="input1"/>
                <br/>
                <h:outputText value="Please input a integer:"/>
                   <h:inputText style="width:50px;" converter="javax.faces.Integer"/>
                <h:commandButton value="Submit"/>     
           </h:form>
       </f:view>
    </jsp:root>writing a HttpUnit to this page is obviously difficult:
    1) Hard to pin-point the html element rendered by input1, because up-level NamingContainer h:form is missing id.
    2) More difficult to find the second InputText, because missing two ids.
    3) How to assert if the converter really works or not, we can't assert any object in PageBean by HttpUnit.
    4) Much more difficult to find those html element if there are several level NamingContainer, such as the component nested within "for-loop".
    I perfer not to write HttpUnit and seperate JUnit to PageBean, so if the follow JSP can be used in both test and production environment, work will be much easier:
    * test1.jsp
    <?xml version="1.0" encoding="UTF-8"?>
    <jsp:root version="1.2" xmlns:test="http://www.yourcompany.com/jsf/test"  xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:jsp="http://java.sun.com/JSP/Page">
       <jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" />
         <f:view>
            <test:parameter name="abc" value="def"/><!-- setting request parameter -->
              <h:form>
                <h:outputText value="Please input:"/>
                   <h:inputText>
                   <test:set value="hello"
    /> <!-- emulate inputing "hello" to the text box -->
                   <test:assert phase="afterUpdateModelValues" description="InputText1" var="input1" value="#{input1=='hello'}"/><!-- you can try other JSF phases as well, here var "input1" is parent jsf component -->
                      <test:assert description="InputText1" var="input1" value="#{input1=='hello'}"/>
    <!-- use default phase "afterRenderResponse", here var "input1" is HtmlElement fetched from rendered page by HttpUnit -->
                </h:inputText>
                <br/>
                <h:inputText style="width:50px;" converter="javax.faces.Integer">
                   <test:set actions="all" value="123"/>
                   <test:assert phase="afterUpdateModelValues" description="Input2 Class Name" var="input2CN" value="#{input2CN.class.name == 'java.lang.Integer'}"/>
                   <test:assert description="InputText2 value in afterRenderResponse phase" var="input2" value="#{input2=='123'}"/>
                   <test:assert description="InputText2 Style" var="input2Style" valueAttribute="style" value="#{input2Style=='width:20px;height:25px;'}"/>
                </h:inputText>
                <br/>
                <h:commandButton value="Submit">
                   <test:action description="Test Sumbit"/><!-- support multi actions -->
                </h:commandButton>     
           </h:form>
       </f:view>
    </jsp:root> For production jsp you can use normal url, http://server:port/yourapp/faces/test1.jsp, those test:xxx components won't do anything.
    For testing a single page, http://server:port/yourapp/faces/TestAction?view=/test1.jsp
    For testing more pages, http://server:port/yourapp/faces/TestAction?suite=/suite1.xml and write file:
    * suite1.xml
    <?xml version='1.0' encoding='UTF-8'?>
    <TestSuite>
       <page>/test1.jsp</page>
       <page>/test2.jsp</page>
    </TestSuite> After running this test suite in sun jsf1.0 runtime, the result comes:
    <?xml version="1.0" encoding="UTF-8" ?>
    <Test suite="/suite1.xml">
      <Page id="/test1.jsp">
        <Action id="_id13" time="0 hour(s) 0 minute(s) 0 second(s) 31 millisecond(s)" description="Test Sumbit">
          <Assert id="_id5" description="InputText1">
             <afterUpdateModelValues pass="true" />
          </Assert>
          <Assert id="_id9" description="Input2 Class Name">
             <afterUpdateModelValues pass="true" />
          </Assert>
          <Assert id="_id6" description="InputText1">
             <afterRenderResponse pass="true" />
          </Assert>
          <Assert id="_id10" description="InputText2 value in afterRenderResponse phase">
             <afterRenderResponse pass="true" />
          </Assert>
          <Assert id="_id11" description="InputText2 Style">
             <afterRenderResponse pass="false" />
          </Assert>
        </Action>
      </Page>
      <Page id="/test2.jsp">
      </Page>
    </Test> So far, if you think this idea is good for you, you can get the src code at the end of this post.
    Furthermore, you can make improvement to this as well, such as implement concurrent and repeatable test.
    Anyway, don't expect this two days prototype is quite robust, and coding is not my day to day work either.
    If you have any questions or idea, please drop me a line: [email protected], [email protected]
    *  jsftest.tld
    <?xml version="1.0"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
         <tlib-version>1.0</tlib-version>
         <jsp-version>1.2</jsp-version>
         <short-name>test</short-name>
         <uri>http://www.yourcompany.com/jsf/test</uri>
         <display-name>JSF Test Tag Library</display-name>
         <description></description>
         <tag>
              <name>action</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.ActionTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Action</display-name>
              <description>JSF test submit action</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>description</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>     
         <tag>
              <name>assert</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.AssertTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Assert</display-name>
              <description>JSF test assertion</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>actions</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>default value is "all", means all actions, use "," as delimeter</description>
              </attribute>
              <attribute>
                   <name>phase</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>effective value can be anyone of: afterRestoreView,
                                   beforeApplyRequestValues, afterApplyRequestValues,
                                   beforeProcessValidations, afterProcessValidations,
                                   beforeUpdateModelValues,  afterUpdateModelValues,
                                   beforeInvokeApplication,  afterInvokeApplication,
                                   beforeRenderResponse,     afterRenderResponse
                                 The default value is afterRenderResponse, this assertion will be applied to HtmlElement rather than JSF Component.
                            </description>
              </attribute>
              <attribute>
                   <name>value</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>must be boolean, means pass test or not</description>
              </attribute>
              <attribute>
                   <name>var</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>variable name, used to define a request attribute which can be used in valueBinding language</description>
              </attribute>
              <attribute>
                   <name>valueAttribute</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>The default is "value".
                                         var will be bound to this attribute.
                                         var will be bound to the rendered HtmlElement if the phase="afterRenderResponse",
                                         otherwise var will be bound to parent component.
                            </description>
              </attribute>
              <attribute>
                   <name>postback</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>The default is "true".
                                         Currently only support true;
                            </description>
              </attribute>
              <attribute>
                   <name>description</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>
         <tag>
              <name>parameter</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.ParameterTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Set</display-name>
              <description>JSF test request parameter setter</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>actions</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>default value is "all", means all actions, use "," as delimeter</description>
              </attribute>
              <attribute>
                   <name>name</name>
                   <required>true</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>value</name>
                   <required>true</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>
         <tag>
              <name>set</name>
              <tag-class>com.yourcompany.jsf.ui.test.taglib.SetTag</tag-class>
              <body-content>empty</body-content>
              <display-name>Set</display-name>
              <description>JSF test component value setter</description>
              <attribute>
                   <name>binding</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>id</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
              <attribute>
                   <name>actions</name>
                   <required>false</required>
                   <rtexprvalue>true</rtexprvalue>
                            <description>default value is "all", means all actions, use "," as delimeter</description>
              </attribute>
              <attribute>
                   <name>value</name>
                   <required>true</required>
                   <rtexprvalue>true</rtexprvalue>
              </attribute>
         </tag>
    </taglib>
    *  faces-config.xml
    <?xml version="1.0"?>
    <!DOCTYPE faces-config PUBLIC
      "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
      "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
    <faces-config>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Action</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Action</component-class>
      </component>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Assert</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Assert</component-class>
      </component>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Parameter</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Parameter</component-class>
      </component>
      <component>
        <component-type>com.yourcompany.jsf.ui.test.Set</component-type>
        <component-class>com.yourcompany.jsf.ui.test.component.Set</component-class>
      </component>
      <lifecycle>
          <phase-listener>com.yourcompany.jsf.ui.test.listener.TestPhaseListener</phase-listener>
          <phase-listener>com.yourcompany.jsf.ui.test.listener.TestAssertPhaseListener</phase-listener>
      </lifecycle>
    </faces-config>
    *  TestPhaseListener.java
    package com.yourcompany.jsf.ui.test.listener;
    import java.io.InputStream;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    import javax.faces.application.ViewHandler;
    import javax.faces.component.UIComponent;
    import javax.faces.component.UIViewRoot;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;
    import javax.faces.event.PhaseEvent;
    import javax.faces.event.PhaseId;
    import javax.faces.event.PhaseListener;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Text;
    import com.meterware.httpunit.HTMLElement;
    import com.meterware.httpunit.PostMethodWebRequest;
    import com.meterware.httpunit.WebConversation;
    import com.meterware.httpunit.WebRequest;
    import com.meterware.httpunit.WebResponse;
    import com.sun.faces.renderkit.html_basic.HtmlResponseWriter;
    import com.yourcompany.jsf.ui.component.UIIterate;
    import com.yourcompany.jsf.ui.test.component.Action;
    import com.yourcompany.jsf.ui.test.component.Assert;
    import com.yourcompany.jsf.ui.test.component.Parameter;
    import com.yourcompany.jsf.ui.test.component.Set;
    import com.yourcompany.jsf.ui.test.report.Constants;
    import com.yourcompany.jsf.ui.test.report.TestAction;
    import com.yourcompany.jsf.ui.test.report.TestAssert;
    import com.yourcompany.jsf.ui.test.report.TestPage;
    import com.yourcompany.jsf.ui.test.report.TestReport;
    import com.yourcompany.jsf.ui.util.ComponentUtil;
    public class TestPhaseListener implements PhaseListener {
         public TestPhaseListener() {
              super();
              // TODO Auto-generated constructor stub
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#afterPhase(javax.faces.event.PhaseEvent)
         public void afterPhase(PhaseEvent event) {
              if(-1 != event.getFacesContext().getViewRoot().getViewId().indexOf("TestAction")){
                   FacesContext context =      event.getFacesContext();
                   ViewHandler vh = context.getApplication().getViewHandler();
                   HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
                   TestReport report = new TestReport();
                   request.getSession().setAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID, report);
                   String suitefile = request.getParameter("suite");
                   List pages = new ArrayList(5);
                   if(suitefile==null){
                        pages.add(request.getParameter("view"));
                   }else{
                        report.setSuiteId(suitefile);
                        try{
                             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                          factory.setValidating(false);
                          factory.setNamespaceAware(false);
                          DocumentBuilder builder = factory.newDocumentBuilder();
                          InputStream ins = context.getExternalContext().getResourceAsStream(suitefile);
                          Document doc = builder.parse(ins);
                          NodeList pageNodes = doc.getElementsByTagName("page");
                          for(int i=0; i<pageNodes.getLength(); i++){
                               pages.add(((Text)pageNodes.item(i).getFirstChild()).getData());
                        }catch(Exception e){
                             report.setException(e);
                   for(Iterator p=pages.iterator(); p.hasNext(); ){
                        String viewId = (String)p.next();
                        UIViewRoot view = vh.restoreView(context, viewId);
                        if(view==null){
                             try{
                                WebConversation wc = new WebConversation();
                                wc.putCookie("JSESSIONID", request.getSession().getId());
                                String url = getUrl(request, viewId);
                                WebResponse wr = wc.getResponse(url);
                             }catch(Exception e){
                                  report.setException(e);
                             view = vh.restoreView(context, viewId);
                        try{
                             Method doActionMethod = TestPhaseListener.class.getDeclaredMethod("doAction", new Class[]{Action.class, FacesContext.class, HttpServletRequest.class, UIViewRoot.class, String.class});
                             ComponentUtil.iterateComponent(view, Action.class, this, doActionMethod, new Object[]{context, request, view, viewId});
                        }catch(Exception e){
                             report.setException(e);
                   //render report
                   renderReport(context, report);
                   request.getSession().removeAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                   context.responseComplete();
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#beforePhase(javax.faces.event.PhaseEvent)
         public void beforePhase(PhaseEvent event) {
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#getPhaseId()
         public PhaseId getPhaseId() {
               return PhaseId.RESTORE_VIEW;
         private String getUrl(HttpServletRequest request, String viewId){
              return request.getScheme()+"://" + request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/faces"+viewId;
         protected void doAction(Action action, FacesContext context, HttpServletRequest request, UIViewRoot view, String viewId){
              try{
                      WebConversation wc = new WebConversation();
                      wc.putCookie("JSESSIONID", request.getSession().getId());
                      String url = getUrl(request, viewId);
                      WebRequest wrq = new PostMethodWebRequest(url);
                      wrq.setParameter(Constants.TEST_VIEW_PARAMETER, viewId);
                      wrq.setParameter(Constants.TEST_ACTION_PARAMETER, action.getId());
                      //set parameters
                      try{
                           Method doParameterMethod = TestPhaseListener.class.getDeclaredMethod("doParameter", new Class[]{Parameter.class, String.class, WebRequest.class});
                           ComponentUtil.iterateComponent(view, Parameter.class, this, doParameterMethod, new Object[]{action.getId(), wrq});
                      }catch(Exception e){
                           e.printStackTrace();
                      //set attributes
                      //set values
                      try{
                           Method doSetMethod = TestPhaseListener.class.getDeclaredMethod("doSet", new Class[]{Set.class, FacesContext.class, String.class, WebRequest.class});
                           ComponentUtil.iterateComponent(view, Set.class, this, doSetMethod, new Object[]{context, action.getId(), wrq});
                      }catch(Exception e){
                           e.printStackTrace();
                      //do test actions
                      String formId = null;
                      if(formId!=null)wrq.removeParameter(formId);
                      formId = ComponentUtil.getForm(action).getClientId(context);
                      wrq.setParameter(formId, action.getParent().getClientId(context));
                      long start = System.currentTimeMillis();
                      WebResponse wrp = wc.getResponse(wrq);
                      //System.out.println(wrp.getText());
                      //do assertions
                      try{
                           Method doAssertMethod = TestPhaseListener.class.getDeclaredMethod("doAssert", new Class[]{Assert.class, FacesContext.class, HttpServletRequest.class, String.class, String.class, String.class, WebResponse.class});
                           ComponentUtil.iterateComponent(view, Assert.class, this, doAssertMethod, new Object[]{context, request, viewId, action.getId(), action.getDescription(), wrp});
                      }catch(Exception e){
                           e.printStackTrace();
                      TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                     report.getPage(viewId).getAction(action.getId()).setTime(System.currentTimeMillis()-start);
                   }catch(Exception e){
                        e.printStackTrace();
         protected void doParameter(Parameter parameter, String actionId, WebRequest wrq){
               if("all".equals(parameter.getActions()) || Arrays.asList(parameter.getActions().split(",")).contains(actionId))wrq.setParameter(parameter.getName(), parameter.getValue());
         protected void doSet(Set set, FacesContext context, String actionId, WebRequest wrq){
               if("all".equals(set.getActions()) || Arrays.asList(set.getActions().split(",")).contains(actionId))wrq.setParameter(set.getParent().getClientId(context), set.getValue());
         protected void doAssert(Assert ast, FacesContext context, HttpServletRequest request, String viewId, String actionId, String actionDescription, WebResponse wrp){
              if(("all".equals(ast.getActions()) || Arrays.asList(ast.getActions().split(",")).contains(actionId)) && "afterRenderResponse".equals(ast.getPhase())){
                    TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                    try{
                         HTMLElement targetElement = wrp.getElementWithID(ast.getParent().getClientId(context));
                         if(targetElement==null)targetElement = wrp.getElementsWithName(ast.getParent().getClientId(context))[0];
                         if(targetElement==null)request.setAttribute(ast.getVar(), null);
                         else request.setAttribute(ast.getVar(), targetElement.getAttribute(ast.getValueAttribute()));
                         //report assert
                         report.report(viewId, actionId, actionDescription, ast.getId(), ast.getDescription(), ast.getPhase(), (Boolean)ast.getValue(), null);
                    }catch(Exception e){
                         report.report(viewId, actionId, actionDescription, ast.getId(), ast.getDescription(), ast.getPhase(), Boolean.FALSE, e);
         protected void renderReport(FacesContext context, TestReport report){
              try{
                   HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
                   response.setContentType("text/xml; charset=UTF-8");
                   response.setHeader("Cache-Control", "no-cache");
                   ResponseWriter writer = new HtmlResponseWriter(response.getWriter(), null, null);
                   context.setResponseWriter(writer);
                   writer.startDocument();
                   writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
                   writer.startElement("Test", null);
                   if(report.getSuiteId()!=null)writer.writeAttribute("suite", report.getSuiteId(), null);
                   for(Iterator p=report.listPages().iterator(); p.hasNext(); ){
                        TestPage page = (TestPage)p.next();
                        writer.startElement("Page", null);
                        writer.writeAttribute("id", page.getViewId(), null);
                        for(Iterator i=page.listActions().iterator(); i.hasNext(); ){
                             TestAction action = (TestAction)i.next();
                             writer.startElement("Action", null);
                             writer.writeAttribute("id", action.getId(), null);
                             writer.writeAttribute("time", getElapsedTime(action.getTime()), null);
                             if(action.getDescription()!=null)writer.writeAttribute("description", action.getDescription(), null);
                             for(Iterator j=action.getAsserts().values().iterator(); j.hasNext(); ){
                                  TestAssert ast = (TestAssert)j.next();
                                  writer.startElement("Assert", null);
                                  writer.writeAttribute("id", ast.getId(), null);
                                  if(ast.getDescription()!=null)writer.writeAttribute("description", ast.getDescription(), null);
                                  for(Iterator k=ast.getStatus().keySet().iterator(); k.hasNext(); ){
                                       String phase = (String)k.next();
                                       writer.startElement(phase, null);
                                       writer.writeAttribute("pass", ast.getStatus().get(phase).toString(), null);
                                       writer.endElement(phase);
                                  if(ast.getException()!=null){
                                       writer.startElement("Exception", null);
                                       StackTraceElement[] stack = ast.getException().getStackTrace();
                                       for(int m=0; m<stack.length; m++){
                                            writer.write(stack[m].toString());
                                            writer.write("\r\n");
                                       writer.endElement("Exception");
                                  writer.endElement("Assert");
                             if(action.getException()!=null){
                                  writer.startElement("Exception", null);
                                  StackTraceElement[] stack = action.getException().getStackTrace();
                                  for(int m=0; m<stack.length; m++){
                                       writer.write(stack[m].toString());
                                       writer.write("\r\n");
                                  writer.endElement("Exception");
                             writer.endElement("Action");
                        if(page.getException()!=null){
                             writer.startElement("Exception", null);
                             StackTraceElement[] stack = page.getException().getStackTrace();
                             for(int m=0; m<stack.length; m++){
                                  writer.write(stack[m].toString());
                                  writer.write("\r\n");
                             writer.endElement("Exception");
                        writer.endElement("Page");
                   if(report.getException()!=null){
                        writer.startElement("Exception", null);
                        StackTraceElement[] stack = report.getException().getStackTrace();
                        for(int m=0; m<stack.length; m++){
                             writer.write(stack[m].toString());
                             writer.write("\r\n");
                        writer.endElement("Exception");
                   writer.endElement("Test");
                   writer.endDocument();
                   response.getWriter().flush();
                   response.getWriter().close();
              }catch(Exception e){
                   e.printStackTrace();
          public static String getElapsedTime(long millis) {
                   long hours, minutes, seconds, ms;
                   hours = millis / 3600000;
                   millis = millis - (hours * 3600000);
                   minutes = millis / 60000;
                   millis = millis - (minutes * 60000);
                   seconds = millis / 1000;
                   ms = millis - (seconds * 1000);
                   return hours
                        + " hour(s) "
                        + minutes
                        + " minute(s) "
                        + seconds
                        + " second(s) "
                        + ms
                        + " millisecond(s)";
    *  TestAssertPhaseListener.java
    package com.yourcompany.jsf.ui.test.listener;
    import java.lang.reflect.Method;
    import java.util.Arrays;
    import javax.faces.component.UIViewRoot;
    import javax.faces.context.FacesContext;
    import javax.faces.event.PhaseEvent;
    import javax.faces.event.PhaseId;
    import javax.faces.event.PhaseListener;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.commons.beanutils.PropertyUtils;
    import com.yourcompany.jsf.ui.test.component.Assert;
    import com.yourcompany.jsf.ui.test.report.Constants;
    import com.yourcompany.jsf.ui.test.report.TestReport;
    import com.yourcompany.jsf.ui.util.ComponentUtil;
    public class TestAssertPhaseListener implements PhaseListener {
         public TestAssertPhaseListener() {
              super();
              // TODO Auto-generated constructor stub
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#afterPhase(javax.faces.event.PhaseEvent)
         public void afterPhase(PhaseEvent event) {
              if(PhaseId.RENDER_RESPONSE.equals(event.getPhaseId()))return;
              iterateAssert(event, false);
         /* (non-Javadoc)
          * @see javax.faces.event.PhaseListener#beforePhase(javax.faces.event.PhaseEvent)
         public void beforePhase(PhaseEvent event) {
              if(PhaseId.RESTORE_VIEW.equals(event.getPhaseId()))return;
              iterateAssert(event, true);
         public PhaseId getPhaseId() {
               return PhaseId.ANY_PHASE;
         protected void iterateAssert(PhaseEvent event, boolean before){
              FacesContext context = event.getFacesContext();
              HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
              String viewId = request.getParameter(Constants.TEST_VIEW_PARAMETER);
              String actionId = request.getParameter(Constants.TEST_ACTION_PARAMETER);
              if(actionId!=null){
                   TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                   UIViewRoot view = context.getViewRoot();
                   if(view==null)return;
                   try{
                        Method doAssertMethod = TestAssertPhaseListener.class.getDeclaredMethod("doAssert", new Class[]{Assert.class, FacesContext.class, HttpServletRequest.class, String.class, String.class, String.class});
                        ComponentUtil.iterateComponent(view, Assert.class, this, doAssertMethod, new Object[]{context, request, viewId, actionId, this.getAssertPhase(event.getPhaseId(), before)});
                   }catch(Exception e){
                        report.getPage(viewId).getAction(actionId).setException(e);
         protected void doAssert(Assert ast, FacesContext context, HttpServletRequest request, String viewId, String actionId, String assertPhase){
               if(("all".equals(ast.getActions()) || Arrays.asList(ast.getActions().split(",")).contains(actionId)) && assertPhase.equals(ast.getPhase())){
                    TestReport report = (TestReport)request.getSession().getAttribute(Constants.TEST_REPORT_SESSION_ATTRIBUTE_ID);
                    try{
                         request.setAttribute(ast.getVar(), PropertyUtils.getProperty(ast.getParent(), ast.getValueAttribute()));
                         //report assert
                         report.report(viewId, actionId, null, ast.getId(), ast.getDescription(), ast.getPhase(), (Boolean)ast.getValue(), null);
                    }catch(Exception e){
                         report.report(viewId, actionId, null, ast.getId(), ast.getDescription(), ast.getPhase(), Boolean.FALSE, e);
         protected String getAssertPhase(PhaseId phaseId, boolean before){
              String perfix = before ? "before" : "after";
              if(PhaseId.RESTORE_VIEW.equals(phaseId))return perfix+"RestoreView";
              if(PhaseId.APPLY_REQUEST_VALUES.equals(phaseId))return perfix+"ApplyRequestValues";
              if(PhaseId.PROCESS_VALIDATIONS.equals(phaseId))return perfix+"ProcessValidations";
              if(PhaseId.UPDATE_MODEL_VALUES.equals(phaseId))return perfix+"UpdateModelValues";
              if(PhaseId.INVOKE_APPLICATION.equals(phaseId))return perfix+"InvokeApplication";
              if(before && PhaseId.RENDER_RESPONSE.equals(phaseId))return "beforeRenderResponse";
              return "";
    *  UIIterate.java
    // This class brings "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

    To Neoreborn:
    If I understand right, Shale only provides some mock core JSF objects and extends JUnit so that you can do junit test to your java classes.
    What I concern is to test Pages(JSP) rather than java classes. I want to assert component attribute values within all lifecycle including rendered HTML script. Currently, there isn't any good tools to do this kind of JSP Unit test, am I right?

  • Question about navigation in session scope

    Hi.
    I dont know how to resolve a problem or how to focus this stuff.
    I'll try to explain myself.
    Let say I have a page (a.jsf) with several links, all this links navigates to the same page (b.jsf) which shows the results.
    For each link in a.jsf I have attached a bean with a logic, so If I click in link 1 I go to the b.jsf showing data read from the database.table1. If I clik in link2 I go to b.jsf showing data read from database.table2, and so on...
    The beans are in session scope (and must be).
    The first time works ok because I initialize the bean in b.jsf, read data and I show using a selecManyListBox to show it, but if I go back and select another link it goes to b.jsf, but it shows the old data, the data read the first time, because it never calls again the init method.
    Somebody has talked about using an additional bean to control this but once the bean in b.jsf is created I don't know how to call again the init method in beanB (b.jsf)..
    I have attached a very simple project to deploy in eclipse 3.3 and tomcat 6.0. In this example instead of read from database I read from an structure created in memory to simulate this.
    Somebody could take a look and comment something about it.
    http://rapidshare.com/files/197755305/_session-forms.war
    Thanks

    Hi.
    I understand is the same doing in the action method in a button or a commnad, the project is just an example, my real app is a tree, so is not a question about a button or a command, is about the logic being in session scope. I don't know how to face it.
    thanks

  • A question about BC 400 training program

    Dear all,
    I have a question about SAP taining program for ABAP. My manager will soon register me for the training program BC 400, which seems to be the start point for those who don't know anything about ABAP. I was looking at the course description page and I saw that the course is provided as VLC (Virtual Class). As I understood is that the student connects from his workstation to the training center, so it is distant training program.
    I think it would be more interesting for me to be directly in the classroom with teacher face-to-face.
    Therefore, my qestion is the fact that a training program is VLC, does it mean that it is no more possible to attend directly in classes ? or is just for those who may not want for some reason attend directly to the class?
    Thanks in advance,
    Dariyoosh
    Moderator message: moved to S & C.
    Edited by: Thomas Zloch on Sep 6, 2010 2:33 PM

    This is forum for general abap problems.but to answer your question
    check this link from sap site
    http://www.sap.com/usa/services/education/tabbedcourse.epx?context=[[|bc400||1|063|us|]]|
    Thanks
    Bala Duvvuri

  • Newbie question - general question about e-mail sync

    Hi,
    I have a general question about email sync and BlackBerry smartphones.  Are there any devices that allow email syncing with a Microsoft Exchange 2007 system that do not require the BlackBerry Enterprise server?
    Thanks; sorry if this has been asked before but I was unable to find it in the forums, documentation, etc.  Everything I found assumes that for this kind of environment you will be using a BlackBerry Enterprise solution, but I can't assume.
    Thanks again.
    Solved!
    Go to Solution.

    Hi and Welcome to the Forums!
    If the Exchange server has anything that faces the internet (OWA, POP, IMAP), then BIS can be used to handle email (only email...calendar and contacts require BES to sync OTA).
    Or, a PC, inside the network (but with an internet path) and logged into the email server (using Outlook), can be left running, using the RIM Desktop Software's Desktop Redirector capability to forward  messages to the BB.
    Those are basically the options.
    Hope that helps! Let us know!
    Occam's Razor nearly always applies when troubleshooting technology issues!
    If anyone has been helpful to you, please show your appreciation by clicking the button inside of their post. Please click here and read, along with the threads to which it links, for helpful information to guide you as you proceed. I always recommend that you treat your BlackBerry like any other computing device, including using a regular backup schedule...click here for an article with instructions.
    Join our BBM Channels
    BSCF General Channel
    PIN: C0001B7B4   Display/Scan Bar Code
    Knowledge Base Updates
    PIN: C0005A9AA   Display/Scan Bar Code

  • Has JavaServer Faces reached beta?

    I know---please forgive my sarcasm. (I'm sure you've been at this point, too, in your programming career. I'll just vent a little.) I've only spent several days trying to create a simple page I could have coded in a couple of hours in any given language---Java, C++, 80x86 assembler---but not JavaServer Faces.
    Has anyone created any real applications in JSF? It's practically unusable in the real world. I'm about to throw it all away for JSP and JSTL. Here's why:
    * I can't pass parameters to bean methods in the expression language.
    * dataTable can't create <th> except in a header facet, and a header facet can't access data being iterated.
    * There's no way to specify different styles for different <th> elements in a dataTable.
    * There's no way to specify a unique style (rather than the simple alternating styles) for a dataTable row.
    * JSF beans aren't available to the JSTL expression language unless you go through ugly hacks (such as outputting a JSF bean method to a dummy JSTL variable) to make sure the JSF backing beans get instantiated.
    * If any non-JSF stuff (including JSTL, HTML, verbatim character data, or whatever) is present in a JSF page, one has to tediously make sure that a special, seemingly-arbitrary hierarchy of subviews are in place---and even then it's not clear if you're following the spec or just managed to randomly find a combination that worked. Otherwise, all the information gets rendered out of order and out of hierarchy.
    * Don't even think about getting JSTL iteration elements to work with any of this.
    * commandLink still doesn't work in JSF 1.1_01.
    I'd go on, but I need to go back to taking JSF out of the single page I've been working on for days.
    Thanks for listening,
    Garret

    * dataTable can't create <th> except in a header
    facet, and a header facet can't access data being
    iterated.I've no idea why the heck you think a header facet
    should be able to access data that's being iterated.
    That makes no sense to me at all. A header is
    explicltly and, to me at least, obviously not part
    of per-row iteration!Read both parts of that comment together---what I'm really wanting is to be able to get a <th>, and the only way to do that is with a header facet. Here's an example off the top of my head:
    <h1>Book Metadata</h1>
    <table>
    <tr><th>Author</th> <td>Jane Doe</td></tr>
    </table>
    Here the row header is from a list of arbitrary book metadata---we don't know ahead of time what metadata properties the book has. Maybe it has two authors. Maybe it has five creation dates.
    It seems as though your frustrations mostly boil
    down to:
    (1) You hate <h:dataTable>, and find it too limiting.
    Well, it's one of the first JSF element's I've tried (after commandLink, of course). Maybe all of the others work just fine and are powerful.
    (2) You're trying to mix JSTL and JSF, and are
    surprised this doesn't work.
    For #2, it's a known and much-documented thing, so I
    can't understand why you're surprised.
    However documented it is, I'm surprised that not only does JSF not offer equivalent functionality as JSTL, it removes the ability to use JSTL.
    Garret                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • JavaServer Faces Development process

    Are there any guidelines / best practices how a JavaServer Faces development process can
    be established. Mainly I'm worry about the separation between
    HTML designer (page authors) and application developers.
    Is it a "good" procedure to let application developer create a sort of prototype including
    the JSP pages and MockBackingBeans to enable a reasonable
    preview for the page authors?
    Or are there any other recommended approaches, how this can be done?
    Thanks for any help in advance.

    http://www.javaworld.com/javaworld/jw-11-2002/jw-1129-jsf.html
    http://java.sun.com/j2ee/javaserverfaces
    1. Go to www.Google.com or www.yahoo.com
    2. Type JSF or Java Server Faces in search box field
    Please let me know , if you find some!!!

  • Question about servlet architecture

    Hello,
    I have a question about Web Application / servlet architecture and development, and haven't had any luck finding an answer so far. My plan must be either unusual, or wrong, or both, so I'm hoping the community here could point me in the right direction.
    I have quite a bit of background in OSGi, but very little in servlets. I know my architecture would work with something such as sever-side Equinox, but for the open source project I'm contemplating, I think that the more mainstream Tomcat/servler route would be better -- assuming it can be done. Here is a rather simplified scenario:
    There is a class, Manager. It could be a Java class that implements Runnable, or a non-HTTP servlet (GenericServlet?), but somehow it should be configured such that it runs as soon as Tomcat starts.
    When Manager runs, it instantiates its primary member variable: Hashtable msgHash; mshHash will map Strings (usernames) to ArrayList<String> (list of messages awaiting that user). Manager also has two primary public methods: addMsg() and getMsgs().
    The pseudocode for addMsg is:
    void addMsg(String username, String msg) {
    if username=="*" { for each msgList in msgHash { msgList.add(msg) } return;
    if username not in msgHash { msgHash.add(username, new ArrayList<String>) }
    msgHash[username].add(msg)
    And for getMsgs():
    String getMsgs(username) {
    String s = "";
    for each msg in msgHash[username] { s = s + msg; }
    return s;
    Once Manager has started, it starts two HTTP Servlets: Sender and Receiver, passing a reference back to itself as it creates the servlets.
    The HTML associated with Sender contains two text inputs (username and message) and a button (send). When the send button is pressed and data is POSTed to Sender, Sender takes it and calls Manager.addMsg(username.value, message.value);
    Receiver servlet is display only. It looks in the request for HTTP GET parameter "username". When the request comes in, Receiver calls Manager.getMsgs(username) and dumps the resulting string to the browser.
    In addition to starting servlets Sender and Receiver, the Manager object is also spawning other threads. For example, it might spawn a SystemResourceMonitor thread. This thread periodically wakes up, reads the available disk space and average CPU load, calls Manager.addMsg("*", diskAndLoadMsg), and goes back to sleep for a while.
    I've ignored the synchronization issues in this example, but during its lifecycle Manager should be idle until it has a task to do, using for example wait() and notify(). If ever addMsg() is called where the message string is "shutdown", Manager's main loop wakes up, and Manager shuts down the two servlets and any threads that it started. Manager itself may then quit, or remain resident, awaiting a command to turn things back on.
    Is any of this appropriate for servlets/Tomcat? Is there a way to do it as I outlined, or with minor tweaks? Or is this kind of application just not suited to servlets, and I should go with server-side Equinox OSGi?
    Thanks very much for any guidance!
    -Mike

    FrolfFla wrote:
    Hello,
    I have a question about Web Application / servlet architecture and development, and haven't had any luck finding an answer so far. My plan must be either unusual, or wrong, or both, so I'm hoping the community here could point me in the right direction.
    I have quite a bit of background in OSGi, but very little in servlets. I know my architecture would work with something such as sever-side Equinox, but for the open source project I'm contemplating, I think that the more mainstream Tomcat/servler route would be better -- assuming it can be done. Here is a rather simplified scenario:
    There is a class, Manager. It could be a Java class that implements Runnable, or a non-HTTP servlet (GenericServlet?), but somehow it should be configured such that it runs as soon as Tomcat starts.You can configure a servlet to be invoked as soon as Tomcat starts. Check the tomcat documentation for more information on that (the web.xml contains such servlets already though). From this servlet you can start your Manager.
    >
    When Manager runs, it instantiates its primary member variable: Hashtable msgHash; mshHash will map Strings (usernames) to ArrayList<String> (list of messages awaiting that user). Manager also has two primary public methods: addMsg() and getMsgs().
    The pseudocode for addMsg is:
    void addMsg(String username, String msg) {
    if username=="*" { for each msgList in msgHash { msgList.add(msg) } return;
    if username not in msgHash { msgHash.add(username, new ArrayList<String>) }
    msgHash[username].add(msg)
    And for getMsgs():
    String getMsgs(username) {
    String s = "";
    for each msg in msgHash[username] { s = s + msg; }
    return s;
    Once Manager has started, it starts two HTTP Servlets: Sender and Receiver, passing a reference back to itself as it creates the servlets. Not needed. You can simply create your two servlets and have them invoked through web calls, Tomcat is the only one that can manage servlets in any case. Servlets have a very short lifecycle - they stay in memory from the first time they are invoked, but the only time that they actually do something is when they are called through the webserver, generally as the result of somebody running the servlet through a webbrowser, either by navigating to it or by posting data to it from another webpage. The servlet call ends as soon as the request is completed.
    >
    The HTML associated with Sender contains two text inputs (username and message) and a button (send). When the send button is pressed and data is POSTed to Sender, Sender takes it and calls Manager.addMsg(username.value, message.value);
    Receiver servlet is display only. It looks in the request for HTTP GET parameter "username". When the request comes in, Receiver calls Manager.getMsgs(username) and dumps the resulting string to the browser.This states already that you are going to run the servlets through a browser. You run "Sender" by navigating to it in the browser. You run "Receiver" when you post your data to it. Manager has nothing to do with that.
    >
    In addition to starting servlets Sender and Receiver, the Manager object is also spawning other threads. For example, it might spawn a SystemResourceMonitor thread. This thread periodically wakes up, reads the available disk space and average CPU load, calls Manager.addMsg("*", diskAndLoadMsg), and goes back to sleep for a while.Since you want to periodically run the SystemResourceMonitor, it is better to use a Timer for that in stead of your own thread.
    >
    I've ignored the synchronization issues in this example, but during its lifecycle Manager should be idle until it has a task to do, using for example wait() and notify(). If ever addMsg() is called where the message string is "shutdown", Manager's main loop wakes up, and Manager shuts down the two servlets and any threads that it started. Manager itself may then quit, or remain resident, awaiting a command to turn things back on.
    Is any of this appropriate for servlets/Tomcat? Is there a way to do it as I outlined, or with minor tweaks? Or is this kind of application just not suited to servlets, and I should go with server-side Equinox OSGi?
    Thanks very much for any guidance!
    -MikeI don't see anything that cannot be done in a normal java web environment, as long as you are aware of how servlets operate.

  • Hi All, I have question about the iMac operating system. I have the last updated. The problem when I manage the place of the folder windows they are all mixing up. I mean they not on the place where I left them. how to set they stay on the same place. Tks

    Hi All, I have question about the iMac operating system. I have the last updated. The problem when I manage the place of the folder windows they are all mixing up. I mean they not on the place where I left them. how to set they stay on the same place? I know there are different possibilities to set.
    I tried but it not helped for me. What I can do? How and where can set this they stay on their place?
    Thanks.
    laci

    Option 1
    Back Up and try rebuild the library: hold down the command and option (or alt) keys while launching iPhoto. Use the resulting dialogue to rebuild. Choose to Repair Database. If that doesn't help, then try again, this time using Rebuild Database.
    If that fails:
    Option 2
    Download iPhoto Library Manager and use its rebuild function. (In Library Manager it's the FIle -> Rebuild command)
    This will create an entirely new library. It will then copy (or try to) your photos and all the associated metadata and versions to this new Library, and arrange it as close as it can to what you had in the damaged Library. It does this based on information it finds in the iPhoto sharing mechanism - but that means that things not shared won't be there, so no slideshows, books or calendars, for instance - but it should get all your events, albums and keywords, faces and places back.
    Because this process creates an entirely new library and leaves your old one untouched, it is non-destructive, and if you're not happy with the results you can simply return to your old one. 
    Regards
    TD 

  • When to move from Struts to JavaServer Faces

    Hi all,
    we've noticed that JavaServer Faces appears to be the future for Model-View-Controller (MVC) framework, and eventually make Struts obsolete (IMHO).
    we are just about to embark on a new project and wondering if JavaServer Faces (JSF) is mature enough to deserve our attention, or should we wait until its full production release.
    any comments will be appreciated.
    regards,
    Trajano

    I would say if it's not at a full production release yet, then wait. If you have a real world app, it's not worth using a beta system to run it on. At least not without some thorough testing of your own, but only you know what your application needs.

  • A few questions about the ka790gx and dka790gx

    i have a few questions about the ka790gx and dka790gx , how much better is the dka790gx compaired to the ka790gx ? . how much difference does the ACC function make to overclocking etc , i plan on getting a phenom II 940BE or 720BE . i already have the ka790gx so would it be worth building another system using the dka790gx mobo , or should i keep what i already have and just change the cpu ?

    It's largely irrelevant what other boards had VRM issues other than the KA790GX - the fact is it died at stock settings. Since there is little cost difference between the more robust DKA790GX (or Platinum if you really need 1394) why bother with the proven weakling? There are other examples around of the KA not having a robust power section.  There's no way I would use even a 95W TDP CPU in the KA and absolutely not O/C.....!
    As for the credentials of Custom PC, I have generally found their reviews accurate and balanced, and echo my own findings where applicable. If a little too infrequent.
    The fact that the KA has such a huge VRM heatsink leads me to my other comments on the Forum, particularly regarding the "fudge" aspect:
    """Henry is spot on - the notion that adding a heatsink to the top of the D2PAK or whatever MOSFETS is effective is virtually worthless. The device's die thermal junction is the tab on the device back - which is always against the PCB pad. The majority of heat is therefore dissipated in to the board, and the fact that the epoxy plastic encapsulation gets hot is simply due to the inability of the heat to be conducted away from the device die via the tab. Not sure when Epoxy become an effective conductor of heat.... Good practice is to increase the size of the PCB pad (or "land" in American) such that the enlarged PCB copper area acts as an adequate heatsink. This is still not as effective as clamping a power device tab to an actual piece of ali or copper, but since the devices used are SMD devices, this is not possible. However, the surface area required to provide sufficient PCB copper area to act as a heatsink for several devices isn't available in the current motherboard layouts. Where industrial SBC designs differ in this respect is to place the VRM MOSFETs on the back of the PCB on very enlarged PCB pads - where real estate for components is not an issue.
    Gigabyte's UD3 2oz copper mainboards sound like a good idea, on the face of it. However, without knowing how they have connected the device tabs to where and what remains a mystery. I suspect it is more hype than solution, although there will be some positive effect. From an electrical perspective, having lower resistance connecting whatever to whatever (probably just a 0V plane) is no bad thing.
    The way the likes of ASUS sort of get round the problem is to increase the sheer number of MOSFET devices and effectively spread the heat dissipation over a larger physical area. This works to a degree, there is the same amount of heat being dissipated, but over several more square inches. The other advantage of this is that each leg of the VRM circuit passes less current and therefore localised heat is reduced. Remember that as well as absolute peak operating temperature causing reduced component life, thermal cycling stresses the mechanical aspects of components (die wire bonds for example) as well as the solder joints on the board. Keeping components at a relatively constant temperature, even if this is high (but within operating temperature limits), is a means of promoting longevity.
    For myself, the first thing I do with a seperate VRM heatsink is take it off and use a quiet fan to blow air on to the VRM area of the PCB - this is where the heat is. This has the added benefit of actively cooling the inductors and capacitors too....
    Cooling the epoxy component body is a fudge. If the epoxy (and thus any heatsink plonked on top of it) is running at 60C, the component die is way above that.....
    It's better than nothing, but only just."""

  • Questions about your new HP Products? HP Expert Day: January 14th, 2015

    Thank you for coming to Expert Day! The event has now concluded.
    To find out about future events, please visit this page.
    On behalf of the Experts, I would like to thank you for coming to the Forum to connect with us.  We hope you will return to the boards to share your experiences, both good and bad.
     We will be holding more of these Expert Days on different topics in the months to come.  We hope to see you then!
     If you still have questions to ask, feel free to post them on the Forum – we always have experts online to help you out.
    So, what is HP Expert Day?
    Expert Day is an online event when HP employees join our Support Forums to answer questions about your HP products. And it’s FREE.
    Ok, how do I get started?
    It’s easy. Come out to the HP Support Forums, post your question, and wait for a response! We’ll have experts online covering our Notebook boards, Desktop boards, Tablet boards, and Printer and all-in-one boards.
    We’ll also be covering the commercial products on the HP Enterprise Business Community. We’ll have experts online covering select boards on the Printing and Digital Imaging and Desktops and Workstations categories.
    What if I need more information?
    For more information and a complete schedule of previous events, check out this post on the forums.
    Is Expert Day an English-only event?
    No. This time we’ll have experts and volunteers online across the globe, answering questions on the English, Simplified Chinese, and Korean forums. Here’s the information:
    Enterprise Business Forum: January 14th 7:00am to 12:00pm and 6:00pm to 11:00pm Pacific Time
    Korean Forum: January 15th 10am to 6pm Korea Time
    Simplified Chinese Forum: January 15th 10am to 6pm China Time
    Looking forward to seeing you on January 14th!
    I am an HP employee.

    My HP, purchased in June 2012, died on Saturday.  I was working in recently installed Photoshop, walked away from my computer to answer the phone and when I came back the screen was blank.  When I turned it on, I got a Windows Error Recovery message.  The computer was locked and wouldn't let me move the arrow keys up or down and hitting f8 didn't do anything. 
    I'm not happy with HP.  Any suggestions?

  • Have questions about your Creative Cloud or Subscription Membership?

    You can find answers to several questions regarding membership to our subscription services.  Please see Membership troubleshooting | Creative Cloud - http://helpx.adobe.com/x-productkb/policy-pricing/membership-subscription-troubleshooting- creative-cloud.html for additional information.  You can find information on such topics as:
    I need help completeing my new purchase or upgrade.
    I want to change the credit card on my account.
    I have a question about my membership price or statement charges.
    I want to change my membership: upgrade, renew, or restart.
    I want to cancel my membership.
    How do I access my account information or change update notifications?

    Branching to new discussion.
    Christym16625842 you are welcome to utilize the process listed in Creative Cloud Help | Install, update, or uninstall apps to install and evaluate the applications included with a Creative Cloud Membership.  The software is fully supported on recent Mac computers.  You can find the system requirements for the Creative Cloud at System requirements | Creative Cloud.

  • Questions about using the Voice Memos app

    I'm currently an Android user, but will be getting an iPhone 6 soon. My most used app is the voice memos app on my Android phone. I have a couple questions about the iPhone's built-in voice memos app.
    -Am I able to transfer my voice memos from my Android phone to my iPhone, so my recordings from my Android app will show up in the iPhone's voice memos app?
    -When exporting voice memos from the iPhone to computer, are recordings in MP3 format? If not, what format are they in?
    -In your opinion, how is the recording quality of the voice memos app?

    You cannot import your Android voice memos to your iPhone's voice memo app.  You might be able to play the Android memos and have the iPhone pick up the audio and record it.
    Here is the writeup about sending voice memos from the iPhone to your computer (from the iPhone User Guide):
    App quality is excellent.

Maybe you are looking for

  • Mac OS 10.6.8 Won't Log Out

    Lately, my Mac Pro will not Log Out, I get a message saying an application is still running and if I close it down it can then logout – however are no applications running when I get this message - I always close all Apps before I try to logout. What

  • Proxy to SOAP Scenario, payload with the SOAP envelops

    Hi , We have Scenario like Proxy to SOAP,As per Business requirement they are asking payload with ENVELOP . Like below message ================================================================ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/

  • How can I terminate ALL test sockets from API

    I want to terminate all my test sockets (Batch model). Manually I do it by "Debug -> Terminate All". Is there any way to terminate all sockets through NI TestStand API Automation Server ? I succecced to terminate only one socket (object class RunStat

  • Reload Teredo Tunneling Adapter on a Pavilion

    Need to reload the driver for the Microsoft Teredo Tunneling Adapter on a Pavilion g7-1338dx This question was solved. View Solution.

  • MQ-XI-BW

    Hi ppl,       i am able to load data into BW as soon as an XML file is posted in MQSeries.My source XML File includes the Message Type details and the namespace details along with the attributes.Now i need to connect my MQSeries with some OLTP System