Ошибка Glassfish при развертывании ушного веб-приложения - PullRequest
0 голосов
/ 19 сентября 2018

Я хожу с этой ошибкой несколько недель, я никогда не работал с веб-приложениями Java, поэтому я действительно потерян на этом.

Моя настройка:

  • Glassfish 5.0
  • IDE Netbeans 8.2
  • Обновление Java 8 181 (64-разрядная версия)
  • Java 10.0.2 (64-разрядная версия)
  • Разработка Java SEОбновление набора 8 181 (64-разрядная версия)
  • Java (TM) SE Development Kit 10.0.2 (64-разрядная версия)

Ошибка следующая:

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. 

Интерфейс (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();

}

Реализация (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;
}

}

Код самой ошибки (ChatUsers.java) (довольно большой, но я думаю, это важная вещь @EJB ..):

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;
}

}

Я также попробовал решение этого поста: Невозможно разрешить ссылку. Local ejb-ref

Эта ошибка повторяется в другом интерфейсе, если я «решаю» этот интерфейс (с помощью решения, описанного выше), а затем возвращается к этому интерфейсу, еслия применяю aswelл.В любом случае, я не уверен, что я хорошо применяю решение.

Я также пытался изменить @Local на @Remote безуспешно.

Любая помощь здесь похожа на поиск оазиса в пустыне.Спасибо

РЕДАКТИРОВАТЬ:

Ошибка для этого интерфейса, по-видимому, решена, как я сделал, как @kret ответ (и другой пост) и назвал @EJB:

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

Я неправильно делал с именем (это должно быть имя интерфейса)

Теперь он дает мне ту же ошибку в другой ссылке:

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;
}

Ошибка та же, поэтому я попробовал это:

@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;

Что дает мне эту ошибку:

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>

Любая идея действительно приветствуется

Спасибо

РЕДАКТИРОВАТЬ:

Сделал новый пост с подробным новымошибка: Ошибка Glassfish при развертывании ушного веб-приложения с несколькими ссылками EJB

1 Ответ

0 голосов
/ 19 сентября 2018

"Не удалось разрешить ссылку (...), поскольку в приложении есть [2] ejbs с интерфейсом com.eventos.UsuarioFacadeLocal".Существует проблема с инъекцией, контейнер не знает, какой боб вы хотите ввести.Удалите одну из реализаций или определите имя нужного компонента в аннотации @EJB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...