Search code examples
javajakarta-eeweb-applicationsglassfishear

Glassfish error while deploying ear web application


I'm walking with this error several weeks, i've never work with java web applications so i'm really lost on this.

My setup is:

  • Glassfish 5.0
  • Netbeans IDE 8.2
  • Java 8 Update 181 (64-bit)
  • Java 10.0.2 (64-bit)
  • Java SE Development Kit 8 Update 181 (64-bit)
  • Java(TM) SE Development Kit 10.0.2 (64-bit)

The error is the following:

Grave:   Exception while deploying the app [ociumfinal-ear] : Cannot resolve reference [Local ejb-ref name=chat.ChatUsers/usuarioEjb,Local 3.x interface =com.eventos.UsuarioFacadeLocal,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session] because there are [2] ejbs in the application with interface com.eventos.UsuarioFacadeLocal. 

Interface(UsuarioFacadeLocal.java):

package com.eventos;

import java.util.List;
import javax.ejb.Local;
import javax.ejb.Remote;

@Local
public interface UsuarioFacadeLocal {

void create(Usuario usuario);

void edit(Usuario usuario);

void remove(Usuario usuario);

Usuario find(Object id);

List<Usuario> findByUsuario(String usuario);

List<Usuario> findAll();

List<Usuario> findAllUsuarioCliente();

List<Usuario> findRange(int[] range);

List<Usuario> findUsuarioLosed(String email);

int count();

}

Implementation(UsuarioFacade.java):

package com.eventos;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;


@Stateless
public class UsuarioFacade extends AbstractFacade<Usuario> implements 
UsuarioFacadeLocal {

@PersistenceContext(unitName = "com.eventos_ocium-ejb_ejbPU")
private EntityManager em;

@Override
protected EntityManager getEntityManager() {
    return em;
}

public UsuarioFacade() {
    super(Usuario.class);
}

@Override
public List<Usuario> findAll(){
    TypedQuery<Usuario> consultaUsuario= em.createNamedQuery("Usuario.findAll", Usuario.class);
    List<Usuario> lista= consultaUsuario.getResultList();
    return lista;
}

@Override
public List<Usuario> findAllUsuarioCliente(){
    TypedQuery<Usuario> consultaUsuario= em.createNamedQuery("Usuario.findAllUsuarioCliente", Usuario.class);
    List<Usuario> lista= consultaUsuario.getResultList();
    return lista;
}

@Override
public List<Usuario> findByUsuario(String usuario) {
    TypedQuery<Usuario> consultaUsuario= em.createNamedQuery("Usuario.findByUsuario", Usuario.class);
    consultaUsuario.setParameter("usuario", usuario);
    List<Usuario> lista= consultaUsuario.getResultList();
    return lista;
}

@Override
public List<Usuario> findUsuarioLosed(String email){
    TypedQuery<Usuario> consultaUsuario= em.createNamedQuery("Usuario.findUsuarioLosed", Usuario.class);
    consultaUsuario.setParameter("email", email);
    List<Usuario> lista= consultaUsuario.getResultList();
    return lista;
}

}

The code of the error itself(ChatUsers.java)(Is pretty big but it's only important the @EJB thing i guess..):

package chat;

import com.eventos.Usuario;
import com.eventos.UsuarioFacadeLocal;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

@ManagedBean
@ApplicationScoped
public class ChatUsers implements Serializable {

private List<Usuario> usuariosConectados;
private List<Usuario> usuariosConectadosGeneral;
private List<Usuario> usuariosConectadosMayores;
private List<Usuario> usuariosConectadosMenores;
//(beanName = "ChatUsers")
@EJB
private UsuarioFacadeLocal usuarioEjb;

@PostConstruct
public void init() {
    usuariosConectados = new ArrayList<>();
    usuariosConectadosGeneral = new ArrayList<>();
    usuariosConectadosMayores = new ArrayList<>();
    usuariosConectadosMenores = new ArrayList<>();
}

public List<Usuario> getUsuariosConectados() {
    return usuariosConectados;
}

public void setUsuariosConectados(List<Usuario> usuariosConectados) {
    this.usuariosConectados = usuariosConectados;
}

public List<Usuario> getUsuariosConectadosGeneral() {
    return usuariosConectadosGeneral;
}

public void setUsuariosConectadosGeneral(List<Usuario> usuariosConectadosGeneral) {
    this.usuariosConectadosGeneral = usuariosConectadosGeneral;
}

public List<Usuario> getUsuariosConectadosMayores() {
    return usuariosConectadosMayores;
}

public void setUsuariosConectadosMayores(List<Usuario> usuariosConectadosMayores) {
    this.usuariosConectadosMayores = usuariosConectadosMayores;
}

public List<Usuario> getUsuariosConectadosMenores() {
    return usuariosConectadosMenores;
}

public void setUsuariosConectadosMenores(List<Usuario> usuariosConectadosMenores) {
    this.usuariosConectadosMenores = usuariosConectadosMenores;
}

public void removeUser(String user) {
    usuariosConectados.remove(dameUsuario(user));
}

public void addUser(String user) {
    Usuario usuario = dameUsuario(user);
    boolean add = true;
    for(Usuario item:usuariosConectados){
        if(item.getUsuario().equals(usuario.getUsuario())){
            add = false;
        }
    }
    if(add){
        usuariosConectados.add(usuario);
    }

}

public boolean containsUser(String user) {
    return usuariosConectados.contains(dameUsuario(user));
}

public void removeGeneralUser(String user) {
    usuariosConectadosGeneral.remove(dameUsuario(user));
}

public void addGeneralUser(String user) {
    Usuario usuario = dameUsuario(user);
    boolean add = true;
    for(Usuario item:usuariosConectadosGeneral){
        if(item.getUsuario().equals(usuario.getUsuario())){
            add = false;
        }
    }
    if(add){
        usuariosConectadosGeneral.add(usuario);
    }
}

public boolean containsGeneralUser(String user) {
    return usuariosConectadosGeneral.contains(dameUsuario(user));
}

public void removeMayorUser(String user) {
    usuariosConectadosMayores.remove(dameUsuario(user));
}

public void addMayorUser(String user) {
    Usuario usuario = dameUsuario(user);
    boolean add = true;
    for(Usuario item:usuariosConectadosMayores){
        if(item.getUsuario().equals(usuario.getUsuario())){
            add = false;
        }
    }
    if(add){
        usuariosConectadosMayores.add(usuario);
    }
}

public boolean containsMayorUser(String user) {
    return usuariosConectadosMayores.contains(dameUsuario(user));
}

public void removeMinorUser(String user) {
    usuariosConectadosMenores.remove(dameUsuario(user));
}

public void addMinorUser(String user) {
    Usuario usuario = dameUsuario(user);
    boolean add = true;
    for(Usuario item:usuariosConectadosMenores){
        if(item.getUsuario().equals(usuario.getUsuario())){
            add = false;
        }
    }
    if(add){
        usuariosConectadosMenores.add(usuario);
    }

}

public boolean containsMinorUser(String user) {
    return usuariosConectadosMenores.contains(dameUsuario(user));
}

public Usuario dameUsuario(String user){
    System.out.println(">>>>>>>>>>>>>>>>>>> dame usuario");
    Usuario usuario = usuarioEjb.findByUsuario(user).get(0);
    System.out.println(">>>>>>>>>>>>>>>>>>> dame usuario"+usuario.getUsuario());
    System.out.println(">>>>>>>>>>>>>>>>>>> dame usuario"+usuario.getClave());
    return usuario;
}

}

I've tried the solution of this post aswell: Cannot resolve reference Local ejb-ref

This error repeats in another interface if i "solve" this interface(with the solution of the post above), and then the error return to this interface if i apply aswell. Anyway im not sure im applying well the solution.

I've also tried to change @Local to @Remote with no success.

Any help here is like finding an oasis in a desert. Thanks

EDIT:

The error for this interface is seemingly solved, as i did like @kret answer (and the other post) and named the @EJB:

 @EJB(beanName="UsuarioFacade")
private UsuarioFacadeLocal usuarioEjb;

I was doing it wrong with the name(it must be the name of the interface)

Now it gives me the same error in another reference:

Exception while deploying the app [ociumfinal-ear] : Cannot resolve reference [Local ejb-ref name=net.ocium.ociumapp.modelo.ModeloApp/eventoEjb,Local 3.x interface =com.eventos.EventoFacadeLocal,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session] because there are [2] ejbs in the application with interface com.eventos.EventoFacadeLocal. 

ModeloApp:

public class ModeloApp {

private List<Evento> listEventEjb;
private List<GranEvento> listGranEvenEjb;
private List<Promocion> listPromocionEjb;
private EventBus eventBus;
private static String CHANNEL = "/app/";

@EJB
private EventoFacadeLocal eventoEjb;
@EJB
private GranEventoFacadeLocal granEventoEjb;
@EJB
private PromocionFacadeLocal promocionEjb;
@EJB
private QuedadaFacadeLocal quedadaEjb;
@EJB
private UsuarioFacadeLocal usuarioEjb;
@EJB
private PersonaFacadeLocal personaEjb;
@EJB
private ImagenFacadeLocal imagenEjb;
@EJB
private ProvinciaFacadeLocal provinciaEjb;
@EJB
private PoblacionFacadeLocal poblacionEjb;
@EJB
private BbddFacadeLocal bbddEjb;
@EJB
private EventoUsuarioFacadeLocal eventoUsuarioEjb;
@EJB
private EventoMensajeFacadeLocal eventoMensajeEjb;
@EJB
private QuedadaUsuarioFacadeLocal quedadaUsuarioEjb;
@EJB
private ConversacionFacadeLocal conversacionEjb;
@EJB
private RoomFacadeLocal roomEjb;
@EJB
private PropuestaQuedadaFacadeLocal propuestaQuedadaEjb;


@Inject
private ServletContext ctx;

public ModeloApp() {

}

public String dameListQuedadas() {

    return null;
}

public String dameListEvenHoy(String city) {
    String resultado = "Prueba correcta"; 
    city = (String)fromString(city);
    try {
        Context ctx = new InitialContext();///ocium-web-1.0-SNAPSHOT/
        eventoEjb = (EventoFacadeLocal) ctx.lookup("java:global/ocium-web/EventoFacade!com.eventos.EventoFacadeLocal");
        listEventEjb = new ArrayList<>();
        listEventEjb = eventoEjb.findByFechaHoyProvincia(dameProvinciaDesdeCity(city));
        resultado = "Contexto creado correcta size es:" + listEventEjb.size();
    } catch (NamingException ex) {
        Logger.getLogger(ModeloApp.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println("kkkkk" + ex.getMessage());
    }
    ListEvenHoy listado = new ListEvenHoy();
    listado.setListadoEventos(listEventEjb);
    resultado = toString(listado);
    return resultado;
}

The error is the same so I've tried this:

@EJB(beanName="EventoFacade")
private EventoFacadeLocal eventoEjb;
@EJB(beanName="EventoFacade")
private GranEventoFacadeLocal granEventoEjb;
@EJB(beanName="EventoFacade")
private PromocionFacadeLocal promocionEjb;
@EJB(beanName="EventoFacade")
private QuedadaFacadeLocal quedadaEjb;
@EJB(beanName="EventoFacade")
private UsuarioFacadeLocal usuarioEjb;
@EJB(beanName="EventoFacade")
private PersonaFacadeLocal personaEjb;
@EJB(beanName="EventoFacade")
private ImagenFacadeLocal imagenEjb;
@EJB(beanName="EventoFacade")
private ProvinciaFacadeLocal provinciaEjb;
@EJB(beanName="EventoFacade")
private PoblacionFacadeLocal poblacionEjb;
@EJB(beanName="EventoFacade")
private BbddFacadeLocal bbddEjb;
@EJB(beanName="EventoFacade")
private EventoUsuarioFacadeLocal eventoUsuarioEjb;
@EJB(beanName="EventoFacade")
private EventoMensajeFacadeLocal eventoMensajeEjb;
@EJB(beanName="EventoFacade")
private QuedadaUsuarioFacadeLocal quedadaUsuarioEjb;
@EJB(beanName="EventoFacade")
private ConversacionFacadeLocal conversacionEjb;
@EJB(beanName="EventoFacade")
private RoomFacadeLocal roomEjb;
@EJB(beanName="EventoFacade")
private PropuestaQuedadaFacadeLocal propuestaQuedadaEjb;

What gives me this error:

Exception while deploying the app [ociumfinal-ear] : Warning : Unable to determine local  business vs. remote business designation for  EJB 3.0 ref Local ejb-ref name=net.ocium.ociumapp.modelo.ModeloApp/granEventoEjb,Local 3.x interface =com.eventos.GranEventoFacadeLocal,ejb-link=EventoFacade,lookup=,mappedName=,jndi-name=,refType=Session

Glassfish-ejb-jar.xml:

<glassfish-ejb-jar>
<security-role-mapping>
<role-name>ADMINISTRATIVO</role-name>
<group-name>ADMINISTRATIVO</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>COMERCIAL</role-name>
<group-name>COMERCIAL</group-name>
<group-name>GERENCIA</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>CLIENTE</role-name>
<group-name>CLIENTE</group-name>
<group-name>GERENCIA</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>USUARIO</role-name>
<group-name>USUARIO</group-name>
<group-name>CLIENTE</group-name>
<group-name>COMERCIAL</group-name>
<group-name>ADMINISTRATIVO</group-name>
<group-name>COLABORADOR</group-name>
<group-name>GERENCIA</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>COLABORADOR</role-name>
<group-name>COLABORADOR</group-name>
<group-name>GERENCIA</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>GERENCIA</role-name>
<group-name>GERENCIA</group-name>
</security-role-mapping>
<enterprise-beans>
<ejb>
  <ejb-name>AcreedorFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/AcreedorFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>AnuncioFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/AnuncioFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>ClienteFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/ClienteFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>ContactoFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/ContactoFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>ContactoUsuarioFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/ContactoUsuarioFacadeLocal</jndi- 
name>
</ejb>
<ejb>
  <ejb-name>EmpleadoFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/EmpleadoFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>EventoFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/EventoFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>EventoMensajeFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/EventoMensajeFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>EventoUsuarioFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/EventoUsuarioFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>GranEventoFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/GranEventoFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>GrupoFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/Grupo</jndi-name>
</ejb>
<ejb>
  <ejb-name>ImagenFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/ImagenFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>NegocioFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/NegocioFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>PersonaFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/PersonaFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>PoblacionFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/PoblacionFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>PromocionFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/PromocionFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>VideoFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/VideoFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>UsuarioGrupoFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/UsuarioGrupoFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>UsuarioFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/UsuarioFacade</jndi-name>
  <ejb-ref>
    <ejb-ref-name>ejb_ref1</ejb-ref-name>
  </ejb-ref>
</ejb>
<ejb>
  <ejb-name>QuedadaUsuarioFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/QuedadaUsuarioFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>QuedadaFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/QuedadaFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>PropuestaQuedadaFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/PropuestaQuedadaFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>ProveedorFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/ProveedorFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>ProvinciaFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/ProvinciaFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>SeccionFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/SeccionFacade</jndi-name>
</ejb>
<ejb>
  <ejb-name>ConversacionFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/ConversacionFacadeLocal</jndi-name>
</ejb>
<ejb>
  <ejb-name>RoomFacade</ejb-name>
  <jndi-name>java:global/ocium-ejb/RoomFacadeLocal</jndi-name>
</ejb>
</enterprise-beans>
 </glassfish-ejb-jar>

Any idea is really welcome

Thanks

EDIT:

Made a new post with the detailed new error: Glassfish error while deploying ear web application with multiple EJB references


Solution

  • "Cannot resolve reference (...) because there are [2] ejbs in the application with interface com.eventos.UsuarioFacadeLocal". There is problem with injection, container does not know which one bean do you want to have injected. Delete one of implementations or define name of wanted bean in @EJB annotation