Sure. I will send an update on the progress soon.

On Mon, Jul 21, 2014 at 12:46 PM, Sagara Gunathunga <[email protected]> wrote:

>
> Hi Nasmin,
>
> Can you please send a mail to architecture@ list about your progress,
> current status, architectural changes etc.
>
> Thanks !
>
> On Wed, Jul 9, 2014 at 5:59 PM, Chamil Jeewantha <[email protected]> wrote:
>
>> Hi All,
>>
>> I have check the source code with Nasmin and found,
>>
>> the JaggeryAsyncServlet is already registered before it does
>> programatically because JaggeryAsyncServlet class is automatically added to
>> all the Webapp Contexts because of the @WebServlet annotation.
>>
>>
>> @WebServlet(name = "JaggeryAsyncServlet", urlPatterns = "/*",
>> asyncSupported = true)
>>
>> Since this JaggeryAsyncServlet is added selectively (only for the Jaggery
>> apps), The @WebServlet should be removed.
>>
>> Regards,
>>  Chamil
>>
>>
>>
>>
>> On Tue, Jul 1, 2014 at 12:10 AM, Mohamed Nasmin <[email protected]>
>> wrote:
>>
>>> After some reading I found the above null pointer comes when we adding
>>> the context listener BEFORE_START_EVENT occurs. So I changed the event to
>>> STARTING. Now without any error the jaggery context listener added to the
>>> standard context.
>>>
>>> But when access the sample tomgery application through URL I got this
>>> error. When I debug this[1] I found appConfigs is null. But could not find
>>> how it happened. Thanks in advance.
>>>
>>> *Code : *
>>>
>>> protected void service(HttpServletRequest request,
>>>                            HttpServletResponse response) throws
>>> ServletException, IOException {
>>>         JaggeryAppConfigs appConfigs =
>>> JaggeryAppConfigs.getInstance(request.getServletContext());
>>>         request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED",
>>> true);
>>>         AsyncContext asyncCtx = request.startAsync();
>>>         asyncCtx.addListener(new JaggeryAsyncListener());
>>>         asyncCtx.setTimeout(appConfigs.getServletTimeout());
>>>         appConfigs.getServletExecutor().execute(new
>>> JaggeryAsyncRequestProcessor(asyncCtx));
>>>     }
>>>
>>> *Exception :*
>>>
>>> java.lang.NullPointerException
>>>     
>>> org.jaggeryjs.apps.JaggeryAsyncServlet.service(JaggeryAsyncServlet.java:23)
>>>     javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>>>     org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>>>
>>> [1]
>>> https://github.com/ruchiraw/jaggery/blob/master/components/jaggery-core/org.jaggeryjs.apps/src/main/java/org/jaggeryjs/apps/JaggeryAsyncServlet.java
>>>
>>>
>>> On Sun, Jun 22, 2014 at 5:54 AM, Chamil Jeewantha <[email protected]>
>>> wrote:
>>>
>>>> Hi Nasmin,
>>>>
>>>> the Null Pointer Exception (NPE) comes from the line
>>>>
>>>> registration.setAsyncSupported(true);
>>>>
>>>> Which means "registration" object is null. The responsible line of
>>>> assigning this variable is the line 25.
>>>>
>>>> ServletRegistration.Dynamic registration = servletContext.addServlet(
>>>>
>>>>
>>>>
>>>>                 JaggeryAsyncServlet.NAME, JaggeryAsyncServlet.class);
>>>>
>>>>
>>>>
>>>>
>>>> servletContext.addServlet javadoc[1] says,
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> a ServletRegistration object that may be used to further configure the 
>>>> registered servlet, or *null** if this ServletContext already contains a 
>>>> complete ServletRegistration for the given **servletName*
>>>>
>>>>
>>>>
>>>>
>>>> For this case you can start debug by two points.
>>>>
>>>> 1. debug JaggeryContextListener
>>>> 2. Debug with tomcat source - servletContext.addServlet method to see why 
>>>> it returns null here.
>>>>
>>>>
>>>> [1] 
>>>> http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#addServlet(java.lang.String,
>>>>  java.lang.Class)
>>>>
>>>>
>>>>
>>>> On Sat, Jun 21, 2014 at 10:08 PM, Mohamed Nasmin <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> @Ruchira
>>>>> I will debug the jars that we use in the tomgery app deployment and
>>>>> update with the results.
>>>>>
>>>>> @Dilshan
>>>>> I am using that JaggeryContextListener in a jar which is created by
>>>>> Ruchira. You can find the source code of that jar here[1].
>>>>>
>>>>> @Dakshika
>>>>> With the integration with JSR-223, Jaggery will use Nashorn from JDK8
>>>>> onwards and will fallback to JDK's embeded Rhino version with JDK7 or
>>>>> below. With the above Jaggery core minimisations, a Jaggery app can be 
>>>>> even
>>>>> deployed on top of tomcat, subjecting to a WEB-INF directory which 
>>>>> contains
>>>>> jaggery core jars and web.xml. For more details please refer this link[2].
>>>>>
>>>>> [1]
>>>>> https://github.com/ruchiraw/jaggery/blob/master/components/jaggery-core/org.jaggeryjs.apps/src/main/java/org/jaggeryjs/apps/JaggeryContextListener.java
>>>>> [2] http://osdir.com/ml/carbon-wso2-architecture/2014-06/msg00000.html
>>>>>
>>>>>
>>>>> On Sat, Jun 21, 2014 at 9:46 PM, Dilshan Edirisuriya <[email protected]
>>>>> > wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Whats there at line 27 of JaggeryContextListener.java? Where can we
>>>>>> find the source for this?
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Dilshan
>>>>>>
>>>>>>
>>>>>> On Sat, Jun 21, 2014 at 1:31 PM, 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.
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Dev mailing list
>>>>>>> [email protected]
>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Dilshan Edirisuriya
>>>>>> Senior Software Engineer - WSO2
>>>>>> Mob: + 94 777878905
>>>>>> http://wso2.com/
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> [email protected]
>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> K.D. Chamil Jeewantha
>>>> Associate Technical Lead
>>>> WSO2, Inc.;  http://wso2.com
>>>> Mobile: +94716813892
>>>>
>>>>
>>>
>>
>>
>> --
>> K.D. Chamil Jeewantha
>> Associate Technical Lead
>> WSO2, Inc.;  http://wso2.com
>> Mobile: +94716813892
>>
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> Sagara Gunathunga
>
> Senior Technical Lead; WSO2, Inc.;  http://wso2.com
> V.P Apache Web Services;    http://ws.apache.org/
> Linkedin; http://www.linkedin.com/in/ssagara
> Blog ;  http://ssagara.blogspot.com
>
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to