When we create a JSF page, a client request allows generation of HTML dynamically using a combination of java code and HTML. Can we introduce hooks in the HTML page using JSF framework, that allow server to update the HTML page based on events occurring at the server?
You can have a look at Seam (see this article for a discussion to use Seam with JSF and AJAX).
When I used Seam the last time, it was pretty slow, though. You may want to create your own JSF component that generates JavaScript (for example using jQuery as explained in this article).
IceFaces has IcePush and PrimeFaces has p:push.
According to other's experiences, the IceFaces one seems much easier to setup and run. I don't have experience with it, but my experience with the PrimeFaces one was not so good, because Atmosphere, which it is using under the covers, isn't very pretty to setup. It's not clearly documented (comes along with a bunch of JAR's whose composition depends on the servletcontainer used, it was not immediately clear which ones I should include/omit for Tomcat and Glassfish) and it has some problems at certain serverconfigs (couldn't get it ever to run on Tomcat). That was unfortunate, because Atmosphere looks pretty awesome on paper. Things may have changed/improved since then.
Alternatively, you can also use polling instead of pushing. Pretty much every ajaxical JSF component library has such a poll component which is relatively easy to setup.
Simplest for you can be introduction of ajax4jsf library's "poll" component: https://ajax4jsf.dev.java.net/nonav/documentation/ajax-documentation/entire.html#d0e1955
It will not need application reconfiguration and big changes in JSF page (only adding a4j:poll component)
It worked very good in couple of my projects.
You can't push anything. You need to poll data from your client code. Web components create the page and then terminates. It is not intended to stay running looking for some kind of new data to push it to the client.
Maybe your application isn't easy to write as a web app. I would try an applet connected to a server port to receive new events maybe using JMS. See this article http://it.toolbox.com/blogs/enterprise-web-solutions/applet-and-jms-using-glassfish-and-jdk-6-34816