Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [EJB3.0] collegare una servlet agli EJB

    Ciao a tutti!
    Sto facendo una applicazione web che comprende la registrazione di un utente...
    Ho creato i seguenti Enterprise JavaBeans:

    Session Bean: StreetSoccerBean.java
    codice:
    package my.streetsoccer;
    
    import java.util.Vector;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.ejb.EJBException;
    import javax.persistence.PersistenceContext;
    
    
    @Stateless
    public class StreetSoccerBean implements StreetSoccerRemote {
        @PersistenceContext
        private EntityManager em;
        
        public boolean registraUtente(String nome, String cognome, String email,
                String username, String password) {
            try {
                Vector v = (Vector)em.createQuery("SELECT username " +
                        "FROM utente u " +
                        "WHERE u.username = :username")
                        .setParameter("username", username);
                if(v.size()>0) {
                    return false;
                }
                else {
                    v = (Vector)em.createNamedQuery("trovaIdUtenteMax");
                    String s = (String)v.elementAt(0);
                    int idutente = Integer.parseInt(s);
                    Utente utente = new Utente(idutente, nome, cognome, email, username, password);
                    em.persist(utente);
                    return true;
                }
            } catch (Exception e) {
                throw new EJBException(e.getMessage());
            }
        }
    }
    Interfaccia Remota: StreetSoccerRemote.java

    codice:
    package my.streetsoccer;
    
    import javax.ejb.Remote;
    
    
    @Remote
    public interface StreetSoccerRemote {
        public boolean registraUtente(String nome, String cognome, String email,
                String username, String password);
    }
    Inoltre ho fatto l'Entity Bean: Utente.java

    codice:
    package my.streetsoccer;
    
    import java.io.Serializable;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.NamedQuery;
    
    
    @Entity
    @NamedQuery(
        name="trovaIdUtenteMax",
        query="SELECT MAX idutente FROM utente"
    )
    
    public class Utente implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
        private String nome;
        private String cognome;
        private String email;
        private String username;
        private String password;
        
        public Utente() {
            
        }
        
        public Utente(int id, String nome, String cognome, String email, String username,
                String password) {
            this.id = id;
            this.nome = nome;
            this.cognome = cognome;
            this.email = email;
            this.username = username;
            this.password = password;
        }
    
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        
        public String getNome() {
            return nome;
        }
        public void setNome(String nome) {
            this.nome = nome;
        }
        
        public String getCognome() {
            return cognome;
        }
        public void setCognome(String cognome) {
            this.cognome = cognome;
        }
        
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (int) id;
            return hash;
        }
    
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Utente)) {
                return false;
            }
            Utente other = (Utente) object;
            if (this.id != other.id) {
                return false;
            }
            return true;
        }
    
        @Override
        public String toString() {
            return "my.streetsoccer.Utente[id=" + id + "]";
        }
    
    }
    Ora vorrei creare una servlet che prenda i dati(nome, cognome, email, ecc...) da un form di una pagina JSP, e li usi per fare la registrazione dell'utente.
    Il punto è che non so come fare la servlet. Come faccio per chiamare il metodo registraUtente nella servlet?
    Non so proprio da dove iniziare a fare questa servlet. Forse devo fare il metodo doPost, nel quale mi istanzio un oggetto di tipo StreetSoccerRemote, in modo da poter chiamare il metodo registraUtente?
    Oppure esite una sintassi appropiata per chiamare gli EJB all'interno di una servlet?

    Ogni aiuto è gradito! Soprattutto se mi fate la servlet in questione!
    Grazie e ciao!

  2. #2
    Se usi netbeans:

    crea una servlet
    poni il cursore del mouse sul codice
    clicca il tasto destro
    clicca su "Enterprise Resources" - "Call Enterprise Bean"
    Scegli il bean da richiamare e conferma

    troverai all'interno della servlet una dichiarazione del tipo
    @EJB
    private StreetSoccerRemote StreetSoccerRemote ;

    adesso all'interno del metodo processRequest puoi usare direttamente "streetSoccerRemote" e suoi metodi senza fare null'altro.

    Se non usi netbeans banalmente aggiungi la riga di codice "a mano".

    In soldoni l'annotazione @EJB consente all'application server di cercare, recuperare e istanziare correttamente la l'ejb mascherando una serie di operazioni..

    p.s. ti consiglio di usare interfacce locali piuttosto che remote qualora l'ejb e le servlet siano all'interno della stessa applicazione Enterprise (EAR).

    http://programmaremobile.blogspot.com

  3. #3
    Innanzitutto... Grazie dell'aiuto!
    Ho fatto come dici tu, almeno credo. Ecco la servlet che ho fatto:

    codice:
    package my.streetsoccer;
    
    import java.io.IOException;
    import javax.ejb.EJB;
    import javax.servlet.ServletConfig;
    import javax.servlet.http.HttpSession;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class StreetSoccerServlet extends HttpServlet {
        
        @EJB
        private StreetSoccerRemote streetSoccerBean;
        
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
        }
        
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            String comando = request.getParameter("comando");
            HttpSession session = request.getSession();
            
            streetSoccerBean = (StreetSoccerRemote)session.getAttribute("ssr");
            
            if(comando.equals("registraUtente")) {
                String nome = request.getParameter("nome");
                String cognome = request.getParameter("cognome");
                String email = request.getParameter("email");
                String username = request.getParameter("username");
                String password = request.getParameter("password");
                
                boolean risposta = streetSoccerBean.registraUtente(nome, cognome, email, username, password);
                
                if(risposta==false) {
                    response.sendRedirect("registrazione.jsp");
                }
                else {
                    response.sendRedirect("index.jsp");
                }
            }
        }
    }
    Non ho idea se sia corretta perchè non riesco a fare il deploy dell'applicazione. Mi da il seguente errore:

    codice:
    Initial deploying StreetSoccer to D:\Documenti\NetBeans Projects\StreetSoccer\dist\gfdeploy
    Completed initial distribution of StreetSoccer
    Start registering the project's server resources
    Finished registering server resources
    moduleID=StreetSoccer
    deployment started : 0%
    Deploying application in domain failed; 
    Exception Description: Syntax error parsing the query [trovaIdUtenteMax: SELECT MAX idutente FROM utente], line 1, column 12: syntax error at [idutente].
    Internal Exception: line 1:12: expecting LEFT_ROUND_BRACKET, found 'idutente'
    Deployment error:
    The module has not been deployed.
    See the server log for details.
            at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:166)
            at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:104)
            at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
            at sun.reflect.GeneratedMethodAccessor184.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
            at org.apache.tools.ant.Task.perform(Task.java:348)
            at org.apache.tools.ant.Target.execute(Target.java:357)
            at org.apache.tools.ant.Target.performTasks(Target.java:385)
            at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
            at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
            at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
            at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
            at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:277)
            at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:460)
            at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)
    Caused by: The module has not been deployed.
            at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:160)
            ... 16 more
    BUILD FAILED (total time: 3 seconds)
    Mi dice che c'è un errore di sintassi nella queri!!! ma a me sembra corretta

    Sai aiutarmi??

    P.S. Mi avevano consigliato i usare la libreria JNDI oppure le iniection per richiamare gli EJB nelle servlet. Ho percaso usato una delle due tecniche nella mia servlet?
    Non so bene cosa siano JNDI ed iniection.

    Grazie ancora!

  4. #4
    allora la tecnica usata è la dependecy injection è un pattern usato in java EE. nasconde le operazioni di lookup per trovare la risorsa (ejb in questo caso).

    riguardo la servlet credo ci sia un errore:

    (StreetSoccerRemote)session.getAttribute("ssr");

    questa istruzione infatti non serve.. devi usare direttamente come fai più sotto nel codice la variabile streetSoccerBean in quanto con l'annotation @EJB il container (Ad es. glassfish) ha provedduto a inizializzare per te la variabile (con la tecnica della dependecy injection).
    (non

    Il problema del deploy invece è un altro.
    Su questo non ti aiuto
    leggi bene la descrizione dell'eccezione e troverai da solo la soluzione.

    Infine riguardo a JNDI dai un occhio
    http://java.sun.com/products/jndi/
    e
    http://java.html.it/faq/leggi/427/co...acronimo-jndi/
    -----------------------------


    http://programmaremobile.blogspot.com

  5. #5
    Grazie ancora... ho risolto il problema del deploy.
    Ma ho un'altra domanda!! Scusa se ti disturbo tanto!!

    Non avendo fatto il metodo doPost allinterno della servlet, quando premo il pulsante Registrati della pagina JSP, mi da questo errore:

    codice:
    HTTP Status 405 - HTTP method POST is not supported by this URL
    
    --------------------------------------------------------------------------------
    
    type Status report
    
    messageHTTP method POST is not supported by this URL
    
    descriptionThe specified HTTP method is not allowed for the requested resource (HTTP method POST is not supported by this URL).
    
    
    --------------------------------------------------------------------------------
    
    Sun Java System Application Server 9.1_01
    Qui c'è il codice della pagina JSP:

    codice:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Registrazione</title>
        </head>
        <body>
            <form action="StreetSoccerServlet" method="POST">
                <table>
                    <tr>
                        <td>Nome</td>
                        <td>
                            <input type="text" name="nome" value="" size="30" maxlength="50">
                        </td>
                    </tr>
                    <tr>
                        <td>Cognome</td>
                        <td>
                            <input type="text" name="cognome" value="" size="30" maxlength="50">
                        </td>
                    </tr>
                    <tr>
                        <td>E-mail</td>
                        <td>
                            <input type="text" name="email" value="" size="30" maxlength="50">
                        </td>
                    </tr>
                    <tr>
                        <td>Username</td>
                        <td>
                            <input type="text" name="username" value="" size="30" maxlength="50">
                        </td>
                    </tr>
                    <tr>
                        <td>Password</td>
                        <td>
                            <input type="password" name="password" value="" size="30" maxlength="50">
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <input type="Submit" name="Submit" value="Registrati">
                        </td>
                    </tr>
                    <input type="hidden" name="comando" value="registraUtente">
                </table>
            </form>
        </body>
    </html>
    Come risolvo l'errore??
    Faccio il metodo doPost ad all'interno chiamo il metodo processRequest??

    Se non sbaglio però ho letto da qualche parte che il metodo ProcessRequest può essere usato al posto sia di doPost che di doGet!!??

    P.S.(1) Utilizzo NetBeans con Glassfish
    P.S.(2) Quando si utilizzano gli Entity Beans non c'è bisogno di creare le tabelle del database, vero?? Vangono create in automatico!!

  6. #6
    Risposta corta per chi non vuole capire:

    all'interno della servlet inserisci il seguente codice

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


    Risposta lunga:

    Come ti dice chiaramente l'errore "HTTP Status 405 - ....." l'url richiamato dalla form action (la servlet) non supporta il metodo POST.

    Quando crei una tua servlet non fai altro che usare il concetto di ereditarietà usando la keywords "extends". (Es. public class MiaServlet extends HttpServlet)
    Ciò vuol dire,in soldoni, che la classe MiaServlet è in grado di fare tutto ciò che è in grado di fare la classe HttpServlet.

    Quindi la prima domanda che devi porti è "Cosa sà fare HttpServlet di suo?", nello specifico è in grado di gestire una richiesta http con il metodo POST?

    In realtà sembrerebbe che HttpServlet gestisce la richiesta POST, la gestisce infatti generando l'errore 405 e mostrando a video la descrizione dell'errore.

    Se infatti guardiamo il codice sorgente di HttpServlet.java notiamo

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    365 throws ServletException, IOException
    366 {
    367 String protocol = req.getProtocol();
    368 String msg = lStrings.getString("http.method_post_not_supported ");
    369 if (protocol.endsWith("1.1")) {
    370 resp.sendError(HttpServletResponse.SC_METHOD_NOT_A LLOWED, msg);
    371 } else {
    372 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
    373 }

    proprio come previsto.

    Quindi bisogna riscrivere il metodo della classe HttpServlet all'interno di MiaServlet, per far ciò si ricorre al concetto di override del metodo. Diciamo al compilatore che MiaServlet intende migliorare (o cmq gestire a modo suo) l'implementazione del metodo doPost.

    Tutto ciò detto in codice sorgente diventa:

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

    //codice per gestire la richiesta POST

    }

    Riguardo il discorso di processRequest..
    Partiamo dal presupposto che il ragionamento fatto per la richiesta POST vale per la richiesta GET con il corrispettivo metodo doGet.

    Quando non è necessario differenziare la gestione del metodo di gestione di parametri (POST VS GET) è buona pratica usare un metodo unico, processRequest richiamato da doGet e doPost in modo da unificarne il codice.

    quindi al posto di
    //codice per gestire la richiesta POST

    inserisci
    processRequest(request, response);

    ------------------------------------------

    >> P.S.(2) Quando si utilizzano gli Entity Beans non c'è bisogno di creare le tabelle del
    >> database, vero?? Vangono create in automatico!!

    Dipende..
    la risposta è si, se nel persistence unit hai scelto come TableGenerationStrategy "Create" o "Drop and Create"

    ----------------------
    http://programmaremobile.blogspot.com

  7. #7
    Ok, capito tutto!
    Mi stai aiutando tantissimo, e ti ringrazio per questo.
    Sono alle prime armi con gli EJB e non ho trovato nulla in italiano che potesse aiutarmi per quello che devo fare. L'inglese non lo mastico molto bene!!!

    Purtropo la mia applicazione mi da ancora errori:

    codice:
    HTTP Status 500 - 
    
    --------------------------------------------------------------------------------
    
    type Exception report
    
    message
    
    descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
    
    exception 
    
    javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    	java.rmi.RemoteException: An exception occured while creating a query in EntityManager
    note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_01 logs.
    
    
    --------------------------------------------------------------------------------
    
    Sun Java System Application Server 9.1_01
    L'errore sta forse nella formulazione delle query??
    Ecco il metodo registraUtente, all'interno ci sono le uniche due query dell'applicazione:

    codice:
    package my.streetsoccer;
    
    import java.util.List;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.Query;
    import javax.ejb.EJBException;
    import javax.persistence.PersistenceContext;
    
    
    @Stateless
    public class StreetSoccerBean implements StreetSoccerRemote {
        @PersistenceContext
        private EntityManager em;
        
        public boolean registraUtente(String nome, String cognome, String email,
                String username, String password) {
            try {
                Query q = em.createQuery("SELECT u.username " +
                        "FROM utente u " +
                        "WHERE u.username = :username")
                        .setParameter("username", username);
                List lista = q.getResultList();
                if(lista.size()>0) {
                    return false;
                }
                else {
                    q = em.createQuery("SELECT MAX (u.id) " +
                            "FROM utente u");
                    lista = q.getResultList();
                    String s = (String)lista.get(0);
                    int idutente = Integer.parseInt(s);
                    Utente utente = new Utente(idutente, nome, cognome, email, username, password);
                    em.persist(utente);
                    return true;
                }
            } catch (Exception e) {
                throw new EJBException(e.getMessage());
            }
        }
    }
    Per le query sto usando 'The Java EE 5Tutorial' che ho trovato sul sito della sun:
    http://java.sun.com/javaee/5/docs/tu...EETutorial.pdf

    Anche questo è in inglese, quindi non sono sicuro della correttezza delle query!

  8. #8
    L'eccezione dice:

    An exception occured while creating a query in EntityManager
    note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1_01 logs.
    Quindi hai scritto qualche query in modo erroneo.
    L'errore ti suggerisce anche di consultare l'intero stack traces dell'eccezione.. dagli un occhio (non superficiale!!) e sicuramente hai qualche dato in più per capire dove stà l'errore.

    Lo stackTrace lo trovi nel file server.log all'interno delle directory di glassfish o in alternativa lo puoi leggere in uno dei tab di netbeans.

    (se non riesci a capire l'errore riporta nel forum l'intero stack trace che ti dò una mano)

    Inoltre il metodo ha due query hai capito quale delle due generara l'errore?
    Potresti usare il debugger(consulta qui - http://programmaremobile.blogspot.co...-debugger.html ) per capire esattamente in quale riga di codice si trova l'errore.

    Riguardo l'inglese.. devi sforzarti(usa www.wordreference.com per tradurre le parole che non conosci), se vuoi lavorare in questo mondo troverai il 90% della documentazione che ti serve solo in inglese.

  9. #9
    Allora... ho usato il debugger, come mi hai detto tu. Ho messo il breackpoint alla riga 20:
    codice:
    Query q = em.createQuery("SELECT u.username " +
    ma quando sono andato all'istruzione successiva premendo F8, è saltato direttamente alla riga 39, cioè all'interno del catch:
    codice:
    throw new EJBException(e.getMessage());
    Questo vuol dire che già alla prima query c'è un errore!!??
    Qui c'è il contenuto di Debugger Console:
    codice:
    Attaching to localhost:9009
    LineBreakpoint StreetSoccerBean.java : 20 successfully submitted.
    User program running
    Breakpoint hit at line 20 in class my.streetsoccer.StreetSoccerBean by thread httpSSLWorkerThread-9090-1.
    Thread httpSSLWorkerThread-9090-1 stopped at StreetSoccerBean.java:20.
    User program running
    Thread httpSSLWorkerThread-9090-1 stopped at StreetSoccerBean.java:39.
    User program running
    Thread httpSSLWorkerThread-9090-1 stopped.
    Mentre questo credo che sia il Server Log di Glassfish:
    codice:
    javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
            java.rmi.RemoteException: An exception occured while creating a query in EntityManager
            at my.streetsoccer._StreetSoccerRemote_Wrapper.registraUtente(my/streetsoccer/_StreetSoccerRemote_Wrapper.java)
            at my.streetsoccer.StreetSoccerServlet.processRequest(StreetSoccerServlet.java:41)
            at my.streetsoccer.StreetSoccerServlet.doPost(StreetSoccerServlet.java:26)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
            at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
            at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
            at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
            at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
            at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
            at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
            at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
            at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
            at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
            at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
            at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    Vuol dire che l'errore sta nella sintassi della query? Io non vedo quale possa essere!

    P.S.(1) Dove posso trovare i file sorgente di J2EE? Nella standard edition di java sono in un file chiamato src.zip, ma non trovo quelli di java ee...

    P.S.(2) Esiste un libro sugli EJB 3.0 in italiano?

  10. #10
    nella query fai riferimento a u.username (SELECT u.username etc. etc.)
    però andando a guardare nell'entity non usi le annotation per indicare che il campo username è mappato in una qualche colonna della tabella.

    Quindi l'EJB-QL non riconosce u.username come campo e l'entity manager non riesce a costruire la query.

    Penso il problema sia questo.

    Riguardo i sorgenti, non saprei.. dai un occhio al sito dell sun o scrivi su google il nome del file .java che intendi visualizzare, spesso lo trovi anche cosi.

    Riguardo libro in italiano anche qui non saprei..
    Ti consiglio di prenderne uno in inglese.. fai uno sforzo ora te lo ritrovi, è un investimento imparare a leggere l'inglese

    (Un buon testo in inglese per iniziare è Beginning Java EE from novice to professional - Apress)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.