Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
Direzioni fondamentali per entrare rapidamente nella comprensione di Plone e del suo mondo, e costruire il vostro sistema di gestione contenuti in capo a pochi giorni.
Con PHP Object Injection ci si riferisce ad una classe di vulnerabilità che può affliggere quelle applicazioni PHP che utilizzano la funzione "unserialize" in modo insicuro. Attraverso questo genere di vulnerabilità un potenziale attaccante potrebbe essere in grado di "iniettare" uno o più oggetti all'interno dello scope dell'applicazione. Gli attributi di tali oggetti possono essere modificati arbitrariamente dall'attaccante, e ciò potrebbe causare un comportamento inaspettato del flusso di esecuzione dell'applicazione, che potrebbe consentire all'attaccante di eseguire diverse tipologie di attacchi, o nei casi più gravi di eseguire codice PHP arbitrario.
This is an old presentation I've given for a Lunch&Learn in my previous job. In this presentation I'm trying to explain the concept of Inversion of Control, It's advantages and how Test Driven Development forces you to embrace this approach. When the dependencies becomes many the need for a framework arise, those frameworks are usually called IoC. Than quickly I intruduce the difference in Dynamic Languages as Ruby.
Vuoi ricevere i prossimi contenuti e slide? Iscriviti alla newsletter. È gratis. :) bit.ly/mocanewsletter
Ampia Panoramica ed Introduzione a Google AdWords: Concetti Base e Funzionalità un po' più Avanzate (Estensioni degli Annunci, Ottimizzazione per Fascia Oraria, Campagne Potenziate, Remarketing/Retargeting). Suggerimenti circa i contesti di quando poter utilizzare Google AdWords: quali Obiettivi e quali KPI per Monitorare le Performance. In chiusura, oltre ad alcune Utili Risorse, anche un punto di vista aziendale circa il Rapporto Azienda-Agenzia ed il Conflitto di Interessi che riguarda più da vicino Google.
Con PHP Object Injection ci si riferisce ad una classe di vulnerabilità che può affliggere quelle applicazioni PHP che utilizzano la funzione "unserialize" in modo insicuro. Attraverso questo genere di vulnerabilità un potenziale attaccante potrebbe essere in grado di "iniettare" uno o più oggetti all'interno dello scope dell'applicazione. Gli attributi di tali oggetti possono essere modificati arbitrariamente dall'attaccante, e ciò potrebbe causare un comportamento inaspettato del flusso di esecuzione dell'applicazione, che potrebbe consentire all'attaccante di eseguire diverse tipologie di attacchi, o nei casi più gravi di eseguire codice PHP arbitrario.
This is an old presentation I've given for a Lunch&Learn in my previous job. In this presentation I'm trying to explain the concept of Inversion of Control, It's advantages and how Test Driven Development forces you to embrace this approach. When the dependencies becomes many the need for a framework arise, those frameworks are usually called IoC. Than quickly I intruduce the difference in Dynamic Languages as Ruby.
Vuoi ricevere i prossimi contenuti e slide? Iscriviti alla newsletter. È gratis. :) bit.ly/mocanewsletter
Ampia Panoramica ed Introduzione a Google AdWords: Concetti Base e Funzionalità un po' più Avanzate (Estensioni degli Annunci, Ottimizzazione per Fascia Oraria, Campagne Potenziate, Remarketing/Retargeting). Suggerimenti circa i contesti di quando poter utilizzare Google AdWords: quali Obiettivi e quali KPI per Monitorare le Performance. In chiusura, oltre ad alcune Utili Risorse, anche un punto di vista aziendale circa il Rapporto Azienda-Agenzia ed il Conflitto di Interessi che riguarda più da vicino Google.
Java Web Application Security - Denver JUG 2013Matt Raible
During this presentation, you'll learn how to implement authentication in your Java web applications using good ol' Java EE 6 Security, Spring Security and Apache Shiro. You'll also learn how to secure your REST API with OAuth and lock it down with SSL.
After learning how to integrate security, I'll show how to use Zed Attack Proxy to pentest your app and fix vulnerabilities.
The Modern Java Web Developer - Denver JUG 2013Matt Raible
HTML5, CSS3, JavaScript, jQuery, Angular JS, Bootstrap, Mobile, CoffeeScript, GitHub, functional programming, Page Speed, Apache, JSON with Jackson, caching, REST, Security, load testing, profiling, Wro4j, Heroku, Cloudbees, AWS. These are just some of the buzzwords that a Java web developer hears on a daily basis. This talk is designed to expose you to a plethora of technologies that you might've heard about, but haven't learned yet. We'll concentrate on the most important web developer skills, as well as UI tips and tricks to make you a better front-end engineer. Some of the most valuable engineers these days have front-end JS/CSS skills, as well as backend Java skills.
This extensive course covers all the topics which will definitely make you a Java Superstar. You can do almost anything in Java after this course. You will surely be a better programmer and better still a Elegant programmer after this course.
This document provides an overview of Java fundamentals including its history, key components like the JDK and JRE, how bytecode and the JVM enable platform independence, and core object-oriented programming principles. It describes how Java was created in the early 1990s to control consumer devices, the development of applets for web browsers, and how bytecode compilation allows the same code to run on any device with a Java Virtual Machine.
OOPS Concepts, Java Evolution, Class Object basic, Class Object Constructor overloading, Inheritance, Array and String, Final Abstract class and interfaces, Exceptions, Streams, GUI Applications, Applet Programming, Network Programming and Java Sockets, Multi Threading
Abstract:
* Introduzione a Seam ;
* Ciclo di vita di Seam;
* Component and context;
* Absolute Inversion of Control;
* Rapid Seam development (con esempio di start-up su eclipse o se si preferisce a linea di comando);
* Differenze sostanziali con la versione 3.0 / Ajax and Javascript remoting
The HTTP protocol was created in 1990 and led to the establishment of the World Wide Web by English physicist Tim Berners-Lee. It led to what is now the world's most used language, HTML (Hyper Text Markup Language). HTML5 is being developed as the next major revision of HTML: what is it about? What will it change?
L’eXtensible Markup Language, fin dalla sua nascita, ha avuto un gran consenso da parte di tutti gli attori che operano nel mondo informatico, diventando di fatto la base di molte applicazioni, in particolar modo di quelle che fondano la loro attività sullo scambio di informazioni, per la sua semplicità ed interoperabilità.
jQuery è un framework javascript che permette di semplificare la scrittura di codice javascript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e funzionalità che offre, verificando se il motto "write less do more" sia vero o meno.
5. Java Advanced Bari, 2002 5
Antonio Furone
Interoperabilità
Java to COM : J-Integra, Jacob
COM to Java: JavaBeans ActiveX Bridge
WebServices
CORBA
6. Java Advanced Bari, 2002 6
Antonio Furone
Interoperabilità: Esempio
//Jacob
import com.jacob.com.*;
import com.jacob.activeX.*;
….
private final String ACTIVEX="DENIC.xldap";
private ActiveXComponent activeX_comp=null;
private String org_group="o=telecom italia group";
….
activeX_comp = new ActiveXComponent(ACTIVEX);
Variant org=new Variant(org_group);
Dispatch.call(activeX_comp,"setOrganization", org);
….
Variant usr = new Variant(user);
Variant psw = new Variant(password);
Variant info = new Variant("");
Variant v = Dispatch.call(activeX_comp,"chkUtente0", usr,psw,info);
….
Variant usr = new Variant(user);
Variant info = new Variant("mail");
Variant v = Dispatch.call(activeX_comp,"getValue", usr,info);
7. Log delle applicazioni (Log4J)
Elementi cardine della libreria: i logger, gli appender, i layout e i livelli
Logger: Componente che il programma utilizza per registrare gli eventi. Sono
organizzati ad albero gerarchico la cui radice (log root) può essere recuperata
attraverso il metodo statico getInstance();
Appender: Deposito nel quale si possono registrare gli eventi. Esistono
diversi tipi di appender, ma i più utili sono quelli basati su file, su console, su
DB, mail, socket …
Layout: Forma con la quale vengono registrati i messaggi (Html, Xml, …)
Livelli : Ogni messaggio ha un livello di gravità dell’errore (DEBUG, INFO,
WARN, ERROR, FATAL)
Java Advanced Bari, 2002 7
Antonio Furone
8. Java Advanced Bari, 2002 8
Antonio Furone
Log4J
Esistono due modalità per configurare Log4j all’interno di una applicazione:
via codice o attraverso un file di property
import org.apache.log4j.PropertyConfigurator;
…
PropertyConfigurator.configure(“path/to/file.properties”);
File di properties
log4j.rootLogger=DEBUG, F1
…
log4j.appender.F1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.F1.File=detail.log
log4j.appender.F1.DatePattern=‘.’yyyy-MM-dd-HH-mm’.log’
log4j.appender.F1.layout=org.apache.log4j.HTMLLayout
Codice
import org.apache.log4j.*;
…
static Logger log=Logger.getRootLogger(); // getLogger(“name”);
…
log.info(“…start”);
log.warn(“…warning”);
log.debug(“messaggio di debug”);
log.error(“…errore”);
log.fatal(“… fatal error”);
11. Java Advanced Bari, 2002 11
Antonio Furone
J2EE: Vantaggi
Architettura e sviluppo semplificati
• modello di sviluppo basato sui componenti
• paradigma “Write Once, Run Anywhere”
Scalabilità
• I container forniscono meccanismi che
permettono di ottenere un alto livello di
scalabilità senza richiedere l’intervento dello
sviluppatore
• E’ possibile configurare i container in modo
che le applicazioni vengano distribuite su più
calcolatori (load balancing)
Integrazione di SI preesistenti
• La piattaforma include un insieme di API
standard per accedere a SI aziendali: JDBC,
Java Transaction API, Java Naming and
Directory Service, Java Message Service
(IBM MQ Series, TIBCO), Java Mail, Java
IDL, Connector Architecture
Scelta di server strumenti e
componenti
• Server sviluppati da più produttori
• IDE che facilitano sviluppo, deployment e
gestione delle applicazioni
• Riuso dei componenti (anche di mercato)
Modello per la sicurezza flessibile
12. Java Advanced Bari, 2002 12
Antonio Furone
Java Server Page / Servlet
Tecnologia per la costruzione di pagine web con contenuti dinamici
<%@ page import=“java.text.*,java.util.*” %>
<html>
<body>
<% Date d=new Date();
String today=DateFormat.getDateInstance().format(d);
%>
Today is:
<em><%=today%></em>
</body>
</html>
Compilazione
Servlet
public class … extends HttpServlet
{
public void init(ServletConfig config) throws ServletException {…}
public String getServletInfo() {…}
protected void doGet(HttpServletRequest request, HttpServletResponse response){…}
protected void doPost(HttpServletRequest request, HttpServletResponse response){…}
…
}
15. Java Advanced Bari, 2002 15
Antonio Furone
Custom Tag
Le Custom Tag Libraries sono uno strumento messo a disposizione a
partire dalle specifiche 1.1 che consentono di costruire contenitori di tag JSP
riutilizzabili;
I Custom Tag interagiscono con la pagina e sono utilizzati per incapsulare
funzionalità di generazione dinamica di codice HTML;
Una Tag Library è composta da:
• Tag Library Descriptor (TLD): documento XML che descrive la libreria;
• Tag Handler : classe Java che ne implementa le funzionalità;
16. TLD
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
Java Advanced Bari, 2002 16
Antonio Furone
Custom Tag
Dichiarazione Tag Library (web.xml)
<taglib>
<taglib-uri>http://www.platnet.it/taglib</taglib-uri>
<taglib-location>/WEB-INF/platnet.tld</taglib-location>
</taglib>
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>platnetlib</shortname>
<uri>http://www.platnet.it/taglib</uri>
<info>Plat-net Tag Library</info>
<!--Un semplice Tag -->
<tag>
<name>wellcome</name>
<tagclass>SAMMIT.server.tag.Wellcome </tagclass>
<!--Body content può avere I seguenti valori:
empty: no body
JSP: Il contenuto di body è valutato dal container e processato dal Tag Handler
tagdependent: : Il contenuto di body viene processato solo dal Tag Handler; il codice JSP contenuto in
body non viene valutato dal container .
-->
<bodycontent>empty</bodycontent>
<info>
Il classico esempio "Hello World" rivisitato con I Tag.
</info>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
17. Java Advanced Bari, 2002 17
Antonio Furone
Custom Tag
Tag Handler : per ogni attributo è necessario implementare i metodi get/set
…
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class Wellcome extends TagSupport {
private String name=null;
public void setName(String value){
name = value;
}
public String getName(){
return(name);
}
// doStartTag viene chiamato dal JSP container quando
// il TAG viene trovato.
public int doStartTag() {
try {
JspWriter out = pageContext.getOut();
out.println("<table border="1">");
if (name != null)
out.println("<tr><td> Benvenuto/a " + name
+ "</td></tr>");
else
out.println("<tr><td> Benvenuto a chi? </td></tr>");
}
catch (Exception ex) {
throw new Error(“Si è verificato un errore.");
}
// Dovrò ritornare SKIP_BODY perché comunque il
body è vuoto
// come è stato specificato nel file TLD.
return SKIP_BODY;
}
// doEndTag() viene chiamato dal JSP container quando viene
// trovato il segno di chiusura del tag
public int doEndTag(){
try {
JspWriter out = pageContext.getOut();
out.println("</table>");
}
catch (Exception ex){
throw new Error(" Si è verificato un errore.");
}
}
}
Utilizzo
<%@ taglib uri="http://www.platnet.it/taglib" prefix=“plat" %>
<html>
<head>
<title>Utilizzo Tag</title>
</head>
<body bgcolor="#ffffff">
<hr />
<plat:wellcome name=“Paperino"/>
<hr />
</body>
</html>
18. JSP Standard Tag Library (JSTL)
Insieme di tag, sviluppati in seno al Java Comunity Process dell’Apache Group, consiste in una
collezione di Custom Tag Library, organizzate e suddivise per categorie funzionali. Diverrà
standard con la specifica JSP 2.0.
Java Advanced Bari, 2002 18
Antonio Furone
Componenti fondamentali
http://java.sun.com/products/jsp/jstl/
Libreria URI Namespace Funzionalità
core http://java.sun.com/jstl/core c Programmazione
XML
http://java.sun.com/jstl/xml x XML e XLST
processing
I18N http://java.sun.com/jstl/fmt fmt Localizzazione
RDB access http://java.sun.com/jstl/sql sql Accesso a RDBMS
EL (Expression Language)
Linguaggio per l’accesso immediato ad oggetti e loro proprietà all’interno di pagine JSP
${customer.id}$
${customer.[“id”]}$
${customer.[propertyName]}$
${customerList[0]}$
19. Java Advanced Bari, 2002 19
Antonio Furone
EL: Operatori
Operatore Sinonimo Funzione
+ Somma
- Differenza
* Moltiplicazione
/ div Divisione
% mod Modulo
== eq Uguaglianza
empty Riferimento a null, stringa di lunghezza 0, array
o collection privo di elementi
!= ne Differenza
> gt Maggioranza
>= ge Maggioranza o uguaglianza
< lt Minoranza
<= le Minoranza o uguaglianza
&& and And
|| or Or
! not Not
20. Java Advanced Bari, 2002 20
Antonio Furone
EL: Oggetti Impliciti
Oggetto Semantica
pageContext Oggetto pageContext corrente
pageScope Un vettore associativo le cui chiavi corrispondono ai nomi degli attributi con
scope di pagina, ed i cui valori corrispondono ai valori dei rispettivi attributi
requestScope “” ma riferito alla richiesta http
sessionScope “” ma riferito alla sessione
applicationScope “” ma riferito allo scope application
param “” ma riferito ai parametri come da ServletRequest.getParameterValues()
paramValues “” ma riferito ai parametri sotto forma di String[]
header “” ma riferito ai valori dei request header come da
HttpServletRequest.getHeader()
headerValues
cookie “” ma riferito ai cookie (javax.servlet.http.Cookie
initParam “” ma riferito ai parametri di inizializzazione come da
ServletContext.getInitParameter()
21. Java Advanced Bari, 2002 21
Antonio Furone
JSTL:Esempi
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
…
<table border="1">
<tr>
<td>Contatto</td>
</tr>
<c:forEach var="contact" items="${addressBook.contacts}$">
<tr>
<td>
<c:out value="${contact.name}$" />
</td>
</tr>
</c:forEach>
</table>
Ogni oggetto definito in uno scope JSP valido (pagina, request, session, application) viene
automaticamente riconosciuto e può essere utilizzato nelle espressioni EL.
23. Java Advanced Bari, 2002 23
Antonio Furone
EJB: Vantaggi
Semplificazione del processo di sviluppo
Riusabilità del codice e modularità
Robustezza
Gestione automatica di:
• transazioni (Commit, Rollback e Recovery);
• scalabilità: aumentando l’hw, le prestazioni aumentano in modo lineare;
• sicurezza;
Alte prestazioni
• bilanciamento dei carichi di lavoro;
• caching delle connessioni al database;
24. Java Advanced Bari, 2002 24
Antonio Furone
EJB: Esempio
Web Server EJB Container
Client Servlet
DBMS 1
DBMS 2
Shopping
Cart
Credit
Order
Transaction
Server
Begin
Commit
Application Server
25. Enterprise
Bean
Instance
Java Advanced Bari, 2002 25
Antonio Furone
EJB: L’architettura
Client
EJB Server
EJB Container
EJB Server: Application Server
EJB Container: Gestore di EJB
26. Java Advanced Bari, 2002 26
Antonio Furone
EJB: Server
Permette di utilizzare i componenti da client remoti
Fornisce ai container i seguenti servizi:
Gestione delle risorse di sistema
Mantenimento dello stato
Gestione/attivazione di processi/thread
Sicurezza
Gestisce le politiche di ottimizzazione delle prestazioni:
Pooling e caching delle connessioni a DB
clustering
fault tollerance
caching dei bean
Web Logic - Bea
Websphere AS – IBM
Orbix – Iona
Oracle AS – Oracle
JBoss
27. Java Advanced Bari, 2002 27
Antonio Furone
EJB: Container
Ospita ed esegue gli EJB
Client
EJB Container
Bean
EJB Server
home
remote
28. Java Advanced Bari, 2002 28
Antonio Furone
EJB: Enterprise Bean
E’ il componente vero e proprio
Classe Java specializzata in cui risiede la logica di business
dell’applicazione
Deve essere installato (deployment) sull’application server
Fa uso di servizi offerti dall’ambiente di esecuzione EJB:
• Transazioni
• Sicurezza
• Persistenza
29. Non è persistente
Implementa l’interfaccia javax.ejb.SessionBean
In genere implementa la logica di business dell’applicazione
Può essere stateless o statefull
Java Advanced Bari, 2002 29
Antonio Furone
EJB: Tipologie
Session Bean
Entity Bean
Oggetto persistente (dati memorizzati su DB)
Consente di mappare una sorgente dati su una classe Java
La lettura modifica di un attributo si traduce nelle corrispondenti
operazioni sul DB
Ciascuna istanza è condivisa da più client
Implementa l’interfaccia javax.ejb.EntityBean
30. • Viene creata una sessione 1:1 con uno specifico client
• Viene mantenuto lo stato tra l’invocazione di un metodo e un altro
• Quando il client si disconnette il componente viene rimosso
Java Advanced Bari, 2002 30
Antonio Furone
EJB: Session Bean
Stateful
Stateless
• Non viene mantenuto alcuno stato tra l’invocazione di un metodo e
l’altro
• Una stessa istanza del bean può servire contemporaneamente più client
(+ performance)
31. Java Advanced Bari, 2002 31
Antonio Furone
EJB: Entity Bean
Fornisce i metodi per agire sui dati che esso stesso rappresenta
Ciascuna istanza di un Entity Bean è identificata in modo univoco da
una chiave primaria (rappresentata da più campi della tabella): la
PrimaryKey
La persistenza dei dati può essere a carico del :
Container: Container Managed Persistence (CMP)
Bean: Bean Managed Persistence (BMP)
32. Java Advanced Bari, 2002 32
Antonio Furone
EJB: BMP
L’interfacciamento alle tabelle del DB è cablato all’interno del codice
Lo sviluppatore implementa (tramite JDBC) i metodi di accesso al DB:
ejbCreate(), ejbLoad(), ejbStore(), ejbRemove()
Frequenti modifiche al codice in caso di : cambio DB vendor,
modifiche allo schema del DB
Possibilità di ottimizzare l’accesso al DB
33. • Genera in automatico il codice SQL per l’accesso alle tabelle del DB
• L’accesso ai dati da parte del client si traduce in opportune query sul DB
• La modifica dei dati contenuti nel bean si traduce in opportune update sul DB
Java Advanced Bari, 2002 33
Antonio Furone
EJB: CMP
Accesso al DB completamente gestito dal container:
Meno performanti rispetto ai BMP
EJB più rubusti: meno JDBC implica un gran numero di righe di
codice in meno: meno errori
34. EJB: Vista dello sviluppatore
EJB
Class
EJB Container
Java Advanced Bari, 2002 34
Antonio Furone
EJB Server
EJBHome
Interface
EJBObject
Interface
EJBHome
Class
EJBObject
Class
Le interfacce EJBHome
e EJBObject incapsulano
l’accesso all’oggetto
vero e proprio
Il deploy descriptor
specifica al container gli
attributi transazionali e di
sicurezza con cui
accedere all’oggetto (ejb-jar.
xml)
35. Java Advanced Bari, 2002 35
Antonio Furone
EJB: Home
Fornisce i metodi per ottere riferimenti ad istanze del componente:
create(), find…()
Consente la rimozione di una istanza
…
import javax.ejb.*;
import java.rmi.*;
public interface DemoHome extends EJBHome
{
public Demo create() throws CreateException,
RemoteException
}
36. Java Advanced Bari, 2002 36
Antonio Furone
EJB: Remote
Contiene l’elenco dei metodi che il client può invocare
E’ il container che deve generare il codice (l’implementazione) per
questa interfaccia
…
import javax.ejb.*;
import java.rmi.*;
public interface Demo extends EJBObject
{
public String miaFunzione() throws RemoteException;
}
37. Java Advanced Bari, 2002 37
Antonio Furone
EJB: JavaBean Class
Implementa la logica di business dell’applicazione
Può essere di due tipi EntityBean o SessionBean a seconda dell’interfaccia che
implementa
Le interfacce prevedono metodi specifici (invocati esclusivamente dal container) per la
gestione della creazione, attivazione, passivazione dei bean stessi
import…
public class DemoBean implements SessionBean
{
public void ejbActivate(){… }
public void ejbRemove(){… }
public void ejbPassivate(){… }
public void ejbCreate(){… }
public String miaFunzione() throws RemoteException
{
return new String(“Hello World !”);
}
}
Implementa i metodi della
SessionBean Interface
Corrisponde alla create() della
Home
38. EJB: JavaBean Class (solo per EntityBean)
Incapsula la chiave primaria con cui effettuare la ricerca di specifiche istanza
Java Advanced Bari, 2002 38
Antonio Furone
Ogni EntityBean deve avere una Primary Key
La Primary Key deve essere serializzabile
public class AssOfPsXContrBMPBean extends AbstractEntityCommonBean implements EntityBean
{
public EntityContext entityContext;
private AssOfPsXContrBMPPK pk;
public AssOfPsXContrBMPPK ejbCreate(…)
throws CreateException, RemoteException, CustomEJBException
{
pk=new AssOfPsXContrBMPPK();
….
return pk;
}
public void ejbPostCreate(…)
{}
public AssOfPsXContrBMPPK ejbFindByPrimaryKey(AssOfPsXContrBMPPK primaryKey) throws FinderException, RemoteException
{}
public Collection ejbFindAll(…) throws FinderException, RemoteException
{}
}
Tutti i metodi find…() (es. findByName()) ritornano collection di Primary Key
39. Client
EJBHome
class
EJB Container
EJB
class
EJB Server
create()
Java Advanced Bari, 2002 39
Antonio Furone
EJB: Il Client
private AssOfPsXContrSTLHome home=null;
private AssOfPsXContrBMP remote = null;
private AssOfPsXContrBMPPK pk = new AssOfPsXContrBMPPK();
…
Context context=null;
context = new InitialContext(); // JNDI initial Context (Conn.ne con il servizio di Naming)
…
Object object = context.lookup("AssOfPsXContrBMP");
home = (AssOfPsXContrBMPHome)PortableRemoteObject.narrow(object,
AssOfPsXContrBMPHome.class);
…
remote= home.create(…);
41. Java Advanced Bari, 2002 41
Antonio Furone
Deploy di un applicazione
Il deploy di un applicazione viene effettuata sugli application server attraverso
appositi jar files contenenti (tra l’altro) i descriptor relativi alle applicazioni web
e agli ejb.
.war .ear
.jar
42. Java Advanced Bari, 2002 42
Antonio Furone
ANT
E’ un tool per il building delle applicazioni (es. make, gnumake, nmake, jam,…)
Differenze con gli altri tool:
Configurazione basata su documenti XML
E’ possibile creare delle dipendenze (multiple) tra task
Estendibile tramite classi java (no shell command)
Running
ant (esecuzione build.xml dalla directory corrente)
ant –buildfile test.xml
ant deploy
43. Java Advanced Bari, 2002 43
Antonio Furone
ANT: Esempi
<target name="prepare"
description="Creates the build and dist directories" >
<echo message="Creating the required directories...." />
<mkdir dir="${build}/client/${example}" />
<mkdir dir="${build}/server/${example}" />
<mkdir dir="${build}/shared/${example}" />
<mkdir dir="${build}/wsdeploy-generated" />
<mkdir dir="dist" />
<mkdir dir="${build}/WEB-INF/classes/${example}" />
</target>
<target name="compile-server" depends="prepare"
description="Compiles the server-side source code">
<echo message="Compiling the server-side source code...."/>
<javac
srcdir="."
destdir="${build}/shared"
includes="*.java"
excludes="*Client.java"
/>
</target>
<taskdef name="start" classname="org.apache.catalina.ant.StartTask" />
…
<target name="start"
description="Starts a Web application">
<echo message="Starting the application...."/>
<start
url="${url}"
username="${username}"
password="${password}"
path="/${context-path}"
/>
</target>
44. Java Advanced Bari, 2002 44
Antonio Furone
Web Service
E’ un servizio offerto via web (attraverso il protocollo http)
In uno scenario tipico : una business application invia una richiesta ad uno
specifico URL (identifica il servizio) utilizzando il protocollo SOAP. Il WS riceve
la richiesta, la processa e ritorna un risultato.
Tipologie di WS e API utilizzate:
Java API for XML-based RPC (JAX-RPC);
Java API for XML-messaging (JAXM) : infrastruttura per l’invio di messaggi XML via Web;
Java API for XML-registries (JAXR) : infrastruttura utilizzata per il building, il deployment,
discovery di WS;
48. Java Advanced Bari, 2002 48
Antonio Furone
Modello MVC
BROWSER
JSP/Servlet
request
JSP/Servlet
response
forward
bean
49. Java Advanced Bari, 2002 49
Antonio Furone
Framework: STRUTS
Progetto open source per lo sviluppo di applicazione web attraverso
Servlet e JSP
Implementazione dell’architettura MVC
Funzionalità principali:
• Dispatching delle request attraverso appropriate Action class
• Custom Tag Library per il supporto alla creazione form interattive
• Classi di utility : Parsing XML, Popolamento automatico di JavaBeans,
Internazionalizzazione, …