Java Enterprise Tutorial – Getting Started – Parte 1

Prima di iniziare bisogna attrezzarsi del necessario, innanzi tutto un DBMS, nel mio caso MySQL se non ne siete forniti scaricate il Server e magari anche il GUI Tool dal sito mysql.com.

MySQL community server
http://dev.mysql.com/downloads/mysql/

MySQL guiTools (interfaccia grafica per gestire i database)
http://dev.mysql.com/downloads/gui-tools

Ora forniamoci della JDK 6.0 o successive scaricandola dal sito sun
http://java.sun.com/javase/downloads/index.jsp

Ed ora possiamo scaricare il nostro IDE Netbeans dal sito ufficiale, mi raccomando bisogna scaricare le versioni con il Bundled server GlassFish v2, vi consiglio di scaricare la versione completa di tutti i supporti così da non avere problemi.
http://www.netbeans.org/downloads/index.html

Partiamo dal livello base.
Ogni sistema distribuito che si rispetti deve essere accessibile da una serie di utenti con diversi permessi e responsabilità, quindi quello che faremo è creare il nostro semplice database di utenti con il minimo indispensabile.
Qui potete scaricare il dump SQL da importare con MySQL Administrator oppure ricreare la struttura come illustrata di seguito:

dump

Ora apriamo Netbeans e andiamo su File->New Project, selezioniamo la cartella Java EE e nella finestra di destra selezioniamo la prima voce “Enterprise Application” e clicchiamo su next.
Ora diamo un nome al nostro progetto, nel mio caso “MyFirstJEE”,  ignoriamo la voce “Use dedicated folder for storing libraries”, spuntiamo la casella “Set as main project” per lavorare più comodamente e clicchiamo next.
Lasciamo selezionato come application  server Glassfish V2 e spuntiamo, se non lo sono già, le caselle “Create EJB Module” e “Create Web Application Module”.
Non spuntiamo la casella “Create Application client Module” in quanto la creazione di un client stand alone per applicazioni enterprise è un argomento che merita di essere approfondito in un tutorial dedicato.
Cliccando su finish dovremmo trovarci davanti ad una struttura come questa.

schermata1

NetBeans ci mostra i componenti della nostra applicazione come progetti diversi come è giusto che sia, il primo con il triangolo rappresenta l’applicazione Enterprise vera e propria, cioè quella che contiente il modulo ejb e il modulo war, infatti espandendo il nodo Java EE Modules noterete proprio i due componenti come parti del progetto.
In realtà il modulo EJB come quello WAR potrebbero far parte di un’altra applicazione Enterprise o di altre 1000; naturalmente il loro riutilizzo dipende dalla generalità degli stessi che non è sempre scontata se non si pone la dovuta attenzione nello sviluppo.
Entrando più nel dettaglio possiamo vedere il modulo EJB come il core della nostra applicazione: è questo che si occupa di interfacciarsi con le strutture dati e che fornisce i principali metodi di controllo ed accesso definendo lo scheletro portante dell’intero sistema.
Il progetto WAR è un client web quindi possiamo vederlo come un classico sito web, l’unica reale differenza sta nel fatto che esso non accederà mai direttamente alle strutture dati ma potrà interrogare solo il modulo EJB lasciando a quest’ultimo il compito di gestire l’accesso condiviso alle strutture dati e di conseguenza la loro consistenza ed integrità.

La prima cosa da fare prima di scrivere il nostro primo BEAN è quella di fornire al nostro ambiente di sviluppo e al nostro Application Server la conoscenza della nostra struttura dati.
Nelle tab in altro a sinistra clicchiamo su Services, nell’elenco sottostante facciamo clic destro sul nodo Databases e clicchiamo su new connection.
In questa finestra dal menu a tendina Name selezioniamo MySQL, attenzione nel caso non sia disponibile sarà necessario installare il driver scaricandolo da sito mysql a questo indirizzo

http://dev.mysql.com/downloads/connector/j/5.1.html

Installatelo espandendo il nodo databases e cliccando con il tasto destro sul nodo drivers e poi su add driver, dalla finestra di dialogo selezionate il JAR del connector appena scaricato ed il gioco è fatto.

Ritorniamo alla finestra di dialogo, inseriamo tutti i parametri necessari alla connessione al DB, nel mio caso sono i seguenti:

parametri

Ora, se tutto è andato a buon fine e i parametri sono giusti, dovremmo poter vedere all’interno del nodo databases la nostra connessione con la relativa visualizzazione della tabella e dei campi.
Netbeans ci permette, inoltre, di visualizzare i dati presenti nel db cliccando semplicemente con il tasto destro sulla tabella in questione e poi sulla voce view data, verrà aperta una finestra con la query eseguita ed i relativi risultati.

select

Ora che la connessione è stata creata torniamo a visualizzare la lista dei progetti e clicchiamo con il tasto destro sul progetto MyFirstJee-ejb poi su New->Other.
Nella finestra di dialogo selezioniamo la categoria persistence e dalla finestra di destra la voce Database Schema.
Chiamiamo il nostro schema come preferiamo, nel mio caso mySchema, e clicchiamo su next, nella finestra successiva selezioniamo la connessione creata in precedenza ed andiamo avanti.
Ora vi verrà chiesto quali tabelle vogliamo aggiungere allo schema, nel nostro caso ne abbiamo solo una, selezioniamola, clicchiamo su add e quindi su finish.
Il file schema è stato creato nel nodo configuration files del nostro modulo ejb.
Il prossimo passo è la creazione di una persistence unit ovvero un’ unità inglobata nell’application server che si occuperà di gestire la persistenza dei dati sul db e l’accesso condiviso in maniera completamente automatica.
Clicchiamo con il tasto destro sul progetto MyFirstJee-ejb poi su New->Persistence Unit, nella finestra di dialogo lasciamo il nome  e la libreria di defualt e settiamo la voce Table generation strategy a none, ovvero diciamo alla persistence unit di non creare le tabelle ogni volta che viene eseguita l’applicazione ma di non generare le tabelle visto che non ne abbiamo necessità.
Prima di finire dal menu a tendina DataSource clicchiamo su new data source e chiamiamolo myfirstjeeconnection scegliendo la connessione al nostro db.
Cliccando su finish noterete che quello che abbiamo fatto non è stato altro che scrivere un file XML di configurazione che servirà a dire all’application server come gestire le operazioni sul database e con quale libreria di persistenza, noterete in basso una spunta  “Include all entities classes in …”: questa specifica che tutti gli Entity Beans che andremmo a creare saranno gestiti dall’unità di persistenza.

persistenceunit

Vai alla seconda parte del tutorial ->

  • Pingback: Java Enterprise Tutorial - Named query parametriche | Mauro Rocco programming zone()

  • enos76

    Grazie per questo tutorial introduttivo, è molto chiaro. Spero che ne pubblicherai altri, magari in video.

  • http://www.belloweb.it BelloWeb

    Complimenti anche da parte mia.. spero che continui a pubblicare materiale. Sono pochi i siti italiani che trattano questi argomenti con la tua accuratezza.
    Se ti interessa ti posso pubblicizzare sul mio blog.
    Ciao

  • Mauro Rocco

    Ho interrotto per un po’ a causa di pesanti impegni di lavoro, presto riprendero’ a scrivere e lo faro’ sopratutto in inglese, ma non mancheranno versioni italiane degli articoli. A breve arrivera’ anche la nuova ed originale veste grafica.
    Stay tuned.

  • Tony

    sono riuscito a creare il connection pool e a fare il deploy però mi da errore sulla servlet, se puoi dacci un occhiata intanto cerco di risolverlo

    type Exception report

    message

    descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException: PWC1392: Error instantiating servlet class servlet.creaUser

    root cause

    com.sun.enterprise.container.common.spi.util.InjectionException: Errore durante la creazione di un oggetto gestito per la classe: class servlet.creaUser

    root cause

    com.sun.enterprise.container.common.spi.util.InjectionException: Eccezione durante il tentativo di inserire Remote ejb-ref name=servlet.creaUser/userServeBean,Remote 3.x interface =session.NewSessionBean,ejb-link=null,lookup=,mappedName=,jndi-name=session.NewSessionBean,refType=Session in class servlet.creaUser: Lookup failed for ‘java:comp/env/servlet.creaUser/userServeBean’ in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}

    root cause

    javax.naming.NamingException: Lookup failed for ‘java:comp/env/servlet.creaUser/userServeBean’ in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: Exception resolving Ejb for ‘Remote ejb-ref name=servlet.creaUser/userServeBean,Remote 3.x interface =session.NewSessionBean,ejb-link=null,lookup=,mappedName=,jndi-name=session.NewSessionBean,refType=Session’ . Actual (possibly internal) Remote JNDI name used for lookup is ‘session.NewSessionBean#session.NewSessionBean’ [Root exception is javax.naming.NamingException: Lookup failed for ‘session.NewSessionBean#session.NewSessionBean’ in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: session.NewSessionBean#session.NewSessionBean not found]]]

    root cause

    javax.naming.NamingException: Exception resolving Ejb for ‘Remote ejb-ref name=servlet.creaUser/userServeBean,Remote 3.x interface =session.NewSessionBean,ejb-link=null,lookup=,mappedName=,jndi-name=session.NewSessionBean,refType=Session’ . Actual (possibly internal) Remote JNDI name used for lookup is ‘session.NewSessionBean#session.NewSessionBean’ [Root exception is javax.naming.NamingException: Lookup failed for ‘session.NewSessionBean#session.NewSessionBean’ in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: session.NewSessionBean#session.NewSessionBean not found]]

    root cause

    javax.naming.NamingException: Lookup failed for ‘session.NewSessionBean#session.NewSessionBean’ in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: session.NewSessionBean#session.NewSessionBean not found]

    root cause

    javax.naming.NameNotFoundException: session.NewSessionBean#session.NewSessionBean not found