2012-09-14 18 views
5

que he visto alguna respuesta similar a esta pregunta tal vez, pero siento que mi situación es diferente. Estoy desarrollando una aplicación MVC primavera trabajando muy bien hasta ahora, es decir Incluí API hadoop en mi proyecto, al incluir a Hadoop esta excepción comenzó a suceder cuando estoy tratando de abrir la página del panel inicial que había trabajado anteriormente:JSP excepción servlet

java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ 
ServletContext;)Ljavax/servlet/jsp/JspApplicationContext; 
org.apache.jsp.ServerInfo_jsp._jspInit(ServerInfo_jsp.java:63) 
org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) 
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:158) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:9 

Aquí es cómo mi dependencia hadoop parece:

<dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-client</artifactId> 
      <version>0.23.1-mr1-cdh4.0.0b2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.hadoop</groupId> 
      <artifactId>hadoop-core</artifactId> 
      <version>0.23.1-mr1-cdh4.0.0b2</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.mortbay.jetty</groupId> 
        <artifactId>jetty</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.servlet</groupId> 
        <artifactId>servlet-api</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

Una vez agrego esto a mi aplicación ya no utilizable y, naturalmente, es sin estos dependecies cosas funcionan muy suave. ¿Que me estoy perdiendo aqui?

Respuesta

5

creo que su problema es que hadoop se incluye una versión de la API de servlets que viene antes de la "correcta" API servlet en la ruta de clase. Hadoop tiene dependencias en Jetty y, a su vez, jetty intentará incluir una API de servlet.

Tengo un proyecto con una configuración muy similar, Spring MVC y Hadoop. Tengo las exclusiones siguientes para la dependencia de hadoop. Tenga en cuenta que esto puede variar ligeramente dependiendo de su distribución de hadoop, estoy usando cloudera's. Desde el contenedor de servlets está utilizando enviará generalmente con su propia dependencia javax.servlet, su exclusión tiene que coger este caso. Sólo he probado la configuración más adelante con embarcadero:

  <dependency>  
       <groupId>org.apache.hadoop</groupId> 
       <artifactId>hadoop-core</artifactId> 
       <version>${hadoop.version}</version> 
      <exclusions> 

      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-util</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jsp-2.1</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jsp-api-2.1</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>servlet-api-2.1</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>javax.servlet</groupId> 
       <artifactId>servlet-api</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>javax.servlet.jsp</groupId> 
       <artifactId>jsp-api</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>tomcat</groupId> 
       <artifactId>jasper-compiler</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>tomcat</groupId> 
       <artifactId>jasper-runtime</artifactId> 
      </exclusion> 
      <!-- other exclusions snipped for brevity --> 
1

Recientemente tuve una experiencia similar con hadoop núcleos 1.2.1 en mi aplicación web. En la parte superior de las dependencias Paul Sanwald indicado, que excluyen algunos dependendencies org.eclipse.jetty:

  <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-server</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-servlet</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-client</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-plus</artifactId> 
      </exclusion> 

No está completamente claro si cada uno de estos tenían que ser excluidos, pero quería estar seguro sin dependencias que no sean necesarios estaban recibiendo en - estoy usando Tomcat, que proporciona bibliotecas JSP y servlets. embarcadero en servlet definitivamente tenía que ir.

Cuestiones relacionadas