Maven 2, jboss 6, EJB 3

2 respostas
A

Olá Pessoal!

Estou com uma dúvida, estou usando maven2, jboss6 e ejb3, tenho 2 módulos no maven, home(home-web, home-ejb, home-ear) e segurança(seguranca-ejb,seguranca-ear), e dentro do home-web eu preciso injetar o módulo seguranca-ejb:

@EJB(beanInterface = SegurancaBean.class, mappedName = "to2_seguranca/SegurancaBean/local-dev.taskorg.local.SegurancaLocal")
    private SegurancaLocal segurancaBean;

quando eu utilizo compile dentro do POM.xml:

<dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>seguranca-ejb</artifactId>
            <version>${project.version}</version>
            <scope>compile</scope>
        </dependency>

Funciona!

mais quando eu utilizo provided

<dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>seguranca-ejb</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>

Não funciona, a varivel injetada fica nula

retorna o seguinte erro no JBOSS:

21:49:57,817 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/home-web].[Login]] Servlet.service() for servlet Login threw exception: java.lang.ClassNotFoundException: dev.taskorg.local.SegurancaLocal from BaseClassLoader@13c19e3{vfs:///C:/jboss-6.0.0.Final/server/default/deploy/to1_home.ear/home.war/}
	at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:480) [jboss-classloader.jar:2.2.0.GA]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248) [:1.6.0_21]
	at dev.taskorg.servlet.Login.processRequest(Login.java:41) [:]
	at dev.taskorg.servlet.Login.doPost(Login.java:82) [:]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [:1.0.0.Final]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [:1.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.0.0.Final]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [:6.0.0.Final]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [:6.0.0.Final]
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final]
	at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
	at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final]
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final]
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final]
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final]
	at java.lang.Thread.run(Thread.java:619) [:1.6.0_21]

Servlet:

Login.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dev.taskorg.servlet;

import dev.taskorg.ejb.SegurancaBean;
import dev.taskorg.local.SegurancaLocal;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author alexandre
 */
@WebServlet(name = "Login", urlPatterns = {"/Login"})
public class Login extends HttpServlet {

    @EJB(beanInterface = SegurancaBean.class, mappedName = "to2_seguranca/SegurancaBean/local-dev.taskorg.local.SegurancaLocal")
    private SegurancaLocal segurancaBean;

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            String msg = (segurancaBean.validaLogin(request.getParameter("login"),request.getParameter("senha")) ? "Bem Vindo" : "Usuario Invalido");

            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet Login</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>" + msg + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } catch (Exception e) {
            out.println(e.getMessage());
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

POM.xml(do home-web)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <paraent>
        <artifactId>home</artifactId>
        <groupId>dev.taskorg</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>dev.taskorg</groupId>
    <artifactId>home-web</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>home-web Web App</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>seguranca-ejb</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>       


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>6.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <finalName>home</finalName>
    </build>

</project>

Obrigado.

2 Respostas

Ataxexe

O escopo “provided” parte do princípio de que a dependência está no servidor de aplicação. Talvez ele não esteja (por isso funciona com o escopo “compile”, que empacota a dependência junto com o seu projeto).

A

Então mais os 2 pacotes estão no servidor to1_home.ear e to2_seguranca.ear, no jboss5.0.1.GA funcionava normalmente, quando eu mudei para o 6 que parou de funcionar o provided

Valeu cara, se tiver alguma idéia agradeço.

Criado 1 de agosto de 2011
Ultima resposta 2 de ago. de 2011
Respostas 2
Participantes 2