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();
    		}
    		%>