Hi Nasmin,

Best way is to have a look at tomcat source and debug.


On Sat, Jun 21, 2014 at 11:01 AM, Mohamed Nasmin <[email protected]>
wrote:

> According to our earlier conversation I am following the below progression
> to accomplish the project. Sorry for the lengthy email.
>
> *Task1. Check whether the app in the tomcat webapps is jaggery app or not
> before it gets deployed/initialized*
>
> I trigger the BEFORE_START_EVENT by configuring the tomcat lifecycle
> listener with context.xml in the tomcat. The context can listen to the
> lifecycle listener by putting jar inside lib folder of tomcat. That jar
> should contain the tomcat listener. Also we need to define that class in
> the context.xml like below (For more details please refer this mail with
> subject Tomcat Lifecycle listener how to.).
>
> <Listener className="org.jaggery.tomcat.listener.TomcatListener" />
>
> When an application is started to deploy BEFORE_START_EVENT will be
> occurred. we check that event get the standard context of that event. To
> find out whether it is a jaggery context or not we identify the
> jaggery.conf in that app folder.
>
> Code :
>
> public void lifecycleEvent(LifecycleEvent event) {
>
>         String type = event.getType();
>         if (Lifecycle.BEFORE_START_EVENT.equals(type)) {
>             LOGGER.log(Level.INFO, "BEFORE START EVENT triggered.");
>             Lifecycle source = event.getLifecycle();
>
>             if (source instanceof StandardContext) {
>
>                 StandardContext standardContext = (StandardContext) source;
>                 boolean exists = isJaggeryApp(standardContext);
>
>                 if (!exists) {
>                     System.out.println("This is not a Jaggery app");
>                 } else {
>                     System.out.println("This is a Jaggery app");
>                 }
>             }
>         }
>     }
>
>  public boolean isJaggeryApp(StandardContext standardContext) {
>
>         String contextPath = standardContext.getPath();
>         String catalinaPath = System.getProperty("catalina.base");
>
>         try{
>         File file = new File(catalinaPath + File.separator + "webapps" +
> contextPath + File.separator + "jaggery.conf");
>         boolean exists = file.exists();
>         }
>         catch (Exception e){
>             e.printStackTrace();
>         }
>
>         if (!exists) {
>             return false;
>         } else {
>             return true;
>         }
>
>     }
>
> Output:
>
> INFO: Deploying web application directory
> /home/nasmin/tomcat/apache-tomcat-7.0.54/webapps/demo3
> Jun 20, 2014 10:25:40 PM org.jaggery.tomcat.listener.TomcatListener
> lifecycleEvent
> INFO: BEFORE START EVENT triggered.
> This is a Jaggery app
>
> *Task2. How to put the jars in the tomcat that apps can see*
>
> After finding the jaggery app in the tomcat we need to assign some jar
> which will be required to get new jaggery engine. So we can put the in a
> directory in the tomcat and we need to mention that in the
> catalina.properties like below.
>
>
> common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.base}/jaggery/lib,${catalina.base}/jaggery/lib/*.jar,${catalina.home}/jaggery/lib,${catalina.home}/jaggery/lib/*.jar
>
> *Task3. Register a jaggery servlet listener if it is a jaggery app *
>
> Afterwards we need to register our jaggery servlet listener to the jaggery
> app. I did by adding application listener to the jaggery standard context
> and I added application paramaeter which we had in the web.xml. Here I got
> an exception like below. Please advice on this.
>
> Code:
>
>
> standardContext.addApplicationListener("org.jaggeryjs.apps.JaggeryContextListener");
>
> ApplicationParameter applicationParameter = new ApplicationParameter();
> applicationParameter.setName("jaggery.initializer");
> applicationParameter.setValue("server://engines/index.js");
> standardContext.addApplicationParameter(applicationParameter);
>
> ApplicationParameter applicationParameter1 = new ApplicationParameter();
> applicationParameter1.setName("jaggery.development");
> applicationParameter1.setValue("true");
> standardContext.addApplicationParameter(applicationParameter1);
>
> ApplicationParameter applicationParameter2 = new ApplicationParameter();
> applicationParameter2.setName("jaggery.engine.pool.max.active");
> applicationParameter2.setValue("5000");
> standardContext.addApplicationParameter(applicationParameter2);
>
> ApplicationParameter applicationParameter3 = new ApplicationParameter();
> applicationParameter3.setName("jaggery.executor.pool.max");
> applicationParameter3.setValue("5000");
> standardContext.addApplicationParameter(applicationParameter3);
>
> Output:
>
> INFO: Deploying web application directory
> /home/nasmin/tomcat/apache-tomcat-7.0.54/webapps/demo5
> Jun 20, 2014 10:25:39 PM org.jaggery.tomcat.listener.TomcatListener
> lifecycleEvent
> INFO: BEFORE START EVENT triggered.
> This is a Jaggery app
> Jun 20, 2014 10:25:40 PM org.apache.catalina.core.StandardContext
> listenerStart
> SEVERE: Exception sending context initialized event to listener instance
> of class org.jaggeryjs.apps.JaggeryContextListener
> java.lang.NullPointerException
>     at
> org.jaggeryjs.apps.JaggeryContextListener.contextInitialized(JaggeryContextListener.java:27)
>     at
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
>     at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
>     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
>     at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
>     at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
>     at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
>     at
> org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1247)
>     at
> org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1898)
>     at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>     at java.lang.Thread.run(Thread.java:744)
>
> Jun 20, 2014 10:25:40 PM org.apache.catalina.core.StandardContext
> startInternal
> SEVERE: Error listenerStart
>
> I attached the tomcat directory structure for the jaggery app with this
> email. Also we have a remaining task that we need put context parameters in
> a separate property file and make it available for the app deployment. Here
> I hard coded those parameters. Please advice on this issue.
>
> Thanks in advance.
>



-- 

*Ruchira Wageesha**Associate Technical Lead*
*WSO2 Inc. - lean . enterprise . middleware |  wso2.com <http://wso2.com>*

*email: [email protected] <[email protected]>,   blog:
ruchirawageesha.blogspot.com <http://ruchirawageesha.blogspot.com>,
mobile: +94 77 5493444*
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to