Preface (Java Enterprise in a Nutshell) Table of Contents Preface 1 0.1. Contents of This Book 1 0.2. Related Books 2 0.3. Java Programming Resources Online 2 0.4. Examples Online 3 0.5. Conventions Used in This Book 4 0.6. We'd Like to Hear from You 5 0.7. Acknowledgments 6 0.7.1. David Flanagan 6 0.7.2. Jim Farley 6 0.7.3. William Crawford 6 0.7.4. Kris Magnusson 6 1.1. Enterprise Computing Defined 8 1.2. Enterprise Computing Demystified 8 1.3. The Java Enterprise APIs 9 1.3.1. JDBC: Working with Databases 10 1.3.2. RMI: Remote Method Invocation 10 1.3.3. Java IDL: CORBA Distributed Objects 11 1.3.4. JNDI: Accessing Naming and Directory Services 11 1.3.5. Enterprise JavaBeans 12 1.3.6. Servlets 12 1.3.7. JMS: Enterprise Messaging 13 1.3.8. JTA: Managing Distributed Transactions 13 1.4.1. Enabling E−Commerce for a Mail−Order Enterprise 14 1.4.2. Updating CornCo with Enterprise JavaBeans 15 1.4. Enterprise Computing Scenarios 16 1.5. Java Enterprise APIs Versus Jini 17 2.1. JDBC Architecture 18 2.2. JDBC Basics 20 2.3. JDBC Drivers 20 2.3.1. JDBC URLs 21 2.3.2. The JDBC−ODBC Bridge 23 2.4. Connecting to the Database 24 2.5. Statements 24 2.5.1. Multiple Result Sets 25 2.6.1. Handling Nulls 26 2.6.2. Large Data Types 27 2.6.3. Dates and Times 28 2.6. Results 29 2.7. Handling Errors 30 2.7.1. SQL Warnings 31 2.8. Prepared Statements 31 2.9. Metadata 32 2.9.1. DatabaseMetaData 33 2.9.2. ResultSetMetaData 34 2.10. Transactions 34 2.11. Stored Procedures 36 2.12. Escape Sequences 38 2.13. JDBC 2.0 40 2.13.1. Results Handling 41 2.13.2. Batch Updates 43 2.13.3. Java−Aware Databases 43 Preface (Java Enterprise in a Nutshell) i Table of Contents Preface 2.13.4. BLOBs and CLOBs 45 2.13.5. The JDBC Standard Extension 46 3.1. Introduction to RMI 47 3.1.1. RMI in Action 47 3.1.2. RMI Architecture 49 3.1.3. RMI Object Services 49 3.1.3.1. Naming/registry service 50 3.1.3.2. Object activation service 53 3.1.3.3. Distributed garbage collection 55 3.2.1. Key RMI Classes for Remote Object Implementations 55 3.2. Defining Remote Objects 55 3.3. Creating the Stubs and Skeletons 56 3.4. Accessing Remote Objects as a Client 56 3.4.1. The Registry and Naming Services 59 3.4.2. Remote Method Arguments and Return Values 60 3.4.3. Factory Classes 61 3.5. Dynamically Loaded Classes 61 3.5.1. Configuring Clients and Servers for Remote Class Loading 63 3.5.2. Loading Classes from Applets 64 3.6. Remote Object Activation 65 3.6.1. Persistent Remote References 66 3.6.2. Defining an Activatable Remote Object 68 3.6.2.1. The Activatable class 68 3.6.2.2. Implementing an activatable object 70 3.6.3. Registering Activatable Objects 70 3.6.3.1. Registering an activatable object without instantiating 70 3.6.3.2. Passing data with the MarshalledObject 71 3.6.4. Activation Groups 73 3.6.4.1. Registering activation groups 74 3.6.4.2. Assigning activatable objects to groups 75 3.6.5. The Activation Daemon 75 3.6.5.1. The daemon's dual personality 76 3.7.1. RMI with JNI Versus CORBA 76 3.7. RMI and Native Method Calls 77 3.8. RMI over IIOP 78 3.8.1. Accessing RMI Objects from CORBA 78 4.1. The CORBA Architecture 81 4.1.1. Interface Definition Language 81 4.1.2. Object Request Broker 84 4.1.3. The Naming Service 85 4.1.4. Inter−ORB Communication 85 4.2. Creating CORBA Objects 86 4.2.1. An IDL Primer 86 4.2.1.1. Modules 87 4.2.1.2. Interfaces 88 4.2.1.3. Data members and methods 89 4.2.1.4. A complete IDL example 89 4.2.2. Turning IDL Into Java 90 4.2.2.1. A simple server class 90 4.2.2.2. The helper class 90 4.2.2.3. The holder class 91 Preface (Java Enterprise in a Nutshell) ii Table of Contents Preface 4.2.2.4. The client and server stubs 91 4.2.3. Writing the Implementation 92 4.3. Putting It in the Public Eye 93 4.3.1. Initializing the ORB 95 4.3.2. Registering with a Naming Service 96 4.3.3. Adding Objects to a Naming Context 98 4.4. Finding Remote Objects 99 4.4.1. Initial ORB References 100 4.4.2. Getting Objects from Other Remote Objects 101 4.4.2.1. Using a naming context 102 4.4.2.2. Using multiple naming services 104 4.4.3. Stringified Object References 106 4.5. What If I Don't Know the Interface? 106 4.5.1. Dynamic Invocation Interface 106 5.1. The Servlet Life Cycle 107 5.2. Servlet Basics 109 5.2.1. HTTP Servlets 111 5.2.2. Forms and Interaction 112 5.2.3. POST, HEAD, and Other Requests 115 5.2.4. Servlet Responses 115 5.2.5. Servlet Requests 117 5.2.6. Error Handling 118 5.2.6.1. Status codes 119 5.2.6.2. Servlet exceptions 120 5.2.6.3. A file serving servlet 121 5.2.7. Security 121 5.8.1. HttpSessionBindingListener 122 5.8.2. Session Contexts 123 5.3. Servlet Chaining 124 5.4. Custom Servlet Initialization 124 5.5. Thread Safety 125 5.6. Server−Side Includes 126 5.7. Cookies 127 5.8. Session Tracking 130 5.9. Databases and Non−HTML Content 132 5.10. The Servlet API 2.1 134 5.10.1. Request Dispatching 136 5.10.2. Shared Attributes 138 5.10.3. Resource Abstraction 138 6.1. JNDI Architecture 139 6.2. A JNDI Example 141 6.3. Introducing the Context 141 6.3.1. Using the InitialContext Class 142 6.3.2. Other Naming Systems 142 6.5.1. The Command Interface 144 6.5.2. Loading an Initial Context 144 6.5.3. Running the Shell 146 6.6.1. How Names Work 147 6.6.2. Browsing a Naming System 148 6.6.3. Listing the Bindings of a Context 148 6.4. Looking Up Objects in a Context 149 Preface (Java Enterprise in a Nutshell) iii Table of Contents Preface 6.5. The NamingShell Application 150 6.6. Listing the Children of a Context 153 6.7. Creating and Destroying Contexts 153 6.8. Binding Objects 154 6.9. Accessing Directory Services 155 6.9.1. X.500 Directories 157 6.9.2. The DirContext Interface 158 6.9.3. The Attributes Interface 159 6.9.4. The Attribute Interface 160 6.10. Modifying Directory Entries 162 6.11. Creating Directory Entries 163 6.12. Searching a Directory 163 6.12.1. Search Criteria 164 6.12.2. Search Results 164 6.12.3. Search Controls 166 6.12.4. A Search Command 168 7.2.1. The EJB Client 169 7.2.2. The Enterprise JavaBeans Object 171 7.2.3. The EJB Container 171 7.1. A Note on Evolving Standards 172 7.2. EJB Roles 172 7.3. Transaction Management 173 7.3.1. Making the EJB Server Aware of Database Transactions 175 7.3.2. Transaction Isolation Levels 176 7.4.1. Home Interface 176 7.4.2. Remote Interface 177 7.4.3. The Bean Implementation 178 7.4. Implementing a Basic EJB Object 180 7.5. Implementing Session Beans 182 7.5.1. Stateless Versus Stateful Session Beans 184 7.5.2. Optional Transaction Support 185 7.6. Implementing Entity Beans 186 7.6.1. Primary Keys 187 7.6.2. Finder Methods 188 7.6.3. Entity Bean Implementation 188 7.6.3.1. A persistent ProfileBean 191 7.6.4. The Entity Context 192 7.6.5. Life Cycle of an Entity Bean 194 7.6.6. Handles on Entity Beans 195 7.6.7. Container−Managed Persistence 196 7.6.7.1. Handling complex data structures 197 7.7. Deploying an Enterprise JavaBeans Object 198 7.7.1. Container−Managed Data Mapping 199 7.7.2. Access−Control Deployment Attributes 204 7.7.3. Generating the Container Classes and Deployment Descriptor 204 7.7.4. Packaging Enterprise JavaBeans 205 7.8. Using an Enterprise JavaBeans Object 205 7.8.1. Finding Home Interfaces Through JNDI 209 7.8.2. Creating/Finding Beans 210 7.8.3. Using Client−Side Transactions 212 7.9. Changes in EJB 1.1 Specification 212 Preface (Java Enterprise in a Nutshell) iv Table of Contents Preface 7.9.1. XML−Based Deployment Descriptors 213 7.9.2. Entity Beans Required 214 7.9.3. Home Handles 215 7.9.4. Detailed Programming Restrictions for Bean Implementations 215 7.9.5. Assorted Other Changes 216 8.1. Relational Databases 217 8.2. Data Types 218 8.3. Schema Manipulation Commands 219 8.3.1. CREATE TABLE 219 8.3.2. ALTER TABLE 219 8.3.3. DROP 219 8.4. Data Manipulation Commands 219 8.4.1. SELECT 221 8.4.1.1. String comparisons 221 8.4.1.2. Subqueries and joins 223 8.4.1.3. Groups 224 8.4.2. INSERT 224 8.4.3. UPDATE 225 8.4.4. DELETE 226 8.5. Functions 227 8.5.1. Aggregate Functions 227 8.5.2. Value Functions 228 8.5.2.1. Date/time functions 229 8.5.2.2. String manipulation functions 230 8.6. Return Codes 231 10.1. IDL Keywords 231 10.2. Identifiers 232 10.2.1. Mapping Identifiers to Java 233 10.3. Comments 233 10.3.1. Mapping Comments to Java 233 10.4.1. Strings and Characters 233 10.4.1.1. Mapping strings and characters to Java 234 10.4. Basic Data Types 235 10.5. Constants and Literals 238 10.5.1. Mapping Constants to Java 243 10.5.2. Boolean Literals 244 10.5.3. Numeric Literals 245 10.5.3.1. Integer literals 245 10.5.3.2. Floating−point literals 246 10.5.3.3. Fixed−point literals 246 10.5.3.4. Mapping numeric literals to Java 247 10.5.4. Character Literals 247 10.5.5. String Literals 248 10.6. Naming Scopes 248 10.7. User−Defined Data Types 249 10.7.1. Typedefs 249 10.7.1.1. Mapping typedefs to Java 249 10.7.2. Arrays 249 10.7.2.1. Mapping arrays to Java 249 10.7.3. Sequences 250 10.7.3.1. Mapping sequences to Java 250 Preface (Java Enterprise in a Nutshell) v Table of Contents Preface 10.7.4. Structs 250 10.7.4.1. Mapping structs to Java 251 10.7.5. Enumerations 252 10.7.5.1. Mapping enumerations to Java 253 10.7.6. Unions 254 10.7.6.1. Mapping unions to Java 254 10.8. Exceptions 254 10.8.1. Standard Exceptions 255 10.8.2. Mapping Exceptions to Java 255 10.9. Module Declarations 256 10.9.1. Mapping Modules to Java 256 10.10. Interface Declarations 256 10.10.1. Attributes 257 10.10.2. Methods 257 10.10.2.1. Parameters 258 10.10.2.2. Exceptions 259 10.10.2.3. Context values 262 10.10.2.4. Call semantics 262 10.10.3. Interface Inheritance 263 10.10.3.1. Method and attribute inheritance 264 10.10.3.2. Constant, type, and exception inheritance 264 10.10.3.3. IDL early binding 265 10.10.4. Mapping Interfaces to Java 265 10.10.4.1. Helper and holder classes 266 10.10.4.2. Attributes 267 10.10.4.3. Methods 267 11.1. Naming Service 268 11.2. Security Service 269 11.3. Event Service 269 11.4. Persistent Object Service 269 11.5. Life Cycle Service 270 11.6. Concurrency Control Service 270 11.7. Externalization Service 271 11.8. Relationship Service 271 11.9. Transaction Service 272 11.10. Query Service 272 11.11. Licensing Service 274 11.12. Property Service 274 11.13. Time Service 275 11.14. Trading Service 276 11.15. Collection Service 276 1. Finding a Quick−Reference Entry 277 2. Reading a Quick−Reference Entry 278 2.1. Class Name, Package Name, Availability, and Flags 278 2.2. Description 279 2.3. Synopsis 280 2.3.1. Member availability and flags 281 2.3.2. Functional grouping of members 282 2.4. Class Hierarchy 282 2.5. Cross References 283 2.6. A Note About Class Names 284 Preface (Java Enterprise in a Nutshell) vi Table of Contents Preface Colophon 284 Copyright © 2001 O'Reilly & Associates, Inc. All rights reserved 286 Logos and Trademarks 289 Disclaimer 299 1. Finding a Quick−Reference Entry 310 2. Reading a Quick−Reference Entry 312 2.1. Class Name, Package Name, Availability, and Flags 315 2.2. Description 329 2.3. Synopsis 356 2.3.1. Member availability and flags 365 2.3.2. Functional grouping of members 370 2.4. Class Hierarchy 400 2.5. Cross References 422 2.6. A Note About Class Names 434 Table of Contents 438 Part 1: Introducing the Java Enterprise APIs 446 Part 2: Enterprise Reference 454 Part 3: API Quick Reference 462 Chapter 1. Introduction 470 Chapter 2. JDBC 474 Chapter 3. Remote Method Invocation 529 Chapter 4. Java IDL 532 Chapter 5. Java Servlets 534 Chapter 6. JNDI 543 Chapter 7. Enterprise JavaBeans 545 Chapter 8. SQL Reference 559 Chapter 9. RMI Tools 569 Chapter 10. IDL Reference 651 Chapter 11. CORBA Services Reference 651 Chapter 12. Java IDL Tools 651 Chapter 13. The java.rmi Package 652 Chapter 14. The java.rmi.activation Package 653 Chapter 15. The java.rmi.dgc Package 653 Preface (Java Enterprise in a Nutshell) vii Table of Contents Chapter 16. The java.rmi.registry Package 653 Chapter 17. The java.rmi.server Package 656 Chapter 18. The java.sql Package 657 Chapter 19. The javax.ejb Package 657 Chapter 20. The javax.ejb.deployment Package 658 Chapter 21. The javax.jms Package 659 Chapter 22. The javax.naming Package 659 Chapter 23. The javax.naming.directory Package 660 Chapter 24. The javax.naming.spi Package 660 Chapter 25. The javax.servlet Package 661 Chapter 26. The javax.servlet.http Package 661 Chapter 27. The javax.sql Package 661 Chapter 28. The javax.transaction Package 662 Chapter 29. The javax.transaction.xa Package 663 Chapter 30. The org.omg.CORBA Package 663 Chapter 31. The org.omg.CORBA.DynAnyPackage Package 663 Chapter 32. The org.omg.CORBA.ORBPackage Package 666 Chapter 33. The org.omg.CORBA.portable Package 667 Chapter 34. The org.omg.CORBA.TypeCodePackage Package 667 Chapter 35. The org.omg.CosNaming Package 668 Chapter 36. The org.omg.CosNaming. NamingContextPackage Package 669 Chapter 37. Class, Method, and Field Index 669 How to Use This Quick Reference 669 How to Use This Quick Reference 669 Part 1. Introducing the Java Enterprise APIs 671 Preface (Java Enterprise in a Nutshell) viii Table of Contents Part 2. Enterprise Reference 672 Part 3. API Quick Reference 673 Preface (Java Enterprise in a Nutshell) ix [...]... other Enterprise APIs This book complements the best−selling Java in a Nutshell and the forthcoming Java Foundation Classes in a Nutshell Java in a Nutshell introduces the Java programming language itself and provides an API quick reference for the core packages and classes of the Java platform, while Java Foundation in a Nutshell offers a fast−paced tutorial on the Java APIs that comprise the Java Foundation... platform adds a number of new classes to this package to support advanced database features Java 1.2 also provides additional features in the javax.sql standard extension package javax.sql includes classes for treating database query results as JavaBeans, for pooling database connections, and for obtaining database connection information from a name service The extension package also supports scrollable result... contain a tutorial chapter on JMS Chapter 21, "The javax.jms Package", does contain a complete API quick reference for the javax.jms package, however 1.3.6 Servlets 13 Preface (Java Enterprise in a Nutshell) 1.3.8 JTA: Managing Distributed Transactions The JTA, or Java Transaction API, is a Java Enterprise API for managing distributed transactions Distributed transactions are one of the things that make... doesn't include a tutorial chapter on JTA It does, however, contain a complete API quick reference for the javax.transaction and javax.transactions.xa packages (see Chapter 28, "The javax.transaction Package" and Chapter 29, "The javax.transaction.xa Package") 1.2 Enterprise Computing Demystified 1.3.8 JTA: Managing Distributed Transactions 1.4 Enterprise Computing Scenarios 14 Preface (Java Enterprise in. .. Sun's attempt to create a platform−neutral interface between databases and Java With JDBC, you can count on a standard set of database access features and (usually) a particular subset of SQL, SQL−92 The JDBC API defines a set of interfaces that encapsulate major database functionality, including running queries, processing results, and determining configuration information A database vendor or third−party... to understanding Enterprise JavaBeans lies in the interactions among beans, containers, and the EJB server These interactions are described in detail in Chapter 7, "Enterprise JavaBeans" There is, of course, an API associated with the EJB application framework, in the form of the 1.3.4 JNDI: Accessing Naming and Directory Services 12 Preface (Java Enterprise in a Nutshell) javax.ejb and javax.ejb.deployment... communicate with it Major database vendors have made JDBC drivers available for their products In addition, a "bridge" driver exists to enable Java programs to communicate with databases through existing ODBC drivers 1.3 The Java Enterprise APIs 10 Preface (Java Enterprise in a Nutshell) The JDBC API is found in the java. sql package, which was introduced in Java 1.1 Version 1.2 of the Java 2 platform adds... maintaining state information, session tracking, database connectivity using JDBC, and applet−servlet communication Java Distributed Computing, by Jim Farley A programmer's guide to writing distributed applications with Java Database Programming with JDBC and Java, by George Reese An advanced tutorial on JDBC that presents a robust model for developing Java database programs Enterprise JavaBeans, by Richard... not already have the javadoc files with your Java distribution, see http:/ /java. sun.com/docs/ for a link to the latest available version Finally, don't forget O'Reilly' s Java web site http:/ /java. oreilly.com contains Java news and commentary and a monthly tips−and−tricks column by O'Reilly Java author Jonathan Knudsen 0.2 Related Books 0.4 Examples Online Copyright © 2001 O'Reilly & Associates All... defines a Java binding for the standard XA API for distributed transactions (XA is a standard defined by the Open Group) Using the JTA, we can write a program that communicates with a distributed transaction service and uses that service to coordinate a distributed transaction that involves a transfer of money between database records in two different databases Unfortunately, however, using the JTA in . the best−selling Java in a Nutshell and the forthcoming Java Foundation Classes in a Nutshell. Java in a Nutshell introduces the Java programming language itself and provides an API quick reference. 658 Chapter 21. The javax.jms Package 659 Chapter 22. The javax.naming Package 659 Chapter 23. The javax.naming.directory Package 660 Chapter 24. The javax.naming.spi Package 660 Chapter 25. The javax.servlet. javax.servlet Package 661 Chapter 26. The javax.servlet.http Package 661 Chapter 27. The javax.sql Package 661 Chapter 28. The javax.transaction Package 662 Chapter 29. The javax.transaction.xa