Distribuzione di Applicazioni Java



Documenti analoghi
Cosa è importante: pom.xml Goal Plug-in Repository

Linguaggi di Programmazione

Strumenti Java. Fondamenti di informatica L-B A.A Alessandra Toninelli

Guida introduttiva su Eclipse. Ing. Marco Dell'Unto

Anno Accademico Laboratorio di Tecnologie Web Introduzione ad Eclipse

NetBeans. Dott. Ing. Rossella Rubino A.A. 2007/2008 Laboratorio II CdL: Operatore Informatico Giuridico

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A.

PG5 Starter Training Applicazione File System Daniel Ernst EN Stefano Peracchi IT

Fondamenti di Informatica T2 Modulo 2

Installazione. Eclipse. Workspace. Primo Avvio. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A. 2008/2009

Eclipse e SDK. Capiamo che sistema operativo abbiamo

Ambienti di Sviluppo. Linguaggi compilati

Ingegneria del Software 1: Eclipse

APPLICAZIONI & APPLET

07 JAR e Javadoc. Danilo Pianini Giovanni Ciatto, Angelo Croatti, Mirko Viroli

PG5 Starter Training Applicazione Daniel Ernst EN Stefano Peracchi IT

Android. Creazione e pubblicazione di un applicazione. Corso di programmazione di sistemi mobile 1

L IDE NETBEANS. (slide: A. Baratè) Programmazione per la Musica Adriano Baratè

Application VS Applet

Le command line di Java

Tomcat & Servlet. Contenuti. Programmazione in Ambienti Distribuiti. Tomcat Applicazioni Web. Servlet JSP Uso delle sessioni

Università di Ferrara Facoltà di Ingegneria. Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Corso sul linguaggio Java

Primi passi con Apache Tomcat. L application server dell Apache group

05 JAR file, Javadoc, Polimorfismo Parametrico e Introduzione al Java Collections Framework

Agenda. Agenda. Credenziali. Configurazione del Proxy (1/2) Configurazione del Proxy (2/2) Fondamenti di Informatica T2 Modulo 2

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Agenda

ADaMSoft. Procedure per l installazione del software in ambiente Microsoft Windows 3/6/2008. Powered by:

Programmazione Orientata agli Oggetti in Linguaggio Java

INSTALLAZIONE DI JAVA

Procedura di inserimento automatico

Università di Ferrara. Facoltà di Ingegneria. Esercitazioni di

HOWTO Install Raptor ICA on Debian Linux

PROGETTO DI RETI DI CALCOLATORI E SISTEMI INFORMATICI

Prof. Pagani corrado JAVA

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

Corso sul linguaggio Java

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi

Fondamenti di Informatica T-1. Guida al LAB4 Introduzione a JDK e Eclipse

Introduzione a Visual Studio 2005

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso sul linguaggio Java

Anno Accademico Laboratorio di Tecnologie Web Introduzione a Tomcat

Java: un linguaggio per applicazioni di rete

Esercitazione n 1. Obiettivi

Il concetto di Package

Eclipse for the dummies. Primi passi nel mondo Eclipse Lorenzo Cioni LIP 1 Modulo a.a. 2006/2007

Installazione Java Standard Edition (SDK)

REGIONE BASILICATA UFFICIO S. I. R. S.

Laboratorio di Programmazione Laurea in Bioinformatica

Configurazione di Eclipse con Liferay 5.2.2/6.0.6/6.1.0 Mac/Linux

Installazione dell SDK sotto Windows

Antonio d Acierno 13/01/2006

Password di accesso al database criptata

Università di Ferrara Facoltà di Ingegneria. Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

1 Installazione di Mingw e conseguente configurazione di TextPad

Linea di comando. Compilazione. Aprire una shell di DOS tramite:

1 - Accesso ad una IView nel PCD tramite Portal Component

MS Visual Studio: Linea di Comando

AMBIENTI DI PROGRAMMAZIONE

Fondamenti di Informatica T-1. Guida al LAB3 Introduzione a JDK e Eclipse

Programmazione Orientata agli Oggetti in Linguaggio Java

Cabel.

Installazione di Java

testo Saveris Web Access Software Istruzioni per l'uso

Laboratorio di Informatica

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Ambienti di Sviluppo

INTRODUZIONE AD OMNET++

Istallazione di Java - Uso delle librerie

Java. Traditional portability (ideal)

Istruzioni per l installazione del Local Scheduler

ZonabitOrario TUTORIAL

Programmazione Orientata agli Oggetti in Linguaggio Java

Laboratorio di Informatica

Le basi del linguaggio Java

FONDAMENTI DI ARCHITETTURE E PROGRAMMAZIONE (EDIZIONE 2) Configurazione Compilazione ed esecuzione Installazione del package prog

Esplorare e modificare il file system Compilare con gcc Lanciare un programma da linea di comando

KISSsoft 03/2014. Installazione di una licenza "floating" KISSsoft. KISSsoft AG Rosengartenstrasse Bubikon Switzerland

Esecuzioni client-side: le Applet

Fondamenti di Informatica T-1

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

Introduzione al DEV C++

Tecnologie di Sviluppo per il Web

EJB Components. Leonardo Mariani Esercitazione di Sistemi Distribuiti. Oggetti Distribuiti

Documentazione e tutorial

Laboratorio di Informatica

Software utilizzato per le esercitazioni

Tutorial web Application

Per richiedere il certificato l utente deve provvedere, nel proprio ambiente informatico, alla generazione della CSR (Certificate Sign Request).

Le command line di Java. Esercitazioni di Sistemi Operativi III Lezione n. 2

Downloading and Installing Software Socio TIS

Programmazione in Java e gestione della grafica (I modulo) Lezione 2: Prime nozioni di Java

Transcript:

Distribuzione di Applicazioni Java Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi 1 PdR_09010 - Stefano Millozzi

Introduzione Necessità di distribuire applicazioni sviluppate in Java I programmi Java.class non sono eseguibili senza il JRE Non possono essere compilati come eseguibili nativi (.exe,.bin ecc) a meno di wrapper exe (cenni di seguito) A seconda del tipo di applicazione Java è possibile predisporre un opportuno archivio che contiene file compilati in bytecode, risorse varie, eventuale codice sorgente I tipi di applicazione che ci interessano sono: 1) Applicazione Web 2) Applicazione client (GUI o da terminale) 3) Libreria Java 2 PdR_09010 - Stefano Millozzi

1) Applicazione WEB Le applicazioni WEB si distribuiscono come singolo file WAR all interno del quale ci sono: Descrittore web.xml dell applicazione e di eventuali ulteriori descrittori specifici dei server (jboss.xml ecc) Cartella WEB-INF File html, immagini, risorse web statiche varie Cartella root e sottocartelle ad esclusione di WEB-INF File.class corrispondenti a servlet e classi di supporto varie cartella WEB-INF/classes File.jar delle librerie che sono utilizzate nell applicazione cartella WEB-INF/lib Il singolo file WAR corrisponde ad UNA applicazione web In eclipse: Export WAR 3 PdR_09010 - Stefano Millozzi

2) Applicazione Client (GUI o Terminale) Le applicazioni classiche (con un main) si distribuiscono come file JAR all interno del quale ci sono: File.class corrispondenti alle classi utilizzate e seguono una struttura a cartelle analoga a quella dei package Il file MANIFEST.MF che contiene il nome della classe che contiene il main da avviare (ci possono essere più main nella applicazione, ma in un JAR se ne può specificare solo uno da eseguire) cartella META-INF Per eseguire il programma: se l estensione è collegata a Java, il doppio click avvia l applicazione. Da linea comando: JAVA jar nomefile.jar In eclipse: Export Runnable JAR 4 PdR_09010 - Stefano Millozzi

3) Libreria Libreria che contiene una raccolta di classi varie ed è strutturata nel seguente modo: File.class corrispondenti alle classi utilizzate e seguono una struttura a cartelle analoga a quella dei package Risorse varie Le librerie possono essere incluse in altri programmi Java ma, in genere, non sono eseguibili In eclipse: Export JAR 5 PdR_09010 - Stefano Millozzi

4) WebStart Distribuire eseguibili JAR dal WEB Tutte le librerie (JAR) e risorse sono pubblicate su un servet WEB (come contenuto statico) E presente un descrittore.jnlp nel quale sono indicate le URL di tutte le librerie che compongono l applicazione e il main da avviare Il JRE contiene un programma (WebStart) che interpreta i file.jnlp e li esegue Gestisce in automatico l update delle versioni Permette di aggiungere il programma Java nella lista delle applicazioni del sistema operativo Tutorial: http://java.sun.com/javase/6/docs/technotes/guides/javaws/ In locale cartella docs del JDK docs/technotes/guides/javaws/developersguide/contents.html 6 PdR_09010 - Stefano Millozzi

<?xml version="1.0" encoding="utf-8"?> <!-- JNLP File for SwingSet2 Demo Application --> <jnlp spec="6.0+" codebase="http://my_company.com/jaws/apps" href="swingset2.jnlp"> <information > <title>swingset2 Demo Application</title> <vendor>sun Microsystems, Inc.</vendor> <homepage href="docs/help.html"/> <description>swingset2 Demo Application</description> <description kind="short">a demo of the capabilities of the Swing Graphical User Interface. </description> <icon href="images/swingset2.jpg"/> <icon kind="splash" href="images/splash.gif"/> 7 PdR_09010 - Stefano Millozzi

<offline-allowed/> <association mime-type="application-x/swingset2-file" extensions="swingset2"/> <shortcut online="false"> <desktop/> <menu submenu="my Corporation Apps"/> </shortcut> </information> <information os="linux"> <title>swingset2 Demo on Linux</title> <homepage href="docs/linuxhelp.html"/> </information> <resources> <j2se version="1.6+" java-vm-args="-esa -Xnoclassgc"/> <jar href="lib/swingset2.jar"/> </resources> <application-desc main-class="swingset2"/> </jnlp> 8 PdR_09010 - Stefano Millozzi

WebStart e sicurezza Una applicazione scaricata tramite Web Start non può fare tutto quello che fa una applicazione. Poiché può essere scaricata dalla rete, sarebbe troppo pericoloso permettere all applicazione di fare qualunque cosa. E costretta a rispettare un ben preciso modello di sicurezza ("sandbox") è eseguita in una "scatola" da cui non può uscire non può contaminare (o spiare) i dati del computer dell'utente Si utilizzano gli stessi criteri restrittivi impiegati per le Applet 9 Progetto di Reti AA 2008/09- Stefano Millozzi

Cosa non è permesso fare Un'applicazione WebStart di norma non può: accedere al file system locale (neppure per leggere un file) eseguire un altro programma ottenere informazioni sull'utente connettersi via rete a un computer diverso da quello da cui è stata scaricata caricare la libreria Java, chiamare System.exit() 10 Progetto di Reti AA 2008/09- Stefano Millozzi

Cosa non è permesso fare /2 Property di sistema che possono essere accedute e quelle che non possono essere richieste System.getProperty(String ) 11 Progetto di Reti AA 2008/09- Stefano Millozzi

Applicazioni firmate Problema: in molte situazioni, questi vincoli sono troppo rigidi rischierebbero di rendere impossibile la costruzioni di applet utili. Soluzione Attraverso tecnologie di cifratura, una applicazione può essere firmata, ossia a essa può essere allegato un certificato che ne garantisce l'origine. Alle applicazioni firmate, cui si attribuisce maggiore fiducia, l'utente può consentire di svolgere alcune o tutte le operazioni sottoposte a vincolo. 12 Progetto di Reti AA 2008/09- Stefano Millozzi

Applicazioni firmate SENDER (Server side) 1. Compile the application 2. Create a JAR file 3. Generate Keys (via keytool) 4. Sign the JAR file (via jarsigner) 5. Export the Public Key Certificate RECEIVER (Client side) 1. Import the Certificate as a Trusted Certificate 2. Create/adjust a policy file (file that controls what certified Applets are allowed to do) 3. Run the application 13 Progetto di Reti AA 2008/09- Stefano Millozzi

KEYTOOLS http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keyto ol.html The first thing you need to do is create a keystore and generate the key pair. You could use a command such as the following: keytool -genkey -dname "cn=progetto Reti, ou=javasoft, o=sun, c=us -alias reti -keypass keypass -keystore c:\working\mykeystore -storepass storepass -validity 180 Generating a self-signed certificate A self-signed certificate is one for which the issuer (signer) is the same as the subject (the entity whose public key is being authenticated by the certificate). Whenever the -genkey command is called to generate a new public/private key pair, it also wraps the public key into a self-signed certificate. 14 Progetto di Reti AA 2008/09- Stefano Millozzi

JARSIGNER http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/j arsigner.html jarsigner -keystore C:\working\mystore -storepass storepass -keypass keypass MyJarFile.jar alias 15 Progetto di Reti AA 2008/09- Stefano Millozzi

Automatismi nella compilazione e distribuzione dei programmi ANT Ant è un tool scritto in Java che permette di organizzare la creazione e il deploy di classi java in ambienti distribuiti e multipiattaforma Ant è basato su un unico programma che legge le azioni da intraprendere da un file XML (default: build.xml) È open source e freeware, scaricabile dal sito:http://ant.apache.org Vantaggi È possibile compilare le classi utilizzando il jdk installato sul sistema finale Non è necessario avere un IDE installato o creare lunghi file batch per compilare le classi con tutti i riferimenti alle librerie necessarie È possibile automatizzare l avvio o il deploy delle applicazioni al termine della compilazione È possibile far creare con semplici passaggi degli archivi.jar,.war o.ear per il deployment delle classi 16 PdR_09010 - Stefano Millozzi

Installazione di ant Scaricare ant e decomprimerlo in una cartella (consiglio la stessa in cui è installato Tomcat) Inserire il path della cartella di ant nella variabile ANT_HOME Inserire nella variabile PATH il percorso ANT_HOME/bin

Un primo programma in ant Creare il file build.xml contenente il seguente testo: <?xml version="1.0" encoding="utf-8"?> <project name="myproject" default="mytarget" basedir="."> <target name="mytarget" depends="mytarget.check" if="mytarget.run"> <echo>files foo.txt and bar.txt are present.</echo> <target name="mytarget.check"> <condition property="mytarget.run"> <and> <available file="foo.txt"/> <available file="bar.txt"/> </and> </condition> </project>

Eseguire ant Esecuzione da linea di comando Aprire una shell di comandi e spostarsi nella directory in cui si è creato il file build.xml Eseguire il comando # ant Se non esistono i file foo.txt e bar.txt non si vedrà la scritta Files foo.txt and bar.txt are present. Creare i file e rieseguire ant Esecuzione da IDE Molti IDE interpretano correttamente i file ANT (es. Eclipse) ed è possibile mandarli in esecuzione direttamente dall ambiente

Classpath <classpath> <pathelement path="${classpath}"/> <fileset dir="lib"> <include name="**/*.jar"/> </fileset> <pathelement location="classes"/> <dirset dir="${build.dir}"> <include name="apps/**/classes"/> <exclude name="apps/**/*test*"/> </dirset> <filelist refid="third-party_jars"/> </classpath>

Tag java Il tag java è utilizzato per eseguire una classe: <java classname="test.main"> <arg value="-h"/> <classpath> <pathelement location="dist/test.jar"/> <pathelement path="${java.class.path}"/> </classpath> </java>

Tag javac Il tag javac è usato per compilare una o più classi: Anche con svariati attributi di compilazione: <javac srcdir="${src}" destdir="${build}"/> <javac sourcepath="" srcdir="${src}" destdir="${build}"> <include name="**/*.java"/> <exclude name="**/example.java"/> </javac>

Tag property name value location resource file url Attribute the name of the property to set. <property name="src" the value of the property. <property name="compile" value="2"/> Description Sets the property to the absolute filename of the given file. <property name="src" location="src"/> the resource name of the property file. <property resource="foo.properties"/> the filename of the property file. <property file="ant-global.properties"/> <property file="${user.home}/ant-global.properties"/> the url from which to read properties. <property url="http://www.mysite.com/bla/foo.properties"/>

Un semplice buildfile <project name="myproject" default="dist" basedir="."> <description>simple example build file</description> <!-- set global properties for this build --> <property name="src" location="src"/> <property name="build" location="build"/> <property name="dist" location="dist"/> <target name="init"> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure --> <mkdir dir="${build}"/>

Un semplice buildfile <target name="compile" depends="init" description="compile"> <!-- Compile the java code from ${src} into ${build} --> <javac srcdir="${src}" destdir="${build}"/> <target name="dist" depends="compile" description="generate the distribution" > <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <! put ${build}into the MyProject-${DSTAMP}.jar file --> <jar jarfile="${dist}/lib/myproject-${dstamp}.jar" basedir="${build}"/>

Un semplice buildfile <target name="clean" description="clean up" > <!-- Delete the ${build} and ${dist} directory --> <delete dir="${build}"/> <delete dir="${dist}"/> </project>

Diversi target Eseguendo il comando # ant <target> Dove <target> è il nome di un target definito nel file build.xml, viene eseguito solo quel particolare target.

Esempio buildfile con più target <?xml version="1.0" encoding="utf-8"?> <project name="ejb Mail BottegaVerde Project" default="ejb-jar" basedir="."> <target name="init"> <!-- Project Directories --> <property name="src.dir" value="${basedir}/ejbmodule" /> <property name="classes.dir" value="${basedir}/classes" /> <property name="resources.dir" value="${basedir}/resources" /> <!-- Archive names --> <property name="archive.name" value="bottegaverdemail" /> <!-- Sets the jboss directory from the local environment --> <property environment="env" /> <!-- Override with your JBoss server dist location if JBOSS_DIST is not set --> <property name="jboss.dist" value="${env.jboss_dist}" /> <target name="compile" depends="init"> <mkdir dir="${classes.dir}" /> <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="on" deprecation="on" optimize="off"> <classpath> <fileset dir="${jboss.dist}/client" includes="**/*.jar" /> </classpath> </javac>

Esempio buildfile con più target <target name="ejb-jar" depends="compile"> <delete file="${classes.dir}/${archive.name}.jar" /> <jar jarfile="${classes.dir}/${archive.name}.jar"> <fileset dir="${classes.dir}" excludes="**/*client.class" /> <zipfileset dir="${resources.dir}" prefix="meta-inf" includes="*.xml" /> </jar> <target name="deploy" depends="ejb-jar"> <copy file="${classes.dir}/${archive.name}.jar" todir="${env.jboss_dist}/server/default/deploy" /> <target name="undeploy"> <delete file="${env.jboss_dist}/server/default/deploy/${archive.name}.jar" /> <target name="teststateless" depends="compile"> <java classname= org.ubitek.stateless.teststatelessclient" fork="yes"> <classpath> <pathelement location="${classes.dir}" /> <pathelement location="${resources.dir}" /> <fileset dir="${jboss.dist}/client" includes="**/*.jar" /> </classpath> </java>

Esempio buildfile con più target <target name="teststateful" depends="compile"> <java classname= org.ubitek.stateful.teststatefulclient" fork="yes"> <classpath> <pathelement location="${classes.dir}" /> <pathelement location="${resources.dir}" /> <fileset dir="${jboss.dist}/client" includes="**/*.jar" /> </classpath> </java> <target name="testbmp" depends="compile"> <java classname="org.ubitek.bmp.cdclient" fork="yes"> <classpath> <pathelement location="${classes.dir}" /> <pathelement location="${resources.dir}" /> <fileset dir="${jboss.dist}/client" includes="**/*.jar" /> </classpath> </java> <target name="testcmp" depends="compile"> <java classname="com.imolinfo.entity.cmp20.cdclient" fork="yes"> <classpath> <pathelement location="${classes.dir}" /> <pathelement location="${resources.dir}" /> <fileset dir="${jboss.dist}/client" includes="**/*.jar" /> </classpath> </java>

Esempio buildfile con più target <target name="testmd" depends="compile"> <java classname= org.ubitek.message.testmdbean" fork="yes"> <classpath> <pathelement location="${classes.dir}" /> <pathelement location="${resources.dir}" /> <fileset dir="${jboss.dist}/client" includes="**/*.jar" /> </classpath> </java> <target name="clean" depends="init"> <delete dir="${classes.dir}" /> </project>