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