The RichFaces team and community are happy to announce that RichFaces 4.0.0.Final has been released!! This was a huge effort, but the end result was well worth it. Without further ado, you can download the distribution from our project's download page, and check out our collection of getting started guides including Maven, non-Maven, Ant/Ivy, and GAE. Plus you can now give our components a test drive anytime at our Online Component Showcase demo.
For all the details of what went into this final release please review the jira release notes. We also have the final project release notes for the project available for review.
Why RichFaces?
RichFaces 4 goes beyond simply supporting JavaServer Faces (JSF) 2. It has extended multiple areas of JSF, including usability, performance tuning, dynamic resources, skinning, and component development. This allows users to take full advantage of all the productivity enhancements of JSF 2. Some notable highlights include:
- A full set of Ajax enabled UI components ( Tables, trees, inputs, panels, etc… )
- Client-side validation, expanding JSR 303 Bean Validation all the way to the browser.
- Advanced queueing to match the high performance requirements of real world applications.
- Push component upgrades including Java Message Service (JMS) integrations, and various transport mechanisms based on browser support, including Comet & Web Sockets
- Our own Component Development Kit (CDK).
- Comprehensive documentation covering development best practices, and component details.
- Detailed and automated testing facilities for components, actions, listeners, and pages.
- Broad cross-browser support
- Run anywhere on JBoss AS 6/7, Tomcat 6/7, Glassfish 3.X, GAE, Amazon's Elastic Beanstalk, Cloudbees, on MyFaces or Mojarra
- Tooling support through JBoss Tools, Intellij, NetBeans
- Our awesome and active community at its foundation!!
Our Community
In previous blogs I've talk about about how open source communities really thrive on their community. I've talk about how CR releases can stand for "Community Required" because of how important it is to get that feedback. All I can say is that our community stepped up, and continue to impress! We've seen a huge increase in the feedback, and both veterans and new users giving RichFaces 4 a try and helping us to make it to this point.
There are too many to list out here, but you are all appreciated!! Although, I would like to remind everyone that the JBoss Community Recognition voting ends April 2nd. Please check out the candidates from our community and give them a vote!
Our Quality
Closely related to our community and the feedback we get from them, is our focus on testing. At RichFaces we have prided ourselves on the level of testing, and stability that we have achieved. A big part of that is because of the effort our guys put into it.
Test framework development highlights:
- Metamer - Framework that makes it easy to add new components and test each attribute under different UI templates
- Ajocado now part of Arquillian which allows type safe Ajax with Selenium
- Rush Eye now part of Arquillian helps test regressions by doing a visual comparison of results.
- Partial Google Page Speed and Selenium Integration for client side performance testing
Total Number of Automated Tests: 2350. Multiply this by environment variables like JSF implementation, Application Server, and UI containers and the total number of complete automated tests go to : 2350 x 4 x 2 = 18, 800!! Plus we are adding to it all the time...
Our Documentation
We really wanted to have a focus on complete and quality documentation that would be available to everyone. One of the guys on our team (Sean), really did a great job and focused on the documentation. We have also had some informative additions to our wiki page, and knowledge base from our community, and team.
- Developer Guide: PDF, single HTML, multiple HMTL
- Component Reference: PDF, single HTML, multiple HMTL
- Getting started guides: Maven, non-Maven, Ant/Ivy, and GAE
- Migration Guide 3.3 --> 4.0
- Generated javadoc and vdldoc as well
Want Even More Information
We've got a whole stack of blogs, conference talks, and upcoming publications to keep you busy :-)
- Getting started with RichFaces Push
- RichFaces Showcase on Google App Engine
- RichFaces 4 Client-side Validation
- RichFaces 4 Object Validation
- RichFaces 4 Overview - Input Components
- Talks at JUDCon, and JBoss World in May, plus JSFSummit in June
- Revised Practical RichFaces for 4.0
- RichFaces 4.0 DZone RefCard coming soon!
What's next
That is a wide open question. We're planning to start on a 4.1 version soon with shorter time-boxed release schedules. We'll be discussing this more on the developer forums and team meetings. This release will likely include a variety of new features such as; Mobile/Tablet specific components, HTML5 extensions, new components like the rich:editor and rich:growl and more. Please join in the discussion, and be part of the future of RichFaces!
In other areas of the project:
- Series of
how-to
articles for development with and on the project - Mobile development series on how to build for the mobile web with RichFaces 4
- Add examples, and more details the Migration Guide 3.3 --> 4.0
- Component Sandbox rules, and wiki page updates to help everyone become a component developer guru
- Jira reviews from the past, and future
None of this is possible without you though! We want to hear from you, and if you find an issue, have comments or ideas please let us know through our forums, or our project jira. See our Project Calendar and the Meeting Information page for more details, agendas, and minutes if you want to get involved more!
[Project Site] [Downloads] [JIRA] [User Forums] [Design Forums] [RichFaces Twitter]
What did you mean by ? AFAIK, EC2 is a virtual machine which you can ssh to. So doesn't make any sense, at least in my opinion.
Does RichFaces 4.0.0 run on GF 3.0 and 3.1?
Good catch Thai! I just updated entry with Glassfish, and changed EC2 --> Amazon's Elastic Beanstalk
Great release! Congratulations!
One question: where can I find more information about CDK?
Thanks
To Ben:
I have removed your posts because of your language, not your content. I believe your points were:
1) I'm not sure where you are seeing 900 issues? RichFaces jira is showing around 350 open jira's in the 4.Next releases. Out of these there is about 90 marked as bugs, of variable severity. We track all of our enhancements, tasks, and todo's here as well as feature requests. Perhaps that is where you are mistaken?
If you are referring to jira's resolved in the release, then I'm not sure what the issue is. This was a major release, that spanned more than a year. We created, resolved, reviewed, and updated a lot in that time.
2) I appreciate the bug you entered RF-10823, and saw that you just joined! I asked in the jira if you could include some more information because I was unable to reproduce the problem.
Please let us know if you find any other issues.
3) Then by all means use PrimeFaces. I'm not sure what your point really is here, but RichFaces and PrimeFaces have had a good relationship in the past, and I have no intension of bashing another project.
-Jay
Be patient, I'm working on CDK documentation and examples, just got more time for this after pre-release development
Great work guys.
When is the complete documentation going to be released. I noticed that some components are not documented such as mediaOutput (I can see it in the java docs). By the way why is the mediaOutput an a4j component and not a rich?
Also the component documentation doesn't list every attribute of the component in a table for easy reference (done for styling however). This documentation layout was great in the 3.x releases.
Cheers
Well, I'm sorry. You are right about the bug count. I was mistakenly only paying attention to the overall open major bug count.
To 2): I'm unable to reproduce this problem today. Maybe you guys fixed it already? That would definitely restore the view I had about your team producing a qualitiy product in a professional environment. I also appreciate that you still respond to the points i made in a admittedly harsh manner.
To 3): No, im not saying that PrimeFaces is better but to me the components just seem a little shinier because it's based on the jQueryUI themeroller. This is not the most important factor when choosing my component library though that is why I was still following the coming and now released RichFaces 4.0. To me simplicity, quality and extensibility together with a clear roadmap of where development is heading come first. And I see that RichFaces 4 has improved a lot on the generated markup, very good work indeed.
Again, apologies for my rants, now let me get my hands on this :)
PS: I forgot how to log on here. It's obviously not the same account as my JBoss one, or have I been deleted? :D
So, the problem still persists I see. I'll try to help you out on JIRA.
Now that the push for the project release is complete, we can take the time for final reviews, and updates in the docs. You may have noticed the docs release version is actually set at CR2. We plan to release the final version of the docs in a couple of week.
The docs should be in good shape though, so thanks for catching the mediaOutput document issue. I've created RFPL-1400 and it will be included in the docs asap.
For the attribute listing we chose not to put the complete listing in the component guide for two reasons. 1) We did not want to duplicate information that is already in the VDL docs, 2) We did not want to bloat the component guide. If you recall from from 3.3 the component sections were huge.
I would like to see linking though - from the components in the guide to the VDL docs. We'll be working on that.
One of the guys is looking into it, and found what may be the issue. We've not fixed it yet be are working on it.
I think those are great criteria when reviewing component suites. Thanks for your comments.
Apology accepted, thanks for writing back in this manner, and discussing the issues more. This is what makes open source software great.
As for your account, no changes were made. This site works with different accounts than JBoss main site. You can reset your password though.
The final version is Mojarra 2.1 friendly?
I'll go ahead a second the request for Themeroller support. It really works great with primefaces.
Yup!
Thanks again for the bug report, this should be resolved up on GAE.
We're just reviewing a little more before resolving the jira. It turns out that it was an issue with Mojarra component id mapping, and how it supports a clustered environment liks GAE.
Thanks for the informative reply with regards to the documentation.
I would just like to make a constructive suggestion that documentation becomes top-priority of all JBoss projects. I would like to see user manuals written early. I'd go as far to say that they could be written before code cutting starts. Once the public API has been designed then it can be verified by writing a good manual. If I don't know how a component is supposed to work I can't use it or test it (easily). In the early release stages you really want as much feedback as possible. I don't want to struggle through java docs and source code to get an idea of how something works.
Once again, thanks for all the hard work. Everyone on the Richfaces team has proved again that they are the industry leader.
Probably not easy to catch that one but shouldn't this be fixed in Mojarra instead of RichFaces?
Yup, already filed with Mojarra - JAVASERVERFACES-1886
Sadly, the Richfaces PUSH capability is bound to HornetQ JMS implementation, because the others DON'T accept using the javax.jms.Connection.setClientId() in the business logic. This doesn't work on glassfish 3.1 using their JMS embedded server.
WARNING: MQJMSRA_DC2001: Unsupported:setClientID():inACC=false:connectionId=6046697373872048384 SEVERE: java.lang.ExceptionInInitializerError at org.richfaces.application.push.impl.jms.PushContextFactoryImpl.getPushContext(PushContextFactoryImpl.java:54) at org.richfaces.application.push.TopicsContext.lookup(TopicsContext.java:74) at com.dotachile.pushmaven.TopicsInitializer.processEvent(TopicsInitializer.java:38) at javax.faces.event.SystemEvent.processListener(SystemEvent.java:106) at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2129) at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:2105) at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:300) at com.sun.faces.config.ConfigManager.publishPostConfigEvent(ConfigManager.java:603) at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:369) at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225) at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:4690) at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:534) at org.apache.catalina.core.StandardContext.start(StandardContext.java:5305) at com.sun.enterprise.web.WebModule.start(WebModule.java:500) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:755) at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1980) at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1630) at com.sun.enterprise.web.WebApplication.start(WebApplication.java:100) at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:286) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370) at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067) at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235) at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:465) at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:222) at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) at com.sun.grizzly.comet.CometEngine.executeServlet(CometEngine.java:444) at com.sun.grizzly.comet.CometEngine.handle(CometEngine.java:308) at com.sun.grizzly.comet.CometAsyncFilter.doFilter(CometAsyncFilter.java:87) at com.sun.grizzly.arp.DefaultAsyncExecutor.invokeFilters(DefaultAsyncExecutor.java:171) at com.sun.grizzly.arp.DefaultAsyncExecutor.interrupt(DefaultAsyncExecutor.java:143) at com.sun.grizzly.arp.AsyncProcessorTask.doTask(AsyncProcessorTask.java:94) at com.sun.grizzly.http.TaskBase.run(TaskBase.java:193) at com.sun.grizzly.http.TaskBase.execute(TaskBase.java:175) at com.sun.grizzly.arp.DefaultAsyncHandler.handle(DefaultAsyncHandler.java:145) at com.sun.grizzly.arp.AsyncProtocolFilter.execute(AsyncProtocolFilter.java:204) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:662) Caused by: javax.faces.FacesException: MQJMSRA_DC2001: Unsupported:setClientID():inACC=false:connectionId=6046697373872048384 at org.richfaces.application.push.impl.jms.PushContextImpl.init(PushContextImpl.java:123) at org.richfaces.application.push.impl.jms.PushContextFactoryImpl.createInstance(PushContextFactoryImpl.java:48) at org.richfaces.application.push.impl.jms.PushContextFactoryImpl.access$000(PushContextFactoryImpl.java:33) at org.richfaces.application.push.impl.jms.PushContextFactoryImpl$PushContextHolder.<clinit>(PushContextFactoryImpl.java:37) ... 58 more Caused by: javax.jms.JMSException: MQJMSRA_DC2001: Unsupported:setClientID():inACC=false:connectionId=6046697373872048384 at com.sun.messaging.jms.ra.DirectConnection._unsupported(DirectConnection.java:982) at com.sun.messaging.jms.ra.DirectConnection.setClientID(DirectConnection.java:487) at org.richfaces.application.push.impl.jms.MessagingContext.start(MessagingContext.java:113) at org.richfaces.application.push.impl.jms.PushContextImpl.init(PushContextImpl.java:117) ... 61 moreThe above problem comes from this line on org.richfaces.application.push.impl.jms.MessagingContext.java, line 110:
//TODO - review try { //durable subscription requires ClientID to be set connection.setClientID(UUID.randomUUID().toString()); } catch (IllegalStateException e) { //ignore - clientId has already been set }maybe this has something to do with the exception on glassfish jms server.
http://old.nabble.com/jms-durable-subscriber-fail-%28Unsupported%3AsetClientID%28%29%3AinACC%3Dfalse%29-td25364251.html