Java sul tuo Mac

29
Java sul tuo Mac Marcello Teodori Java User Group Milano http://www.jugmilano.it [email protected]

description

Presentazione sullo stato dell'arte nell'utilizzo e nello sviluppo di Java su Mac OS X effettuata al JUG Milano Meeting #14 del 12 gennaio 2006 presso Mac@Work.

Transcript of Java sul tuo Mac

Page 1: Java sul tuo Mac

Java sul tuo MacMarcello Teodori

Java User Group Milano

http://www.jugmilano.it

[email protected]

Page 2: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 2

Agenda● Perché Java sul Mac?● Java Standard Edition● Integrazione con il Desktop● Programmare Cocoa in Java● Sviluppo Java ed IDE● Java Enterprise Edition● Sviluppo su Micro Edition● Stato attuale dell'implementazione

Page 3: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 3

About MarcelloIngegnere Informatico, appassionato di Java, open source e programmazione in generale, lavora dal 1997 nello sviluppo software, principalmente in ambito web e mobile internet.

Dal 2004 è socio in ExcogitaNet srl e collabora attivamente con il Java User Group Milano.

laddove possibile cerca in tutti i modidi utilizzare il suo Mac!

Partecipa con impegno molto variabile alla community open source, principalmente con diverse localizzazioni di applicazioni Mac che utilizza abitualmente.

Page 4: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 4

Perché Mac OS X?● Interfaccia utente intuitiva● Applicazioni iLife● Servizi Applicativi evoluti: AppleScript,

Spotlight, VoiceOver, Bundle, ecc.● Qualità ed ergonomia dell'hardware Apple● “it just works”: supporto integrato per gran

parte di tecnologie e periferiche● Unix-based (BSD+Mach)● Java runtime integrato

Page 5: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 5

Perché sviluppare su Mac OS X?● Developer Tools inclusi, IDE Xcode● Documentazione ADC● open source pre-installato e ready-to-go● the best Unix developer experience!● Architettura a Layer

http://developer.apple.com/macosx/architecture/

Page 6: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 6

Perché Java su Mac?● Aqua LAF per Swing, ok anche per applicazioni per Mac● Integrazione con il desktop● Cocoa API per sviluppare applicazioni Mac-only● mindshare: James Gosling, James D. Davidson...

ma...● WORA è un concetto non sempre rispettato!!!● librerie con parti native JNI non sempre disponibili● problematiche allineamento JDK con Sun● performance inferiori rispetto ad altri OS

Page 7: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 7

Java Standard EditionÈ un framework standard di Mac OS X, pre-installato insieme al sistema operativo e situato in:

/System/Library/Frameworks/JavaVM.framework/

contenente le seguenti versioni della JVM:● 1.3.1 (in EOL, non disponibile su Intel)● 1.4.2 (default)● 5.0 (non pre-installato, ma disponibile come free

download dal sito Apple)Implementa anche un Internet Plug-In che rendeJava disponibile all'interno di tutti i browser.

Page 8: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 8

“it just works”?Non del tutto, il directory layout di un framework è completamente diverso da quello tipico della JVM, ma non è un problema... ci sono solo alcune cose da sapere...● JAVA_HOME in /Library/Java/Home● symlink eseguibili in /usr/bin● default JVM impostabile da symlink:$JAVAVM_FRAMEWORK_HOME/Versions/CurrentJDK

● caricamento estensioni da:(~|/|/System|/Network)/Library/Java/Extensions

Page 9: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 9

Altro da installare?I Developer Tools installano automaticamente la versione 1.6.5 di Ant, utilizzata da Xcode:

– ANT_HOME in /Developer/Java/Ant

– symlink in /usr/bin

Attenzione: i javadoc del JDK 1.4.2 sono solo nell'installazione adhoc, non in quella standard!Quelli di 1.3.1 e 5.0 invece vanno scaricati da Apple Developer Connection:

http://developer.apple.com/java/download/

Page 10: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 10

Write Once Run Anywhere?● la JVM 1.4.1+ supporta l'esecuzione dei JAR● nessun problema per applicazioni command-line

o server pure Java● applicazioni pure Java dotate di installer nativi

possono essere installate su altro OS e poi spostate

● applicazioni o librerie che fanno uso di JNI devono avere la versione binaria adhoc

● le applicazioni GUI hanno LAF Aqua ma non sono automaticamente conformi alle Apple Human Interface Guidelines!

Page 11: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 11

Apple System PropertiesIl metodo più rapido e meno invasivo per adattare un'applicazione Java a Mac OS X:

java -D<apple-system-property-key>=<value> ...

Alcuni esempi● apple.laf.useScreenMenuBar

se impostata a true, imposta la barra dei menu in stile apple● apple.awt.brushMetalLook

se impostata a true, imposta il look metal su AWT come Safari

Referencehttp://developer.apple.com/documentation/Java/Conceptual/JavaPropVMInfoRef/index.html

Page 12: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 12

Apple Virtual Machine OptionsPosso fare ancora qualcosa, ad esempio integrare l'applicazione con il Dock, utilizzando le virtual machine options specifiche di Mac OS X:

java -X<apple-virtual-machine-option> ...

Ad esempio:● -Xdock:icon=<percorso-file-icns>

creo un file .icns in Icon Composer, tool incluso nei Developer Tools, e ne imposto il percorso: l'icona apparirà sul Dock al posto di quella standard utilizzata dalle applicazioni Java

● -Xdock:name=<nome-applicazione>utilizza sul dock e sul menu dell'applicazione il nome indicato al posto del FQCN della relativa classe Main

ma...non posso obbligare gli utenti a lanciare le applicazioni da Terminale!

Page 13: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 13

Cosa è un Bundle?● concetto ereditato da NextStep● unità indipendente ed autocontenuta● una directory su filesystem con dato layout● contiene un descrittore in formato XML plist● ne esistono diversi tipi: document, framework,

plugin, e nel nostro caso application, che indica le applicazioni registrabili sul sistema

=> costruiamone uno con Jar Bundler,presente nei Developer Tools!

Page 14: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 14

Parametri Java in Info.plistTutto ciò che può essere specificato da command-line si può indicare anche nel descrittore Info.plist, più altro ancora, come ad esempio la versione di runtime richiesta.Inoltre tutte i parametri che contengano percorsi possono utilizzare le variabili $JAVAROOT e $APP_PACKAGE, che puntano all'interno dello stesso application bundle, con l'obiettivo di renderlo autocontenuto e relocatable.

ma...Info.plist è simile al descrittore JNLP!

=> Java WebStart su Mac OS X può creare un application bundle con Info.plist derivato dal descrittore JNLP!

Page 15: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 15

Apple Java ExtensionsSe volessimo andare oltre?

=> si può, ora però bisogna modificare il codice!

Apple fornisce dei package java proprietari che espongono alcune funzionalità ulteriori, ad esempio:● collegare menu AWT/Swing ad application menu● interagire con il file system HFS● integrare componenti Cocoa in AWT via JNI,

implementando la abstract base class CocoaComponent => siamo arrivati al confine con Cocoa!

Reference (per 1.5.0):http://developer.apple.com/documentation/Java/Reference/1.5.0/appledoc/api/index.html

Page 16: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 16

Applicazioni Java Mac: jEditjEdit è un editor di testo avanzato opensource

● sito del progetto: http://www.jedit.org● la distribuzione Mac è identica alle altre,

ma include un plugin adhoc ed un application bundle

Caratteristiche● integrazione DocumentType e File/Creator● application menu con handler per about,

preferences, quit● integrazione services menu e dock menu● esecuzione AppleScript

Page 17: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 17

MRJ AdapterProblema:● nomi e supporto delle system properties

Apple fra le diverse versioni della JVM● necessità di inserire special cases nel codice

per gestire l'integrazione con Mac OS X

Soluzione:http://homepage.mac.com/sroy/mrjadapter/

Page 18: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 18

Migliorare il LAF Aqua Per i “precisini”: alla ricerca del pixel-perfect!

● LAF Quaquahttp://www.randelshofer.ch/quaqua/download.html

● JTable con stripeshttps://renderpack.dev.java.net/

● JTable con Incremental Search Boxhttp://publicobject.com/glazedlists/

Page 19: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 19

Sviluppo Java e IDETutti le opzioni più note sono supportate:● NetBeans (dalla 5.0 sono compresi anche i

moduli Profiler e Mobility)● jEdit :D● IntelliJ IDEA● Oracle JDeveloper● Eclipse● Xcode? È preinstallato e nativo, ma il

supporto Java non è soddisfacente.

Page 20: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 20

Eclipse● good news: SWT è disponibile per Mac, anche per le

applicazioni RCP come Azureus, RSSOwl, ecc.● bad news:

– l'implementazione di SWT su Carbon esteticamente non è al livello del LAF Aqua

– performance non eccelse ed hanging con alcuni plugin => consigliati OSX 10.4.3+ e Eclipse 3.1.1

– incompatibilità con AWT/Swing● [eclipse-mac]: http://groups.google.com/group/eclipse-mac/

– VE Supporthttp://groups.google.com/group/eclipse-mac/browse_thread/thread/361532f40cf85ac0

– Top Ten Eclipse bugshttp://groups.google.com/group/eclipse-mac/browse_thread/thread/fbea6177b2e4b76c

Page 21: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 21

Cocoa-Java● sviluppo GUI con Interface Builder● implemento Controller in Java su Xcode● accedo a funzionalità di sistema tramite il

FoundationKit● utilizzo AppKit al posto di Swing/AWT● template progetti su Xcode

ma...● le API Java sono un wrapper di quelle ObjC● le API Java sono un subset di quelle ObjC

Page 22: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 22

Java vs. Objective-C● Tutorial ObjC-Cocoa di Livio Sandel

http://www.macocoa.omitech.it/

● I framework Cocoa (ApplicationKit e FoundationKit) sono in Objective-C

● Differenze Principali:– gestione memoria senza garbage

collection => problema weak references– dynamic dispatch dei messaggi– threading AWT

Page 23: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 23

Cocoa-Java deprecationDalla documentazione ADC:“Important: Features added to Cocoa in Mac OS X versions later than 10.4

will not be added to the Cocoa-Java programming interface. Therefore, you should develop Cocoa applications using Objective-C to take advantage of existing and upcoming Cocoa features.”

“Important: Cocoa-Java technology is only a learning tool. Applications targeted for release to customers must be developed using Objective-C to take advantage of all the programming interfaces available in Cocoa. Programming interfaces added to Cocoa in Mac OS X versions later than 10.4 will not be available to Cocoa-Java applications.”

=> go JNI!

Page 24: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 24

Applicazioni Cocoa-Java: CyberduckCyberduck è un client FTP/SFTP opensource.

– Sito del progetto: http://cyberduck.ch/

– Cocoa-Java FAQ: http://sudo.ch/~dkocher/cocoa/

– Usa JNI laddove Cocoa-Java non basta

Caratteristiche:– integrazione con Spotlight

– gestione DocumentType .duck ed URLType (s)ftp://

– integrazione AppleScript con dictionary

– integrazione password in Keychain

Page 25: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 25

Java Enterprise Edition● non è pre-installato alcun server EE, ma non ci sono

problemi per server pure Java● su ADC ci sono diversi tutorial per Tomcat, JBoss, Jetty,

Struts, ecc.● Su Developer Tools c'è un opzione per installare

WebObjects con developer license● per il deployment si può utilizzare launchd

Mac OS X Server include:● Tomcat 4.1.29 in /Library/Tomcat● JBoss 3.2.3 in /Library/JBoss/3.2● WebObjects con licenza deployment● tool di supporto custom per la gestione

Page 26: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 26

Java Mobile EditionProblema: serve la reference implementation di MIDP (Wireless Tookit), ma ha parti native, non è disponibile per OS X e non è open source...

Soluzione: SDK mpowerplayerhttp://mpowerplayer.com/index.php● emulatore pure java MIDP 2.0● supporta le Bluetooth API anche su Mac● fornisce preverifier nativo OSX● esempi con Ant forniti insieme all'SDK

Page 27: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 27

NetBeans Mobility Pack● la versione 5.0 beta2 è compatibile Mac● non ci sono release ufficiali!● istruzioni dettagliate ed integrazione di

mpowerplayer sul weblog di Lukas Hasikhttp://blogs.sun.com/roller/page/lukas?entry=mobility_pack_on_mac

● qualche correzione ai build.xml file generati=> posso sviluppare in modo visuale

e fare debugging su applicazioniMicro Edition! Proviamo?

Page 28: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 28

Conclusioni● pro e contro: una scelta molto personale...● ultimi aggiornamenti: finalmente default 5.0!

dalle release notes di J2SE 5.0 Release 4 DP3

(richiede login in ADC su http://connect.apple.com)"Java 2 Standard Edition (J2SE) 5.0 Release 4 delivers improved reliability and compatibility for Java 2 Platform Standard Edition 5.0 on Mac OS X v10.4.3 and later. This release includes J2SE version 1.5.0_06. With this update J2SE 5.0 becomes the preferred Java version, superseding Java 1.4.2. Java 1.4.2 is still installed on your machine, but applications will run with J2SE 5.0 unless they specifically request Java 1.4.2.”

● Mac-Intel? 4 volte più veloce?● Mustang, Dolphin...

Page 29: Java sul tuo Mac

JUG Milano – Java sul tuo Mac 29

Riferimenti● Java su apple.com

http://www.apple.com/macosx/features/java/● Java su Apple Developer Connection

http://developer.apple.com/java/● Mac Java Community su java.net

http://community.java.net/mac/● Java Programming su O'Reilly

MacDevCenterhttp://www.oreillynet.com/pub/ct/45