5 Replies Latest reply on Jul 5, 2004 3:37 AM by aloubyansky

    WebApp deployment in JBoss 3.2.3 and 3.2.5

    varshney

      Hi All,

      I am new to JBoss 3.2.5

      I wrote a web app (which uses Jasper reports) and packaged it into an ear and then deployed it on JBoss 3.2.3 and it works fine. The Web app is a normal webapp having jsp and servlets (no struts or any EJBs)

      I downloaded JBoss 3.2.5 and then tried deploying the same ear on JBoss 3.2.5 and found it to crash giving me a java.lang.NoSuchMethodError for some method from Jasper reports(Please see the bottom of the mail for a full stack trace)

      I have included the jasperreports.jar, jasper-compiler.jar and jasper-runtime.jar in the WEB-INF/lib folder in my webapp.

      My question is : Why such a different behavior of the same ear file on 3.2.3 and 3.2.5? Is it beacuse 3.2.3 has Tomcat 4.1.29 and 3.2.5 had Tomcat 5.0.6 embedded in it? What do I need to do to make my web app work on JBoss 3.2.5 ?

      My second question is...Doesn't JBoss have the Jasper libraries by itself? Do I explicitly need to add the jasper libraries into my app?

      Lastly I found that 3.2.3 had a javax.servlet.jar in the $JBOSS_HOME/server/default/lib. This is missing in JBoss 3.2.5. Then where does JBoss 3.2.5 get the JSP/Servlet classes from?

      I am working on Windows 2000 SP4.

      Please do reply to this or mail me at anuragvarshney@gmail.com if you can give any pointers.

      Thanks and Regards,
      Anurag Varshney

      ----------------- STACK TRACE -----------------
      14:20:13,281 ERROR [Engine] ApplicationDispatcher[/myContext] Servlet.service() for servlet ReportPane threw exception
      java.lang.NoSuchMethodError: org.apache.jasper.runtime.JspRuntimeLibrary.include
      (Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;
      Ljava/lang/String;Ljavax/servlet/jsp/JspWriter;Z)V
      at jsp.MenuPane._jspService(Unknown Source)
      at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
      at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
      at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
      at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
      at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
      at com.myapp.servlets.MyWebRequestInfo.forward(MyWebRequestInfo.java:319)
      at com.myapp.servlets.MyControllerServlet.doPost(MyControllerServlet.java:976)
      at com.myapp.servlets.MyControllerServlet.doGet(MyControllerServlet.java:217)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:72)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
      at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:275)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
      at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
      at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
      at java.lang.Thread.run(Thread.java:536)

        • 1. Re: WebApp deployment in JBoss 3.2.3 and 3.2.5
          myname

          Hi,

          I found that in JBoss 3.2.4 and therefore also may be in 3.2.4 some functions will only work with a 1.4.x Java. This is in contrast to JBoss' statement on 1.3.1. May be you deployed on Java 1.3.1?

          Volker

          • 2. Re: WebApp deployment in JBoss 3.2.3 and 3.2.5
            varshney

            I am on Java 1.4.2_04

            JDK details :
            java version "1.4.2_04"
            Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
            Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)

            What do I do now?

            • 3. Re: WebApp deployment in JBoss 3.2.3 and 3.2.5
              aloubyansky

              This is because of conflicting jasper versions. In 3.2.5 servlet and jasper related classes are in Tomcat's sar.

              • 4. Re: WebApp deployment in JBoss 3.2.3 and 3.2.5
                varshney

                Thanks a lot Loubyansky.

                Apparently the problem is that I am using an older verion of jasper Report while JBoss 3.2.5 has a newer version.

                The Jasper Version I am using has a method called include with signature:
                public static void include(HttpServletRequest request, HttpServletResponse response, String relativePath, JspWriter out, boolean flush)

                while the new Jasper with JBoss 3.2.5 has the method with signature : public static void include(ServletRequest request, ServletResponse response, String relativePath, JspWriter out, boolean flush)

                Since my code is passing HttpServletRequest and HttpServletResponse instead of ServletRequest and ServletResponse, JBoss is giving the exception of java.lang.NoSuchMethodError

                Can I make sure that the libraries from my web-app are taken first and then the JBoss specific libraries?

                What do I need to do to make sure my jars come first in the classpath?

                Thanks in advance,
                AnuragV

                • 5. Re: WebApp deployment in JBoss 3.2.3 and 3.2.5
                  aloubyansky

                  You need to use scoped classloader repository. It can be configured in jboss-app.xml for EARs, jboss-web.xml for WARs, jboss.xml for EJBs and jboss-service.xml for SARs. Have a look at their DTDs.

                  An example of loader repository

                  <loader-repository>jboss.test.classloader:loader=concurrentloader.ear</loader-repository>


                  Probably, for WARs you will also need to use
                  <class-loading java2ClassLoadingCompliance='false'>
                  to load classes from the WAR first.