2012-08-28 15 views
5

He creado una nueva aplicación empresarial Java EE 6 Enterprise en Netbeans 7.2. Así que tengo tres proyectos:Aplicación empresarial Java EE 6: Advertencia "Dependencia insatisfecha: ningún bean coincide con el punto de inyección" al inyectar un bean

  • EAR
  • EJB
  • GUERRA

En el EJB-proyecto, he creado un simple Bean:

package de.aidaorga.test; 

import javax.ejb.LocalBean; 
import javax.ejb.Stateless; 

@Stateless 
@LocalBean 
public class NewSessionBean2343 { 
} 

en la guerra -Proyecto, he creado un beans.xml en blanco en la carpeta "Páginas web \ WEB-INF":

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 
</beans> 

Y también he creado un servlet simple:

import de.aidaorga.test.NewSessionBean2343; 
import java.io.IOException; 
import javax.ejb.EJB; 
import javax.inject.Inject; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet(name = "NewServlet2343", urlPatterns = {"/NewServlet2343"}) 
public class NewServlet2343 extends HttpServlet { 
    @Inject 
    NewSessionBean2343 newSessionBean2343_1; 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
    } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    } 
} 

Ahora, Netbeans me muestra una advertencia "dependencia: sin frijol coincide con el punto de inyección" para el campo "newSessionBean2343_1" anotado con "@Inject ".

En el momento del despliegue, consigo el excpetion siguiente:

Schwerwiegend: Exception while loading the app 
Schwerwiegend: Exception while loading the app : WELD-001408 Unsatisfied dependencies for type [NewSessionBean2343] with qualifiers [@Default] at injection point [[field] @Inject NewServlet2343.newSessionBean2343_1] 
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [NewSessionBean2343] with qualifiers [@Default] at injection point [[field] @Inject NewServlet2343.newSessionBean2343_1] 
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:311) 
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:280) 
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:143) 
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:163) 
at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:382) 
at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:367) 
at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:380) 
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:199) 
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128) 
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:313) 
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291) 
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259) 
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461) 
at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179) 
at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 
at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
at java.lang.Thread.run(Thread.java:722) 

¿Por qué recibo esta advertencia y cómo me deshago de ella?

Gracias por cualquier ayuda.

Markus

Respuesta

6

Resolví el problema: acabo de olvidar el beans.xml en el EJB-Project. Un beans.xml en un EAR-Project no es suficiente ...

0

Primero de todo esto es sólo una advertencia IDE - lo que cuenta es si su código se compila.

El código no se ve mal, aunque no puedo recordar que alguna vez haya inyectado un frijol dos veces. Pero en mi humilde opinión debería funcionar.

Supongo que Netbeans solo puede validar @Inject, pero no @EJB, esto explicaría la advertencia.

Intenta desplegarlo en un servidor y ver qué sale.

+0

Gracias por su respuesta, he cambiado mi pregunta. El @EJB se elimina ahora y se adjunta la excepción en el momento de la implementación. – user1631581

Cuestiones relacionadas