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