Faces Performance vrs Struts

In evaluating JSF's, I put together a simple customer maintenance application of about 10 screens, first using Struts and then again using JSF's, matching the UI exactly. To measure relative performance between these two technologies, I isolated 3 relative static pages from each and ran individual JMeter benchmarks against them (just cycling between these 3 pages over and over). The struts implementation is approximately 5 times faster (measured in pages/sec) over faces. My question is this the same observation most have seen so far (faces vrs struts)? I understand faces is new and will continue to improve. I am using the lastest snap of faces 1_1_01. I welcome any comments.

This is a slow moving thread, but the issue stills seems to be hanging around. I got similar results current technology.
I grabbed the attachments from the original performance bug https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=3 and ran some JMeter tests against the "JSP only" and the JSF versions.
The pages are really simple, the JSP version outputs a page which is visually identical to the JSF page. The table in question had 10 columns and 50 - 200 rows. Not a huge amount of data. I used MyFaces 1.1.3 as the JSF implementation and ran the test in JBoss 4.0.4 GA running on JDK 1.4.2.
Here's the results:
               Table Rows   Average [ms]  Median [ms]   Hits / Min   Samples
JSF Testcase    50           36            30            1300         5007
JSP Testcase    50           14            10            4030         5001
JSF Testcase    100          56            60            1050         5001
JSP Testcase    100          21            20            2700         5001
JSF Testcase    200          100           100           590          5001
JSP Testcase    200          26            30            2170         5001 This data confirms the discussion original JSF bug. The JSF version started out nearly three times slower than the JSP page. The relative performance of the JSF version degraded to nearly four times slower as table rows were added.
So if you are thinking about adopting JSF you should be aware of the performance hit and make sure that you can architect around the problem or get the performance benchmarks adjusted. Perceived performance is important in real life projects so it's more than a theoretical problem.
I'd also like to know if anybody has ideas or code samples that make JSF perform better?

Similar Messages

  • ADF Faces performance

    Hi All,
    We need to do our project in ADF faces as UI technology. So we want to know the exact performance measures for that. There was some information that ADF faces is a bit slow as comparision to other JSF implementation like MyFaces.
    So can anyone please gives some information or reference for ADF Faces performance with respect to Myfaces or any JSF implemetation ?
    Thanks
    Suhas

    Suhas,
    I am not aware of any performance measurement that compares MyFaces with ADF Faces, especially because ADf Faces is a UI component set only that by default uses the JSF RI engine while MyFaces also contains its own implementation of RI.
    ADF Faces runs on top of any JSF compliant implementation and on MyFaces as well. This means that if the performance of ADF Faces with Sun RFI isn't sufficient, you just swap it.
    There was some information that ADF faces is a bit slow as comparision to other JSF implementation like MyFaces
    Assuming you didn't make this one up, can you point me to the source of information you quote here ?
    Frank

  • Struts-faces library: provided struts/tiles example doesn't work?!

    Dear all,
    I�ve been trying to migrate my struts-tiles application to JavaServer Faces using the struts-faces library. I downloaded the latest nightly build, but I was unable to deploy and run the second example (the one using tiles) on Tomcat 5.0.28.
         At first, the <h:commandLink> components for the �Register� and �Login� links on the first page (loggedoff.jsp) wouldn�t work, probably because they should have been replaced by <s:commandLink>. So I fixed that, but then I get an inexplicable http 404 error: �Invalid path /layout was requested� when I click on any of the two links.
         Looking at the source code of both JSP and HTML I noticed that the JSP element <s:form action="/editRegistration"> translates to <form id="menu:_id5" name="registrationForm" action="/StrutsFacesExample/layout.do" method="post">. The action element is obviously(?) wrong: there is no layout.do action mapping anywhere, it�s the path pointing to the main layout jsp with the suffix replaced!
    I�ve been able to trace the problem down to method �action� in library class org.apache.struts.faces.renderer.FormRenderer, which does the following:
    protected String action(FacesContext context, UIComponent component) {
    String actionURL =
    context.getApplication().getViewHandler().
    getActionURL(context, context.getViewRoot().getViewId());
    if (log.isTraceEnabled()) {
    log.trace("getActionURL(" + context.getViewRoot().getViewId() +
    ") --> " + actionURL);
    return (context.getExternalContext().encodeActionURL(actionURL));
    Any ideas on what could be going wrong here? I also tried deploying the example on Tomcat 5.5.7 and JBoss 3.2.5, but the behavior was the same.
    Any comments would be greatly appreciated!
    Mario

    Did you ever find a solution to this problem? No, unfortunately I am still looking for a solution to this one.
    I� ve also reported this to Bugzilla (http://issues.apache.org/bugzilla/show_bug.cgi?id=35265) so you might want to keep an eye on the issue, in case something comes up. However there appears to be no significant activity in the library�s source code repository for almost a month.
    After reading other discussions in forums like this one, I must say that I am discouraged: I seriously doubt if anyone has successfully managed to use the struts-faces integration library. A lot of people are suggesting that integrating the two frameworks is not worth the trouble, and so I am now in the process of evaluating the cost of complete migration from struts to jsf (btw, it doesn�t look good�). Nevertheless, some recent articles demonstrate the library�s use (the most recent one is Kito Mann�s http://www.jsfcentral.com/reading/#4030 ) so I might be wrong.
    It would be nice though if someone who has managed to integrate the two technologies successfully would share his views on this forum�
    Mario

  • Difference between Java Server Faces and Apache Struts

    Hi ,
    I'm quite new to Java Server Faces and Apache Struts. I wonder are they two comparable Frameworks for web presentation?
    And can anybody elaborate please, if they differ in what aspects?
    Thanks
    Jaffar Shaikh

    Here are slides from a presentation by Craig McClanahan that compares them (I believe you can search for other articles on this topic): http://www.baychi.org/calendar/files/Struts-And-Faces/Struts-And-Faces.pdf

  • Did anybody used ADF Faces with Apache Struts?

    Hi
    Can anybody give some guidelines of how to use ADF Faces with Struts?

    I think you'll get a better answer for this on an iBatis forum.
    I think I knew one customer who used this combination.
    We don't have a specific tutorial that shows you how to use iBatis with ADF Faces, but at the end of the day any of the tutorials we have that shows you how to use POJO or a session facade to front POJO will be applicable to iBatis.

  • Performance of Struts

    Why are Struts application (1.1 RC) so slow to start using the embedded OC4J server? I have the debug and detail attributes both set to 0 in the web.xml.

    I've used tiles and I didn't notice any significant performance hit.

  • Faces Performance vs Keywording names

    I just purchased Aperture 3.1.2 and I've just started importing my 7000+ images.  I'm using this to organize and edit my family photos. I've heard about faces and was initially pretty excited about spending the ?? hours adding faces to my images.  However, after reading about performance issues I'm now wondering if it's worth my time and whether I should just keyword the names rather than using faces.  Is it realistic to assume Apple can fix this performance bottleneck?
    Opinions...comments??

    I love faces!
    I have a library with around 100k images and yes the initial scan took a while, now it is easy to find people. I have my library sorted by companies that I shoot for and am able to click on the top level folder for that company and find people easily. No I have not gone through all the images and tagged them, I do not have names for half the people. However key people in the organisation I have done a number of images of them and then as required have the system find more that might be them, works really well for me. Note I do have a fairly high spec'd machine. An example, one client there are some 20k images, I needed to find as many shots of a director who was retiring, to manually sort through all these images would take ages, the faces feature found all the shots that might be her and cut the time down for me dramatically.
    Tony

  • Is java server faces better than struts?

    hi all,
    someone asked me what the difference between struts and jsf is, and which is better. i had trouble elaborating on the topic. anyone care to share their opinions on this?
    ~jeff

    Jeff,
    A lot has been said about this topic -- the bottom line is that JSF focuses on user interface components, and Struts focuses on a lot of other useful stuff. Over time, JSF will probably evolve to do more of what Struts does today, but you can use the two together now. For more info, see my JSF FAQ (http://www.jsfcentral.com), check out some of the other threads in this forum (do a search for Struts and you'll find plenty), and view James Holmes' resource site (http://www.jamesholmes.com/javaserverfaces).
    Kito D. Mann
    Author, JSF in Action
    hi all,
    someone asked me what the difference between struts
    and jsf is, and which is better. i had trouble
    elaborating on the topic. anyone care to share their
    opinions on this?
    ~jeff

  • Performance issues with Planning data load & Agg in 11.1.2.3.500

    We recently upgraded from 11.1.1.3 to 11.1.2.3. Post upgrade we face performance issues with one of our Planning job (eg: Job E). It takes 3x the time to complete in our new environment (11.1.2.3) when compared to the old one (11.1.1.3). This job loads then actual data and does the aggregation. The pattern which we noticed is , if we run a restructure on the application and execute this job immediately it gets completed as the same time as 11.1.1.3. However, in current production (11.1.1.3) the job runs in the following sequence Job A->Job B-> Job C->Job D->Job E and it completes on time, but if we do the same test in 11.1.2.3 in the above sequence it take 3x the time . We dont have a window to restructure the application to before running Job E  every time in Prod. Specs of the new Env is much higher than the old one.
    We have Essbase clustering (MS active/passive) in the new environment and the files are stored in the SAN drive. Could this be because of this? has any one faced performance issues in the clustered environment?

    Do you have exactly same Essbase config settings and calculations performing AGG ? . Remember something very small like UPDATECALC ON/OFF can make a BIG difference in timing..

  • DB Performance issue

    Hi DB Gurus,
    Our application is inserting 60-70K records in a table in each transaction. When multiple sessions are open on this table user face performance issues like application response is too slow.
    Regarding this table:
    1.Size = 56424 Mbytes!
    2.Count = 188,858,094 rows!
    3.Years of data stored = 4 years
    4.Average growth = 10 million records per month, 120 million each year! (has grown 60 million since end of June 2007)
    5.Storage params = 110 extents, Initial=40960, Next=524288000, Min Extents=1, Max Extents=505
    6.There are 14 indexes on this table all of which are in use.
    7. Data is inserted through bulk insert
    8. DB: Oracle 10g
    Sheer size of this table (56G) and its rate of growth may be the culprits behind performance issue. But to ascertain that, we need to dig out more facts so that we can decide conclusively how to mail this issue.
    So my questions are:
    1. What other facts can be collected to find out the root cause of bad performance?
    2. Looking at given statistics, is there a way to resolve the performance issue - by using table partition or archiving or some other better way is there?
    We've already though of dropping some indexes but it looks difficult since they are used in reports based on this table (along with other tables)
    3. Any guess what else can be causing this issue?
    4. How many records per session can be inserted in a table? Is there any limitation?
    Thanks in advance!!

    Run STATSPACK and check what it says are the issues. Try and find the particular INSERT statement in the list of all SQL. Look at all the sections of the report, including block contention, which may show you are waiting for data blocks or index blocks, etc, or even things like latch contention too. Make sure you run it when the INSERT is happening during one of your busy periods.
    Given that you are using Oracle 10g, I assume you are using all the automatic settings now:
    o Local Tablespace Management
    o Automatic Segment Space Management
    o Automatic Undo Management
    If not, you should be. Prior to all this, Oracle always inserted into the last block in a table, which could become a bottleneck point. And space allocation of new blocks was also a problem. When these settings were introduced it alleviated most of these problems, and meant that Oracle could scale far better on such INSERT intensive workloads. If you are not using these for some reason or other, then you need to look at the number of FREELISTS you have on the table, and the setting of INITRANS.
    Also, how many columns does this table have? And how big is an average row. And what is your block size? You can get these from the data dictionary:
    select count (*) from user_tab_columns where table_name = '<tablename>' ;
    select avg_row_len from user_tables where table_name = '<tablename>' ;
    show parameter db_block_size
    Replace <tablename> with the name of your table, in uppercase.
    I ask because a very large row in a small data block will always fill the block quickly and cause new blocks to be allocated. If so, you may just have to live with this.
    And I would be suspicious about all 14 indexes being needed. Are they all single column indexes, or do you have any multi-column indexes? Do any of them share the same leading columns? Again, if you need all 14 indexes, then you must suffer the overhead of maintaining these indexes. But unless you have something like 50 columns in this table, I would guess that there is some overlap between these indexes.
    John

  • Performance of Transfer Statement

    Hi,
      I'm working in a MDMP - Unicode Conversion Project. My job primarily is to enable Custom ABAP code for Unicode syntax.
        I have a generic program which takes the names of tables and fields and the destination path from a file and extracts those table fields to the destination share using transfer statement.
       It is found that this program extracts characters of multiple languages to single file. In the original program there is a single select - endselect loop within which there is a transfer statement.
       Now to accomadate different languages in the same file. I'm collating the data belonging to one language in internal tables and writing the content to the file with a different codepage each time opening and appending to the same file. The approach works good but i face performance issues.
       In the modified version the transfer statement is taking more time than what the transfer statement in the original program is taking. I have no clue of this behaviour. Can someone tell why this change in behaviour of the transfer statement?

    Hi Vijay,
       Let me explain you in detail.
      if i have a transfer statement like this, it is taking approximately 12 seconds to download nearly 50 MB content.
       select * from (extract_info-table) into <tblwa>
       where (where_clause).
       move <tblwa> to o_string.
       transfer o_string to file.
       endselect.
    if i code it this way.
      select * into table <table> from
      (extract_info-table) where (where_clause).
      perform download_file tables <table>
                            using file.
      form download_file tables data_tab
                         using file.
         loop at data_tab.
            transfer data_tab to file.
         endloop.
      endform.
    it is taking 10 times more time ~ 120 secs to download the same content.

  • [freelance job] Experienced ADF/Struts/JSP View-Controller developer

    Hi,
    I'm looking for a freelance "10.1.2 JDeveloper":
    - First task: Development of multi-lingual Struts View and Controller for login, logout, contact, free registration(create/modification of account info, new password, ...) pages.
    Period: may, june 2005 and more if first collaboration is succesful.
    Skills on following technologies are required:
    - View: Struts tags , Struts-el tags , JSTL , JSP , Servlets => no javascript, no UIX, no faces
    - Controller: ADF/Struts
    - Model: Oracle ADF-BC 10.1.2 Oracle 10g Database
    We provide the static html pages + css files and the ADF-BC model components.
    We develop/enhance the Model service methods based on your requirements.
    You "translate" the static html pages to Struts/Struts-EL/JSTL/JSP and the necessary ADF-Struts controllers that inter-act with our ADF-BC Model.
    Contact: [email protected]
    Regards
    Fred
    PS Sorry for polluting this technical forum with this kind of request.

    Dear all..
    I have change the block program, but still can't run..
    My EmpAction.java like these
    ==============================================
    package BindTest7.view;
    import BindTest7.model.EmpViewImpl;
    import java.text.DateFormat;
    import java.text.ParseException;
    import
    oracle.adf.controller.struts.actions.DataActionContext;
    import
    oracle.adf.controller.struts.actions.DataForwardAction;
    import oracle.jbo.ApplicationModule;
    import oracle.jbo.ViewObject;
    import java.util.Date;
    public class EmpAction extends DataForwardAction
    protected void prepareModel(DataActionContext ctx) throws Exception {
    super.prepareModel(ctx);
    ctx.getBindingContainer().findIteratorBinding("FindEmpView1Iterator")
    .setFindMode(true);
    public void onSearch(DataActionContext ctx) {
    ctx.getBindingContainer().findIteratorBinding("EmpView1Iterator")
    .executeQuery();
    //-public void onFilter(DataActionContext ctx)
    //recovery view
    ApplicationModule
    am=ctx.getBindingContainer().getDataControl().getApplicationModule();
    ViewObject EmpView=am.findViewObject("EmpView");
    //recovery dates
    String
    d1Str=ctx.getHttpServletRequest().getParameter("hiredate");
    String
    d2Str=ctx.getHttpServletRequest().getParameter("endDate");
    java.text.SimpleDateFormat formatter =
    new java.text.SimpleDateFormat("dd/MM/yyyy");
    Date d1=null;
    Date d2=null;
    // parse method could try a ParsingException,
    // it doesn't happpeend when dates are correct
    try
    d1=formatter.parse(d1Str);
    d2=formatter.parse(d2Str);
    catch (Exception e)
    //set where clausole
    EmpView.setWhereClauseParams(null);
    EmpView.setWhereClause("Hiredate>=:1 and Hiredate<=:2");
    EmpView.setWhereClauseParam(0,d1);
    EmpView.setWhereClauseParam(1,d2);
    EmpView.executeQuery();
    ===============================================
    Please help me....
    I just want to make a little modification on Steve Muench's Example
    by placing two input form for hiredate column so that
    the user only put the date
    on the query " between hiredate :1 and :2
    I'm waiting...
    regard
    erie

  • J2EE MVC模式JSF与Struts的异同

    J2EE MVC模式JSF与Struts的异同
    Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架,老外总是急吼吼说事件驱动型就比MVC模式框架好,何以见得,我们下面进行详细分析比较一下到底是怎么回事?
      首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。
      在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。
      struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。
      而这种情况使用JSF就可以方便实现,
    <h:inputText id="userId" value="#{login.userId}">
      <f:valueChangeListener type="logindemo.UserLoginChanged" />
    </h:inputText>
      #{login.userId}表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以实现,name="login" property="userId"
      关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged的processValueChanged(...)方法。
      JSF可以为组件提供两种事件:Value Changed和 Action. 前者我们已经在上节见识过用处,后者就相当于struts中表单提交Action机制,它的JSF写法如下:
    <h:commandButton id="login" commandName="login">
      <f:actionListener type=”logindemo.LoginActionListener” />
    </h:commandButton>
      从代码可以看出,这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的,而Struts此类事件是原始的一种表单提交Submit触发机制。如果说前者比较语言化(编程语言习惯做法类似Swing编程);后者是属于WEB化,因为它是来自Html表单,如果你起步是从Perl/PHP开始,反而容易接受Struts这种风格。
      基本配置
      Struts和JSF都是一种框架,JSF必须需要两种包JSF核心包、JSTL包(标签库),此外,JSF还将使用到Apache项目的一些commons包,这些Apache包只要部署在你的服务器中既可。
      JSF包下载地址:http://java.sun.com/j2ee/javaserverfaces/download.html选择其中Reference Implementation。
      JSTL包下载在http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
      所以,从JSF的驱动包组成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿。
      上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了。与Struts的驱动包一样,这些驱动包必须位于Web项目的WEB-INF/lib,和Struts一样的是也必须在web.xml中有如下配置:
    <web-app>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.faces</url-pattern>
      </servlet-mapping>
    </web-app>
      这里和Struts的web.xml配置何其相似,简直一模一样。
      正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件:
    <faces-config>
      <navigation-rule>
        <from-view-id>/index.jsp</from-view-id>
        <navigation-case>
          <from-outcome>login</from-outcome>
          <to-view-id>/welcome.jsp</to-view-id>
        </navigation-case>
      </navigation-rule>
      <managed-bean>
        <managed-bean-name>user</managed-bean-name>
        <managed-bean-class>com.corejsf.UserBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
      </managed-bean>
    </faces-config>
      在Struts-config.xml中有ActionForm Action以及Jsp之间的流程关系,在faces-config.xml中,也有这样的流程,我们具体解释一下Navigation:
      在index.jsp中有一个事件:
    <h:commandButton label="Login" action="login" />
      action的值必须匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一个login事件,那么事件触发后下一个页面将是welcome.jsp
      JSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。
      managed-bean类似Struts的ActionForm,正如可以在struts-config.xml中定义ActionForm的scope一样,这里也定义了managed-bean的scope为session。
      但是如果你只以为JSF的managed-bean就这点功能就错了,JSF融入了新的Ioc模式/依赖性注射等技术。
    Ioc模式
      对于Userbean这样一个managed-bean,其代码如下:
    public class UserBean {
      private String name;
      private String password;
      // PROPERTY: name
      public String getName() { return name; }
      public void setName(String newValue) { name = newValue; }
      // PROPERTY: password
      public String getPassword() { return password; }
      public void setPassword(String newValue) { password = newValue; }
    <managed-bean>
      <managed-bean-name>user</managed-bean-name>
      <managed-bean-class>com.corejsf.UserBean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
      <managed-property>
        <property-name>name</property-name>
        <value>me</value>
      </managed-property>
      <managed-property>
        <property-name>password</property-name>
        <value>secret</value>
      </managed-property>
    </managed-bean>
      faces-config.xml这段配置其实是将"me"赋值给name,将secret赋值给password,这是采取Ioc模式中的Setter注射方式。
      Backing Beans
      对于一个web form,我们可以使用一个bean包含其涉及的所有组件,这个bean就称为Backing Bean, Backing Bean的优点是:一个单个类可以封装相关一系列功能的数据和逻辑。
      说白了,就是一个Javabean里包含其他Javabean,互相调用,属于Facade模式或Adapter模式。
      对于一个Backing Beans来说,其中包含了几个managed-bean,managed-bean一定是有scope的,那么这其中的几个managed-beans如何配置它们的scope呢?
    <managed-bean>
      <managed-property>
        <property-name>visit</property-name>
        <value>#{sessionScope.visit}</value>
      </managed-property>
      这里配置了一个Backing Beans中有一个setVisit方法,将这个visit赋值为session中的visit,这样以后在程序中我们只管访问visit对象,从中获取我们希望的数据(如用户登陆注册信息),而visit是保存在session还是application或request只需要配置既可。
      UI界面
      JSF和Struts一样,除了JavaBeans类之外,还有页面表现元素,都是是使用标签完成的,Struts也提供了struts-faces.tld标签库向JSF过渡。
      使用Struts标签库编程复杂页面时,一个最大问题是会大量使用logic标签,这个logic如同if语句,一旦写起来,搞的JSP页面象俄罗斯方块一样,但是使用JSF标签就简洁优美:
    <jia:navigatorItem name="inbox" label="InBox"
      icon="/images/inbox.gif"
      action="inbox"
      disabled="#{!authenticationBean.inboxAuthorized}"/>
      如果authenticationBean中inboxAuthorized返回是假,那么这一行标签就不用显示,多干净利索!
      先写到这里,我会继续对JSF深入比较下去,如果研究过Jdon框架的人,可能会发现,Jdon框架的jdonframework.xml中service配置和managed-bean一样都使用了依赖注射,看来对Javabean的依赖注射已经迅速地成为一种新技术象征,如果你还不了解Ioc模式,赶紧补课。

    JSF在很大程度上类似Struts,而不是类似Tapestry,可以说是一种Struts 2.0,都是采取标签库+组件的形式,只是JSF的组件概念没有象Struts那样必须继承ActionForm的限制;JSF在事件粒度上要细腻,不象Struts那样,一个表单一个事件,JSF可以细化到表单中的每个字段上。
      JSF只有在组件和事件机制这个概念上类似Tapestry,但是不似Tapestry那样是一个完全组件的框架,所以,如果你做一个对页面要求灵活度相当高的系统,选用Tapestry是第一考虑。
      Struts/JSF则适合在一般的数据页面录入的系统中,对于Struts和JSF的选用,我目前个人观点是:如果你是一个新的系统,可以直接从JSF开始;如果你已经使用Struts,不必转换,如果需要切换,可以将JSF和Tapestry一起考虑。
      另外,JSF/Tapestry不只是支持Html,也支持多种客户端语言如WML或XUI等。
      这三者之间关系:如果说Struts是左派;那Tapestry则是右派;而JSF则是中间派,中庸主义是SUN联盟的一贯策略。

  • DF XI 3.0 Performance Tuning

    Hi,
    I have installed DF XI 3.0 on a 64 bit server with the 64 bit install. There is a huge performance difference between the 32 bit XI R2 DF versus the DF XI 3.0 64 bit version - where the 64 bit XI 3.0 is much slower compared to XI R2.
    Webi reports that use the new DF XI 3.0 run atleast 500 % slower than the R2 based queries.
    I tired increasing the Javaservicedebug for Repository, Designer to 1 GB of RAM - but that hasn't made any difference to the performance.
    Are there any known issues with Performance on XI 3.0? Any tuning on parameters can help improve the gap?
    Thanks,
    Siva.

    Hi Siva,
    To analyze you issue, can you provide the following information?:
    - Data Federator version
    - Data Federator JDBC driver version
    You can get this information in Universe Designer when you test the connection to Data Federator.
    We also need:
    - BOE version
    - content of the jdbc.sbo file: this file contains the configuration information to connect to DF from a BOE application (driver URL template). The exact path can be found in the BOE documentation or Data Federator user guide.
    When you say that the DF XI 3.0 is much slower than DF XI R2, is it true whatever query you run?
    I see two main factors that can impact performance:
    - You did not refresh statistics on the new DF XI 3.0 installation. The optimizer cannot build the best execution plans.
    - The configuration in jdbc.sbo is such that you do not use the optimal (corba) communication layer.
    If you have DF XI 3.0 (12.0.0.0), I suggest first to upgrade to last service pack and fix pack available: currently DF XI 3.0 SP1 FP1 (12.1.1.0). Many performance improvements have been made since 12.0.0.0.
    Please read carefully the user documentation on how to configure BOE to connect to Data Federator.
    If after upgrading to DF XI 3.0 SP1 FPx and refreshing statistics you still face performance issue then could you:
    1. Run your report on DF XI R2, look in DF Administrator -> Administration -> Query Manager -> Query History: take the queries submitted to the sources.
    2. Do the same on DF XI 3.0 SP1 FPx.
    3. Attach the results to this thread: DF query + submitted queries for each case.
    Hope this helps,
    Mokrane
    Mokrane Amzal
    Software Development Manager
    SAP BusinessObjects Divison

  • Performance Issues in Text query.

    Hi,
    We are doing a text mining on a column which has been indexed as a "MULTI_COLUMN_DATASTORE" on two CLOB fields.
    While searching on this column, we face performance issues. The tables (both TABLE 1 and TABLE2) contains more than 46 million records. The query takes more than 10 minutes to execute.
    This is the query used:
    SELECT TABLE1.COLUMN1
    FROM TABLE1, TABLE2
    WHERE CONTAINS
    (TABLE2.CLOB_COLUMN,
    '(((({TEMPERATURE} OR {TEMP} OR {TEMPS} OR {THERMAL}) OR ({ENGINE} OR {ENG} OR {ENGINES})) AND (({SENSOR} OR {PROBE} OR {SEN} OR {SENSORS} OR {SENSR} OR {SNSR} OR {TRANSDUCER}))) AND (({INSTALL} OR {INST} OR {INSTALLATION} OR {INSTALLED} OR {INSTD} OR {INSTL} OR {INSTLD} OR {INSTN}) OR ({REMOVED} OR {REMOVAL} OR {REMOVE} OR {REMVD} OR {RMV} OR {RMVD} OR {RMVL}) OR ({REPLACED} OR {R+R} OR {R/I} OR {R/R} OR {REPL} OR {REPLACE} OR {REPLCD} OR {REPLD} OR {RM/RP} OR {RPL} OR {RPLCD} OR {RPLCED} OR {RPLD} OR {RPLED}) OR ({INOPERATIVE} OR {INOP}) OR ({FAILURE} OR {FAIL} OR {FAILD} OR {FAILED} OR {FAILR}) OR ({CHANGE} OR {CHANGED} OR {CHG} OR {CHGD} OR {CHGE} OR {CHGED}))) AND (({PRESSURE} OR {PRES} OR {PRESR} OR {PRESS} OR {PRESSURES} OR {PRESSURIZATION} OR {PRESSURIZE} OR {PRESSURIZED} OR {PRESSURIZING} OR {PRSZ} OR {PRSZD} OR {PRSZG} OR {PX})) NOT ({CARRIED} OR ({COOLANT} OR {COLNT}) OR ({DISPLAYED} OR {DSPLYD}))'
    ) > 0
    AND TABLE1.COLUMN1 = TABLE2.COLUMN1
    AND TABLE1.COLUMN2 = TABLE2.COLUMN2.
    We created the index using the following procedure:
    begin
    ctx_ddl.create_preference('my_alias', 'MULTI_COLUMN_DATASTORE');
    ctx_ddl.set_attribute('my_alias', 'columns', 'column1, column2, column3');
    end;
    create index index_name
    on table_name(column1)
    indextype is ctxsys.context
    parameters ('datastore ctxsys.my_alias');
    Please let me know if there are any optimization techniques that can be used to tune this query.
    Also, I would like to know if using "MULTI_COLUMN_DATASTORE" would cause performance issues. Will Query REWRITE improve the performance in this case?
    Thanks in Advance!

    What happens if you remove the join and just run the query against TABLE2?
    Try it without the join, and just fetch the first 100 records (or something) from the query and see how that performs.
    Have you optimized the index? Always worth doing after an index creation on a large table, especially as you've used the default index memory setting for the index.

Maybe you are looking for

  • I need to reformat my old computer hard drive, I don't have any disks

    how do I reformat my old MAC book 's hard drive, if I don't have the disks for the operative system?

  • My IMAC freezes just as I try to watch a video in FireFox

    My IMAC freezes just as I try to watch a video in FireFox. and every time I must force restart  to fix it... I would appreciate if somebody help me

  • Accessing Social Security web site

    I suddenly cannot access the social security web site, both its old url and its new url. I have tried to change my dns server. I can get to everything else. I live in Germany. This is a problem with both safari and firefox. My ipad can't get there ei

  • InDesign CS5 ME English way Page Layout

    Hi, we started using InDesign CS5 ME in our Students association for our Journal, but we faced problems with English Layout pages. I explain: InDesign ME wants to put first page on the left, but we need to put it on the right because our Journal is i

  • How to cross two tables?

    Greetings community, This is totally beginner's question, so accept my apology for bothering you with such a basic thing. At first I blamed Microsoft for giving us LINQ that was so easy to use and on the other side much slower intellisense in SSMS wh