X33EJA – Enterprise Java
Petr Šlechta Sun Microsystems
[email protected]
Web Services (dodatek)
Dynamické vyvolání WS ●
●
●
Pomocí SAAJ (SOAP with Attachments API for Java) Dynamicky vytvořit SOAP zprávu (např. na základě dat vyčtených z WSDL) a poslat ji Ukázka kódu
Struktura SOAP zprávy v SAAJ
Java Naming and Directory Interface (JNDI)
JNDI ●
●
Naming/directory/lookup služby (services) –
Mapování: jméno → hodnota (object)
–
Příklady: UNIX file system, DNS, LDAP
Stromový/adresářový koncept –
Adresář má atributy a položky
–
Základní akce: přidávání/modifikace atributů a položek, hledání informace
–
Většinou 90% vyhledávání informací, jen 10% modifikace
JNDI – podporované technologie ●
Návrh JNDI je rozšiřitelný –
●
API / SPI koncept
Standardně podporované technologie –
Lightweight Directory Access Protocol (LDAP)
–
Common Object Request Broker Architecture (CORBA) Common Object Services (COS) name service
–
Java Remote Method Invocation (RMI) RegistryPackages
JNDI
JNDI ●
Vlastní hledání je jednoduché –
Printer printer = (Printer)ctx.lookup("Xerox-312");
JNDI – kompletní příklad Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial"); DirContext ctx = new InitialDirContext(env); try { // Create the initial directory context DirContext ctx = new InitialDirContext(env); // Ask for all attributes of the object Attributes attrs = ctx.getAttributes("cn=Ted Geisel, ou=People"); // Find the surname attribute ("sn") and print it System.out.println("sn: " + attrs.get("sn").get()); } catch (NamingException e) { System.err.println("Problem getting attribute:" + e); }
LDAP (Lightweight Directory Access Protocol) ●
●
Protokol pro přístup k serverům s adresářovými službami (LDAP servery) LDAP server –
Distribuovaná stromová databáze
–
Obsahuje většinou údaje o zaměstnancích a organizační struktuře firmy
–
U každého zaměstnance mohou být uloženy konfigurační data pro různé aplikace (hesla, ...)
–
Typicky je systém i jeho zpráva distribuovaná
–
Optimalizováno na čtení dat, zápisování není časté
–
Centrální authentikace uživatele (SSO)
Nástroje pro práci s LDAP servery ●
JXplorer –
●
Java prohlížeč obsahu LDAP databáze
Ukázka –
Offline prohlížení LDIF souboru
–
o=organization, ou=organization unit, cn=common name, c=country, gn=given name, sn=surname, st=state, ...
JNDI na aplikačním serveru ● ●
JNDI je součást Java EE specifikace Použití pro přístup ke konfiguračním datům AS a pro vyhledávání instancí objektů vytvořených AS –
●
EJB, JDBC connection pool, JMS destination, …
Ukázka –
Příklad kódu v NB
Java Mail API
Java Mail ●
API pro čtení, tvorbu a odesílání e-mailů
●
Podporované technologie (lze rozšiřovat, SPI) –
Simple Mail Transfer Protocol (SMTP) ●
–
Post Office Protocol (POP) ●
–
Definuje mailbox pro uživatele, nejrozšířenější
Internet Message Access Protocol (IMAP) ● ●
–
Zasílání e-mailů přes SMTP server
Více složek na straně serveru, lze je sdílet Méně rozšířený, klade větší požadavky na mail server
Multipurpose Internet Mail Extensions (MIME) ●
Definuje jak zakódovat obsah e-mailu: části zprávy, přílohy, ...
Java Mail ●
Balíčky –
●
javax.mail, javax.mail.event, javax.mail.internet, javax.mail.search, javax.mail.util
Ukázka kódu
Java Mail na AS ●
Anotace a injection –
●
@Resource private javax.mail.Session session;
Konfigurace na straně serveru
Java Transaction API (JTA)
JTA ●
●
Definuje API pro interakci mezi transakčním managerem a –
Resource managerem
–
Aplikačním serverem
–
Aplikací používající transakce
Podporuje distribuované transakce nad více zdroji
●
JSR 907
●
Balíčky –
javax.transaction, javax.transaction.xa
JTA ●
Transakce musí být ACID –
●
Atomic (lze provést rollback), Consistent (přechody pouze mezi konzistentními stavy databáze), Isolated (mezivýsledky nejsou viditelné pro ostatní), Durable (výsledek je uložen)
Distribuované transakce –
Zdroj můsí implementovat JDBC 2.0 + XADataSource, XAConnection (javax.sql) + XAResource (javax.transaction.xa)
●
Dvoufázový commit, transakční log
●
Ukázka kódu
Java Transaction Service (JTS)
JTS ● ●
●
●
Jedna z implementací JTA Transakční manažer využívající Object Transaction Service od OMG (Object Management Group) z CORBA specifikace CORBA (Common Object Request Broker Architecture) využívá GIOP na propagaci transakcí mezi různými transakčními manažery –
GIOP = General Inter-ORB Protocol
–
IIOP = Internet Inter-ORB Protocol
Umožňuje provádět transakce nad více zdroji na různých počítačích spojených sítí
JTS
Java EE Connector Architecture (JCA)
JCA ●
●
Integrace AS s ostaními (většinou legacy) systémy –
EIS = Enterprise Information System
–
ERP = Enterprise Resource Planning
–
CRM = Customer Relationship Management
–
Jiné databáze, aplikace, mainframes
Resource Adapter –
Implementuje JCA
–
Umožňuje přístup k danému zdroji
–
Přístup pomocí API, které je podobné JDBC
JCA ●
●
Hlavní podoporované oblasti –
Connection management, transaction management, a security
–
Common Client Interface (CCI)
–
Standardní deployment (RAR soubor)
Balíčky –
●
javax.resource, javax.resource.cci, javax.resource.spi, javax.resource.spi.*
Vstupní bod –
javax.resource.spi.ResourceAdapter
Security
Security konfigurace ●
Security se konfiguruje (jako většina nastavení pro AS) ve dvou deskriptor souborech –
web.xml – standardizovaná část
–
xxx-web.xml – část specifická pro daný AS (např. sun-web.xml pro Glassfish, nebo jboss-web.xml pro JBoss)
Security constraints ●
Nejdříve je nutné definovat, které části aplikace budou mít omezený přístup a kdo k nim bude moci přistupovat
web.xml: <security-constraint> <web-resource-collection> <web-resource-name>catalog <description>cust's catalog
/catalog/* RegisteredUser
Login ●
Dále je nutno specifikovat jak má probíhat přihlašování uživatele
web.xml:
BASIC Shop Realm
Login ●
Podporované metody přihlášení (autentikace) –
None – bez přihlašování uživatele
–
Digest – klient spočítá digest (pomocí obsahu zprávy a svého hesla) a tím se autentikuje
–
Client certificate – klient (popř. i server) si pošlou veřejné certifikáty a pomocí nich ověří svoji totožnost (jako digitální podpis, X.509 standard)
–
Basic – ověření jména a hesla v realmu
–
Form – specifikované JSP stránky jsou použity pro kontrolu přihlašovacích údajů
Ochrana přenášených dat ●
User data constraint v web.xml –
None – žádná ochrana
–
Integral – je požadována ochrana před pozměněním zprávy v průběhu přenosu
–
Confidential – je požadována ochrana obsahu zprávy při přenosu (obsah zprávy nesmí být dostupný třetí straně)
Mapování rolí ●
●
●
Role definované ve webové aplikaci je nutno namapovat na uživatele a skupiny definované v aplikačním serveru Toto mapování se provádí v deskriptoru specifickém pro daný AS Ukázka (Glassfish)
Form-based autentikace
web.xml:
FORM /login.jsp /error.jsp