GlassFish 4.0 w / Jersey devuelve 500 errores internos del servidor sin excepción

Estoy usando un servidor GlassFish 4.0 y clases basadas en JPA del lado del servidor, que quiero entregar a través de JAX-RS. Esto funciona bien hasta ahora para entidades simples. Sin embargo, si tengo una relación @OneToMany por ejemplo Y hay una entidad vinculada, el servidor devuelve un error interno de 500 servidores. En ese caso, no se registra nada en el registro del servidor. Para encontrar el error, creé una pequeña página JSP personalizada para obtener más información sobre lo que sucedió. El código es justo esto:

Status: <%= pageContext.getErrorData().getStatusCode() %>
Throwable: <%= pageContext.getErrorData().getThrowable() %>

Desafortunadamente, la salida es solo "Estado: 500 Throwable: null"

Mi propio código del lado del servidor parece funcionar correctamente (hizo algunos resultados de depuración), pero sin embargo, surge un error. En este ejemplo, las clases de Usuario y Problema se pueden recuperar sin un problema a menos que haya una entidad de IssueComment vinculada:

Clase de usuario

package my.application.model;

import static javax.persistence.FetchType.LAZY;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * The persistent class for the User database table.
 * 
 */
@XmlRootElement
@Entity(name="User")
@Table(name="User")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="failedLogin")
    private short failedLogin;

    @Column(name="firstname")
    private String firstname;

    @Column(name="lastname")
    private String lastname;

    @Column(name="middlename")
    private String middlename;

    @Column(name="password")
    private String password;

    @Column(name="username")
    private String username;

    //bi-directional many-to-one association to IssueComment
    @OneToMany(mappedBy="user", fetch = LAZY)
    private List<IssueComment> issueComments;

    //bi-directional many-to-one association to SignalComment
    @OneToMany(mappedBy="user", fetch = LAZY)
    private List<SignalComment> signalComments;

    //bi-directional many-to-one association to SignalMeasure
    @OneToMany(mappedBy="user", fetch = LAZY)
    private List<SignalMeasure> signalMeasures;

    public User() {
    }

    public int getId() {
        return this.id;
    }

         // more getters and setters auto-generated by Eclipse
        }

Clase de usuario

package my.application.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

@NamedQuery(
    name = "getSingleIssue",
    query = "SELECT i FROM Issue i WHERE i.id = :id"
)
/**
 * The persistent class for the Issue database table.
 * 
 */
@XmlRootElement
@Entity(name="Issue")
@Table(name="Issue")
public class Issue implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="concernedModule")
    private String concernedModule;

    @Column(name="createdate")
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdate;

    @Column(name="duedate")
    @Temporal(TemporalType.TIMESTAMP)
    private Date duedate;

    @Column(name="priority")
    private int priority;

    @Column(name="reminderdate")
    @Temporal(TemporalType.TIMESTAMP)
    private Date reminderdate;

    @Column(name="responsibleUserId")
    private int responsibleUserId;

    @Column(name="sendingModule")
    private String sendingModule;

    @Column(name="severity")
    private int severity;

    @Column(name="status")
    private int status;

    @Column(name="title")
    private String title;

    // bidirectional many-to-one association to IssueComment
    @OneToMany(mappedBy = "issue")
    private List<IssueComment> issueComments;

    public Issue() {
    }

    public int getId() {
        return this.id;
    }

 // more getters and setters....
}

IssueComment:

package my.application.model;

import java.io.Serializable;

import javax.persistence.*;

import java.util.Date;


/**
 * The persistent class for the IssueComment database table.
 * 
 */
@Entity(name="IssueComment")
@Table(name="IssueComment")
public class IssueComment implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name="id")
    private int id;

    @Lob
    @Column(name="comment")
    private String comment;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="time")
    private Date time;

    //bi-directional many-to-one association to Issue
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="issueId")
    private Issue issue;

    //bi-directional many-to-one association to User
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="userId")
    private User user;

    public IssueComment() {
    }

    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

 // getters/setters....
}

El servicio web es el siguiente:

package my.application.server.webservice;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;

import org.glassfish.jersey.server.ResourceConfig;

import my.application.data.UserStorage;
import my.application.logger.Logger;
import my.application.model.Signal;
import my.application.model.SignalComment;
import my.application.model.User;

@Provider
@Path("User")
public class UserService extends ResourceConfig {

    private UserStorage storage = new UserStorage();

    public UserService() {
        this.packages("my.application.model");
    }

    @Produces(MediaType.APPLICATION_XML)
    @Path("load")
    @GET
    public User getUser(@QueryParam("id") int id) {
        try {
            Logger.getInstance().log("fetching id: " + id);
            User u = storage.getUser(id);
            Logger.getInstance().log("number of signal comments: " + u.getSignalComments().size());
            SignalComment sc = u.getSignalComments().get(0);
            Logger.getInstance().log("Signal 0 comment: " + sc.getComment());
            Signal s = sc.getSignal();
            Logger.getInstance().log("Signal subject: " + s.getSubject());
            return u;

        } catch (Exception e) {
            e.printStackTrace();
        }
        // this code is not being reached (so no errors in this method):
        Logger.getInstance().log("---EXCEPTION HAS BEEN THROWN---");

        return null;
    }
}

Dejé el código fuente del cliente ya que es del lado del servidor y se puede reproducir con un navegador normal, por lo que no es necesario el código del cliente aquí IMHO.

Respuestas a la pregunta(1)

Su respuesta a la pregunta