Rozszerzenie standardowego API Javy
description
Transcript of Rozszerzenie standardowego API Javy
Rozszerzenie standardowego API JavyRozszerzenie standardowego API Javy
2005-11-15 Marcin Stępień Seminarium SSR 2/16
Tematy
• Wstęp• Biblioteki Commons• Sprawdzone w boju• Przegląd wybranych bibliotek• Docs
2005-11-15 Marcin Stępień Seminarium SSR 3/16
Commons
• Attributes• BeanUtils • Betwixt • Chain• CLI • Codec• Collections• Configuration • Daemon • DBCP• DbUtils• Digester• Discovery• EL• Email• FileUpload
• HttpClient• IO• Jelly • Jexl • JXPath • Lang• Latka • Launcher• Logging• Math • Modeler• Net• Pool• Primitives Resources• Transaction • Validator • VFS
2005-11-15 Marcin Stępień Seminarium SSR 4/16
Sprawdzone w boju
StrutsHibernateVelocityCactus
Expression Language (EL)
...Spring etc.Sprawdzona implementacja wielu
wzorców projektowych
2005-11-15 Marcin Stępień Seminarium SSR 5/16
Zakres zastosowań
Kategoria Biblioteka
Web FileUpload, HTTPClient, and Net
XML Betwixt, Digester, Jelly, and JXPath
Utilities BeanUtils, Logging, DBCP, Pool, and Validator
Packages Codec and Modeler
Trivial CLI, Discovery, Lang, and Collections
2005-11-15 Marcin Stępień Seminarium SSR 6/16
BeanUtils
• Łatwa w użyciu kontrola nad JavaBeans przy użyciu mechanizmu refleksji i introspekcji
• Dynamic Beans • Dynamiczne generowanie JavaBeans• Operacje na kolekcjach JavaBean
DynaBean employee = ...; // Details depend on which // DynaBean implementation you use String firstName = (String) employee.get("firstName"); Address homeAddress = (Address) employee.get("address", "home"); Object subordinate = employee.get("subordinate", 2);
PropertyUtils.getSimpleProperty(Object bean, String name) PropertyUtils.getIndexedProperty(Object bean, String name, int index) PropertyUtils.getMappedProperty(Object bean, String name, String key)
BeanPropertyValueEqualsPredicate predicate = new BeanPropertyValueEqualsPredicate( "activeEmployee", Boolean.FALSE ); CollectionUtils.filter( peopleCollection, predicate );
2005-11-15 Marcin Stępień Seminarium SSR 7/16
BeanUtils - ResultSetDynaBean
Connection conn = ...; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery ("select account_id, name from customers"); Iterator rows = (new ResultSetDynaClass(rs)).iterator(); while (rows.hasNext()) { DynaBean row = (DynaBean) rows.next(); System.out.println("Account number is " + row.get("account_id") + " and name is " + row.get("name")); } rs.close(); stmt.close();
ResultSet wrapper dla DynaBean
User guide
2005-11-15 Marcin Stępień Seminarium SSR 8/16
dbutils
• Pomoc przy kodowaniu JDBC
• BeanProcessor.toBean() • mapColumnsToProperties()
2005-11-15 Marcin Stępień Seminarium SSR 9/16
• Nadbudowa Java Mail API// Create the email messageHtmlEmail email = new HtmlEmail();email.setHostName("mail.myserver.com");email.addTo("[email protected]", "John Doe");email.setFrom("[email protected]", "Me");email.setSubject("Test email with inline image");
// embed the image and get the content idURL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");String cid = email.embed(url, "Apache logo");
// set the html messageemail.setHtmlMsg("<html>The apache logo - <img
src=\"cid:"+cid+"\"></html>");
// set the alternative messageemail.setTextMsg("Your email client does not support HTML messages");
// send the emailemail.send();
2005-11-15 Marcin Stępień Seminarium SSR 10/16
Net
• Niskopoziomowa implementacja protokołów internetowych do wykorzystania po stronie klienta– FTP – NNTP – SMTP – POP3 – Telnet – TFTP – Finger – Whois – rexec/rcmd/rlogin – Time (rdate)– Echo – Discard – NTP/SNTP
client = new NNTPClient();
client.connect("aurelia.deine.net");
list = client.listNewsgroups();
if (client.isConnected()) client.disconnect();
2005-11-15 Marcin Stępień Seminarium SSR 11/16
IO
long freeSpace = FileSystemUtils.freeSpace("C:/");
InputStream in = new URL( "http://jakarta.apache.org" ).openStream(); try { InputStreamReader inR = new InputStreamReader( in ); BufferedReader buf = new BufferedReader( inR ); String line; while ( ( line = buf.readLine() ) != null ) { System.out.println( line ); } } finally { in.close(); }
InputStream in = new URL( "http://jakarta.apache.org" ).openStream(); try { System.out.println( IOUtils.toString( in ) ); } finally { IOUtils.closeQuietly(in); }
2005-11-15 Marcin Stępień Seminarium SSR 12/16
Launcher
Run.batjava –classpath
ImprezaArtystyczna.jar;swt.jar;jface.jar;runtime.jar;boot.jar;osgi.jar -Djava.library.path=. marcin.imprezaart.OknoMain
Run.shRun .....
Generowanie ścieżek dostępu
Dobór bibliotek
Download bibliotek
Ant task
Uruchomienieaplikacji
2005-11-15 Marcin Stępień Seminarium SSR 13/16
Math
• Statystyka• Algebra liniowa, rozwiązywanie układów
równań liniowych• Rozkład prawdopodobieństwa• Ułamki• Generowanie losowych ciągów, liczb, ciągów
bezpiecznych kryptograficznie• Liczby zespolone• Analiza matematyczna, szukanie miejsc
zerowych • Zbiory przydatnych funkcji
2005-11-15 Marcin Stępień Seminarium SSR 14/16
Transactions
• Implementacja Transakcji • Kolekcje z transakcjami• Transakcyjny dostęp do plików• Zamki wielopoziomowe• Wykrywanie zakleszczeń• Wraperry Map (transakcyjny dostęp do kolekcji
implementujących java.util.Map)– TransactionalMapWrapper– OptimisticMapWrapper – PessimisticMapWrapper
• Dobra dokumentacja : ) wrapperydeadlocks
2005-11-15 Marcin Stępień Seminarium SSR 15/16
Validator
1. Deklaratywna walidacja (xml)2. Validujące metody obiektowe np.
• CreditCardValidator • DateValidator • EmailValidator • Field • Form
3. Również Biblioteka JavaScriptu do ponownego użycia• validateCreditCard.js• validateDate.js• validateEmail.js• validateFloat.js• validateFloatRange.js• validateInteger.js itd...
2005-11-15 Marcin Stępień Seminarium SSR 16/16
Docs
• Jakarta Commons Online Bookshelf• Jakarta Commons Cookbook • http://www.javaworld.com/• http://jakarta.apache.org/commons/• http://www.devx.com/Java• http://wiki.apache.org/jakarta-commons/
FrontPage