tags:

views:

85

answers:

1

Hi

I have problems running JSF in an OSGi environment. I am using jetty web container and equinox to provide the OSGi functionality. The structure of my application is as follows: The first bundle has all the JSF libs, web.xml and a config.xml. It looks as the following:

                       bundle1
                       ----src/main/java
                       -------de/package
                       ----------Activator.java
                       ----------JSFResolver.java
                       ----src/main/resource
                       ------ WebContent
                       ----------META-INF
                       -------------face-config.xml
                      --------------web.xhtml
                       ----------start.xhtml
                      -----------include.xhtml
                      ----libs (containing all JSF required Jars)

The structure of the second bundle is as follows:

                       bundle2
                       ---src/main/java
                       ------de/package
                       ----------Bean.java
                       ---src/main/resource
                       ------META-INF
                       ---------face-config.xml
                       ------WebContent
                       ---------index.xhtml

When running the application of equinox, the bundle1 is the main bundle where all the browser requests are sent to. In the second bundle, the 'index.xhtml' file can be retrieved the by first bundle upon request. The 'index.xhtml' in bundle 2 gets its values and properties from the 'Bean.java' in bundle 2. The problem comes when i request the 'index.xhtml', the Bean.java class is not found. I think this is because the class loader of bundle1 cannot find it, it has no knowledge of it. So i would like to ask if anyone knows how to solve this problem. If so please do assist me, i have tried all the possibilities i had..

Is it infact possible to have JSF run on multiple bundles using the same FaceletsContex? Can i be able to have seperate faces-config.xml files in each bundle, which can all be connected other faces-config.xml in other bundles? Can anyone please provide me a solution. Sample code would help.

thanks workspace_current.rar Arnold

A: 

If any one is interested in the answer, in this case, the faces-config.xml is of no use. So i had to use the plug-in.xml file to register all my beans across all plug-in projects. I created an extension point in the main plug-in, which other plug-ins could register their Beans as extension. I had to override the managedBean class of JSF for it to be able to read the bean properties from extension point rather than from the faces-config.xml. So during runtime, the application reads all extensions registered in the managedBeans extension point, and then creates all the required bean instances from all plug-ins. Therefore the error will no longer be there. If anyone wants to implement JSF in such a structure, you should know that almost all the functionality in the faces-config.xml will have to be moved to the plug-in.xml of the plug-ins, this includes the navigation rules aswell. One has to do alot of customizations but at the end, you get a nice modular JSF application running on equinox, without having to embed it in a .WAR file.. which seems to be very advantageoous.

Arnold