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 <cha...@wso2.com> 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 <nasmin1...@gmail.com>
> 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 <cha...@wso2.com>
>> 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 <nasmin1...@gmail.com>
>>> 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 <dils...@wso2.com>
>>>> 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 <nasmin1...@gmail.com>
>>>>> 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
>>>>>> Dev@wso2.org
>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Dilshan Edirisuriya
>>>>> Senior Software Engineer - WSO2
>>>>> Mob: + 94 777878905
>>>>> http://wso2.com/
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Dev mailing list
>>>> Dev@wso2.org
>>>> 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
> Dev@wso2.org
> 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
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to