Ciao a tutti.
Sono un principiante in J2EE, ma sono riuscito a fare un piccolo progetto con bean statless, bean entità e MySQL.
Sono in grado di eseguire il progetto sul mio pc ma non so come fare per eseguirlo su 2 o più pc per vedere la J2EE multi-tier in azione.
Se qualcuno potrebbe dirmi i passaggi per farlo o mi può dire qualche guida o libro da leggere li sarei molto grato.
Incollo il mio codice e l'immagine dell'organizzazione del mio progetto.Grazie
![]()
codice:BookBank.java //Questa è la classe che rispecchia una tabella chiamata bookbank nel mio database package entity.library; //librerie importate neccessarie per la classe import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import java.util.Collection; import javax.persistence.*; import java.io.Serializable; //qua dichiaro che si tratta di un bean entity @Entity //dichiaro che rispecchia una tabela che si chiama bookbank @Table(name="bookbank") //La serializzazione serve a convertire un insieme di oggetti, //che contengono referenze ad altri oggetti, in un flusso(stream) di bytes. public class BookBank implements Serializable { //qua dichiaro le variabilli che corispondono ai campi della mia tabella long id; String title; String author; double price; //protected Collection <LineItems> lineitems; public BookBank() { super(); } //qua dichiaro il costruttore del entity bean public BookBank(String title, String author, double price) { super(); this.title = title; this.author = author; this.price = price; } //dichiaro che questa variabile rimpiazza l'id della tabella e che esso verrà generato automaticamente @Id @GeneratedValue(strategy=GenerationType.AUTO) // Getter and setter methods for the defined properties..("come dice il comento sono getter e setter per le nostre variabili") public long getId() { return id; } public void setId(long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } } BookCatalogBank.java //questo e una session bean statless che mi servirà per comunicare con la entity bean e poi con la web application package entity.library; //librerie che mi servono per la classe import java.io.Serializable; import java.util.Collection; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; //dichiaro che si tratta di un bean statless e dichiaro come si chiama la sua interfaccia che è di tipo remote @Remote(BookCatalogInterface.class) @Stateless //La serializzazione serve a convertire un insieme di oggetti, //che contengono referenze ad altri oggetti, in un flusso(stream) di bytes. //dichiaro anche che implementa la sua interfaccia public class BookCatalogBean implements Serializable, BookCatalogInterface { /** * */ private static final long serialVersionUID = 1L; //dichiaro una classe che con i suoi metodi tiene traccia del ciclo di vita di ogni singola entity bean //in questo caso dichiaro anche l'entity bean a cui legarlo("il nome del entity bean viene assegnato //nel file persistence.xml @PersistenceContext(unitName="EntityBean") //dichiaro una ogetto di tipo entitymanager con cui farò tutte le operazioni sull database //"CRUD(Create,Read,Update,Delete" EntityManager em; //creo un ogetto di tipo BookBank protected BookBank book; //creo una collezione di oggetti di tipo BookBank protected Collection<BookBank> bookList; //dichiaro il metodo per scrivere nel nostro entity bean un nuovo record //dopo di che viene scrito anche sul database con "merge" public void addBook(String title, String author, double price) { //initialize the form if (book==null) book=new BookBank(title,author,price); em.merge(book); } //dichiaro il metodo per leggere tutti i record dalla entity bean e quindi dalla nostra tabella //ritorna una collezione di oggetti di tipo BookBank //em.createQuery per creare una query @SuppressWarnings("unchecked") public Collection<BookBank>getAllBooks(){ //nella query si usa la entity bean come nominativi di tabelle e campi non la tabella del database bookList=em.createQuery("select a from BookBank a").getResultList(); return bookList; } } BookCatalogInterface.java //interfaccia che contiene i metodi che fanno da interfaccia per il bean statless package entity.library; import java.util.Collection; import javax.ejb.Remote; //dichiaro che la interfaccia è di tipo remote @Remote public interface BookCatalogInterface { public void addBook(String title,String author, double price); public Collection <BookBank> getAllBooks(); } persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persisten...stence_1_0.xsd" version="1.0"> <persistence-unit name="EntityBean"> <jta-data-source>java:/DefaultDS</jta-data-source> <properties> <!-- <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"/> <property name="hibernate.hbm2ddl.auto" value="create"/> --> <property name="hibernate.archive.autodetection" value="class, hbm"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.password" value="javaset"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/library"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.c3p0.min_size" value="5"/> <property name="hibernate.c3p0.max_size" value="20"/> <property name="hibernate.c3p0.timeout" value="300"/> <property name="hibernate.c3p0.max_statements" value="50"/> <property name="hibernate.c3p0.idle_test_period" value="3000"/> </properties> </persistence-unit> </persistence> index.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <% //pagina di index("quindi la prima che verrà visualizzata quando facciamo il deploy //questa pagina JSP semplicemente reindirizzierà a un altra pagina JSP che si occuperà di raccogliere i dati %> <!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=ISO-8859-1"> <title>Ejb3 JPA Tutorial</title> </head> <body bgcolor="#FFFFCC"> <p align="center"> <font size="6" color="#800000"> Welcome to </br> Ejb3-Jboss 4.2.0 Tutorial</font> ClickBook Catalog Example to execute Library </br></p> </body> </html> form.jsp <% //pagina JSP che contiene una form che indirizza alla pagina JSP che si occupera della conessione //con la nostra applicazione e processera i dati %> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Library</title> </head> <body bgcolor="pink"> <h1>Library</h1> <hr> <form action="WebClient.jsp" method="POST"> Enter the Title: <input type="text" name="t1" size="25"></p> Enter Author name: <input type="text" name="aut" size="25"></p> Enter Price: <input type="text" name="price" size="25"></p> <input type="submit" value="Submit"> <input type="reset" value="Reset"></p> </form> </body> </html> WebClient.jsp <%//è la pagina jsp che effetua il collegamento con il bean statless tramite il remote e usa i metodi della bean //per inserire i dati dentro il database e leggerli%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="entity.library.*,javax.naming.*,java.util.*,javax.naming.*,java.util.*,javax.sql.DataSource,java.sql.*" %> <%! //dichiaro un oggetto di tipo "interfaccia del bean" settato a nullo private BookCatalogInterface bci=null; String s1,s2,s3; Collection list; public void jspInit() { //faccio la conessione al bean statless remote tramite il lookup try { InitialContext ic= new InitialContext(); bci=(BookCatalogInterface) ic.lookup("BookCatalogBean/remote"); System.out.println("Loaded Bank bean"); } catch (Exception ex){ System.out.println("Error"+ex.getMessage()); } } public void jspDestroy(){ bci=null; } %> <% //ricevo i dati della pagina jsp precedente e richiamo il metodo per aggiungere i dati //al entity bean e quindi alla tabella tramite la interfaccia try { s1=request.getParameter("t1"); s2=request.getParameter("aut"); s3=request.getParameter("price"); if( s1!=null&&s2!=null&&s3!=null){ Double price=new Double(s3); bci.addBook(s1,s2,price.doubleValue()); System.out.println("Record added:"); %> </p> Record added </p> <%} //richiamo il metodo per leggere tutti i campi del entity bean e quindi della tabella //tramite la interfaccia e dopo dalla lista stampo tutti i record list=bci.getAllBooks(); for (Iterator iter=list.iterator();iter.hasNext();){ BookBank element=(BookBank)iter.next(); %> Book ID: <%=element.getId() %></p> Title: <%=element.getTitle() %></p> Author: <%=element.getAuthor() %></p> Price: <%=element.getPrice() %></p> <% } }//end of try catch (Exception e){ e.printStackTrace(); } %>

Rispondi quotando

