ICEsoft is proud of its new ACE library and the advancements it represents to the open source community. In constructing the ACE library, ICEsoft sourced components from the very best open source solutions we could find. We integrated popular component elements from PrimeFaces, jQuery and YUI projects into the ICEfaces framework and combined them within our own Advanced Component Environment (ACE). We improved upon the components, adding features, fixing bugs and constructing a comprehensive QA process around them. We then re-released everything back to the open source community under the Apache 2 license so others can benefit and carry the work forward. The net result is a high-quality, industry-leading library that can interoperate with one of the industry's most popular application frameworks.
This FAQ has been assembled to address some of the false claims and misrepresentations currently being made about the ACE library and its origins with respect to PrimeFaces.
- What is ICEsoft’s strategy as it pertains to third party technologies?
- Why did ICEsoft fork PrimeFaces components?
- Why integrate PrimeFaces and not some other third party JSF library?
- Could ICEsoft have integrated PrimeFaces components, as is, and retained the original library and names?
- Did ICEfaces copy PrimeFaces code line-by-line and rename packages, or were there other code changes introduced?
- What is the nature of the changes ICEsoft made to the PrimeFaces library?
- What are some examples of the feature enhancements added to the PrimeFaces components?
- How does jQuery technology fit into all of this?
- Do the ACE components provide proper attribution to the original developers?
- Why did ICEsoft fork PrimeFaces 2.X instead of 3.X?
- By integrating third party technologies such as PrimeFaces, is ICEsoft failing to innovate?
What is ICEsoft’s strategy as it pertains to third party technologies?
A major part of ICEsoft’s strategy is to identify best-in-class open source technologies and integrate them into the ICEfaces framework, if we believe their inclusion represents material value to our development community. This is made easier with the capabilities of JSF 2.X. By not having to re-invent the wheel every time, we can have our resources focus on adding new features, resolving important bug fixes, and providing comprehensive certification and testing across the matrix of ICEfaces’ supported platforms. These innovations and advancements are returned to the community through open source licenses such as Apache 2, so that others can build upon them and further advance the state of the art within the industry.
Why did ICEsoft fork PrimeFaces components?
From late 2010 through mid 2011 one of the more prominent requests that we received from our users was to find a way to integrate elements of the jQuery libraries so that they could work within the ICEfaces framework. As we investigated the possibilities, two things became clear. First, Prime Technology had done a good job with their PrimeFaces 2.X open source library of wrapping jQuery and YUI components. It represented an excellent starting point and was available in open source under the Apache 2 license. The second conclusion reached was that successful integration was going to require code modifications and some refactoring the PrimeFaces components. The changes were required so the components could take advantage of framework features such as Automatic Ajax and Ajax Push, to resolve interoperability bugs with the wide range of platforms we were committed to support (such as IE7, WebSphere Portal, etc.) and also so they could be incorporated into the various build and QA processes that ICEfaces utilizes. We initially approached Prime Technology with the hope of sponsoring the PrimeFaces project, and working with them to resolve some of the technical issues around a possible integration. After 4-5 months of discussion, we were advised that any code contributions made that related to the integration with the ICEfaces framework would not be accepted.
In order to meet our support obligations and committed service level agreements, it is necessary that ICEsoft retain the ability to make code changes to whatever technology we integrate, so that we can resolve bugs and affect solutions in a timely manner. We needed some level of confidence that these changes could be contributed back to the parent project with a reasonable chance that the code contributions we make would be adopted back into the original project. Based on the feedback from Prime Technology we made the decision to proceed with forking some of the PrimeFaces 2 components and combine them with other components from jQuery, YUI and ICEsoft to collectively form the ACE library. PrimeFaces was advised of our decision to fork the library and the rational behind it in June of 2011.
Why integrate PrimeFaces and not some other third party JSF library?
We actually sourced technology from three external libraries: PrimeFaces, YUI, and jQuery (plus several jQuery plugins). We felt that the PrimeFaces 2 JSF-component wrappers for jQuery and YUI offered the best starting-point for development, and chose to leverage it.
Could ICEsoft have integrated PrimeFaces components, as is, and retained the original library and names?
Unfortunately, no. Changes had to be made for the PrimeFaces components so they could interoperate within our framework, and take advantage of our core framework features such as Automatic Ajax and Ajax Push. We were also not integrating the full library. Our objective with the ACE library was to source the best open source component technologies we could find, regardless of the source, and integrate them under a common umbrella for the convenience of our users. We chose to integrate only a select number of the available PrimeFaces components and combine them with our own custom components and other “best-of-class” third party components from other popular libraries. We had to harmonize the component package and class names, APIs, taglib naming conventions and ThemeRoller component skinning implementations across these multiple library components in order to provide a seamless, unified experience for our developers. In addition, the components needed to support our Advanced Component Environment code generation technology and leverage our automated build and QA environments. It is much more efficient and convenient for our users to deal with one integrated library than it is for them to have to manage five or six different libraries of significantly smaller size.
Did ICEfaces copy PrimeFaces code line-by-line and rename packages, or were there other code changes introduced?
Of the 28 PrimeFaces components integrated, 100% were subject to modifications and/or refactoring needed for them to work within the ACE environment (including code generation), the ICEfaces Framework, and our QA processes. Two-thirds of the imported components saw significant code change associated with feature enhancements or bug fixes. There is much misinformation on this issue in the public domain and it stems from a selective comparison made by PrimeFaces of a .java file associated with an accordion panel component, looking at the before and after. This file deals largely with the rendering operation, but most of the code changes implemented by ICEsoft took place in other Class files associated with the components. In some cases, new class files were added, and in others, files were changed. The degree of change implemented was on a case-by-case basis. Interested parties need only to compare the file structures and class file content of a variety of components to see this is the case. <ace.dataTable>, <ace:dataExporter> and <ace:menuBar> are all good examples to examine.
What is the nature of the changes ICEsoft made to the PrimeFaces library?
The changes implemented fall into a number of different categories:
- Changes needed to integrate the components within the ICEfaces framework and our build and QA processes. This applied to 100% of all the imported components.
- Changes related to feature enhancements. Significant feature enhancements were made to a number of the PrimeFaces, YUI, and jQuery components. The most notable being made to the PrimeFaces dataTable component.
- Bug Fixes. A large number of the components either failed, or failed to work in a consistent fashion across our supported platform matrix. The most prevalent issues were related to operation in IE 7/8, Portal operation, and operation with some of the commercial application servers / portal containers that we support.
- All components were augmented with test cases needed to run as part of our automated regression test process.
What are some examples of the feature enhancements added to the PrimeFaces components?
ICEsoft made over 200 code improvements to the integrated PrimeFaces components. These included a number of feature enhancements, as well as bug fixes. One example of the many components to receive feature enhancements is:
- Complete re-write to support a new data model
- Support for multi-column sorting
- Column repositioning via drag and drop
- Stackable column rendering
- User configurability of visible columns, ordering and sorting via TableConfigPanel popup.
- Search / Find functions
- Row Expansion to nested rows or panels
- Improved column / header alignment with scrollable dataTables
- Added ability to control row selection state (selectable, or not, per row)
One example of bug fixes is:
- dataExporter caching previously exported data sets
- dataExporter exporting blank columns when tooltip is present/defined
- dataExporter exporting column content that are set to rendered=false
- dataTable/dataExporter NPE when exporting table using column filtering and pagination
- dataExporter failing to export column headers when using column grouping
- dataExporter failing to export into a browser window
- dataExporter failing to work within a composite component
How does jQuery technology fit into all of this?
Do the ACE components provide proper attribution to the original developers?
The original PrimeFaces files were individually sourced from the Prime Technologies SVN code repository in May of 2011. The source code files properly attribute Prime Technology, in accordance with the Apache 2 license provisions. Prime Technology executives and staff themselves have, in a number of blogs and forum postings, acknowledged that in their opinion the action taken by ICEsoft was legal and in accordance with the Apache 2 license.
Additional acknowledgement and attribution to Prime Technology is also made in ICEsoft’s component FAQ’s and web page library summaries. We believe the level of acknowledgement to be appropriate and reflective of the relative technical contribution within the components themselves. The majority of functionality in the imported PrimeFaces components resides within their jQuery core. A contribution that PrimeFaces themselves fails to showcase.
Why did ICEsoft fork PrimeFaces 2.X instead of 3.X?
By integrating third party technologies such as PrimeFaces, is ICEsoft failing to innovate?
ICEsoft believes that there is no reason to re-invent the wheel, if there is no new innovation to be gained by it. In the case of the PrimeFaces open source library we saw no material innovation to be gained by redeveloping JSF wrappers for the jQuery library. Rather ,we sought to leverage the best available open source solution so that we could apply our resources to innovating elsewhere.
ICEsoft has a very long and rich history of innovation, with a number of patents and patent applications in areas ranging from DOM-based rendering to Ajax Push, and web browser architectures. - intellectual property that has all been made freely available as part of our own open source offerings. Our contributions to advancing the state of the art continues with ICEfaces 3.0 feature enhancements, such as those introduced within the ace data table component.
ICEsoft innovation is further showcased with our latest sponsored open source project, ICEmobile. As developers will experience, ICEmobile solves many of the industry's outstanding challenges associated with the development of web-based mobile applications. Innovation of this sort would not have been available to the community had we not been able to leverage the contribution of open source projects such as jQuery, YUI and PrimeFaces.