X33EJA Enterprise Java Petr Šlechta Sun Microsystems petr.slechta@sun.com
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) Zasílání e-mailů přes SMTP server Post Office Protocol (POP) Definuje mailbox pro uživatele, nejrozšířenější Internet Message Access Protocol (IMAP) 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</web-resource-name> <description>cust's catalog</description> <url-pattern>/catalog/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>registereduser</role-name> </auth-constraint> </security-constraint>
Login Dále je nutno specifikovat jak má probíhat přihlašování uživatele web.xml: <login-config> <auth-method>basic</auth-method> <realm-name>shop Realm</realm-name> </login-config>
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 <form action="j_security_check" method="post"> Name: <input type="text" name="j_username"> Password: <input type="password" name="j_password"> <input type="submit" value="log me in!"> </form> web.xml: <login-config> <auth-method>form</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config>