scispace - formally typeset
Search or ask a question

Showing papers on "Java annotation published in 2002"


Book
05 Nov 2002
TL;DR: This book discusses the evolution of Layers in Enterprise Applications, Concurrency Problems, and Object-Relational Behavioral Patterns, as well as some Technology-Specific Advice.
Abstract: Preface. Who This Book Is For. Acknowledgements. Colophon. Introduction. Architecture. Enterprise Applications. Kinds of Enterprise Application. Thinking About Performance. Patterns. The Structure of the Patterns. Limitations of These Patterns. I. THE NARRATIVES. 1. Layering. The Evolution of Layers in Enterprise Applications. The Three Principal Layers. Choosing Where to Run Your Layers. 2. Organizing Domain Logic. Making a Choice. Service Layer. 3. Mapping to Relational Databases. Architectural Patterns. The Behavioral Problem. Reading in Data Structural Mapping Patterns. Mapping Relationships. Inheritance. Building the Mapping. Double Mapping. Using Metadata. Database Connections. Some Miscellaneous Points. Further Reading. 4. Web Presentation. View Patterns. Input Controller Patterns. Further Reading. 5. Concurrency (by Martin Fowler and David Rice). Concurrency Problems. Execution Contexts. Isolation and Immutability. Optimistic and Pessimistic Concurrency Control. Preventing Inconsistent Reads. Deadlocks. Transactions. ACID. Transactional Resources. Reducing Transaction Isolation for Liveness. Business and System Transactions. Patterns for Offline Concurrency Control. Application Server Concurrency. Further Reading. 6. Session State. The Value of Statelessness. Session State. Ways to Store Session State. 7. Distribution Strategies. The Allure of Distributed Objects. Remote and Local Interfaces. Where You Have to Distribute. Working with the Distribution Boundary. Interfaces for Distribution. 8. Putting it all Together. Starting With the Domain Layer. Down to the Data Source. Data Source for Transaction Script. Data Source Table Module (125). Data Source for Domain Model (116). The Presentation Layer. Some Technology-Specific Advice. Java and J2EE. .NET. Stored Procedures. Web Services. Other Layering Schemes. II. THE PATTERNS. 9. Domain Logic Patterns. Transaction Script. How It Works. When to Use It. The Revenue Recognition Problem. Example: Revenue Recognition (Java). Domain Model. How It Works. When to Use It. Further Reading. Example: Revenue Recognition (Java). Table Module. How It Works. When to Use It. Example: Revenue Recognition with a Table Module (C#). Service Layer(by Randy Stafford). How It Works. When to Use It. Further Reading. Example: Revenue Recognition (Java). 10. Data Source Architectural Patterns. Table Data Gateway. How It Works. When to Use It. Further Reading. Example: Person Gateway (C#). Example: Using ADO.NET Data Sets (C#). Row Data Gateway. How It Works. When to Use It. Example: A Person Record (Java). Example: A Data Holder for a Domain Object (Java). Active Record. How It Works. When to Use It. Example: A Simple Person (Java). Data Mapper. How It Works. When to Use It. Example: A Simple Database Mapper (Java). Example: Separating the Finders (Java). Example: Creating an Empty Object (Java). 11. Object-Relational Behavioral Patterns. Unit of Work. How It Works. When to Use It. Example: Unit of Work with Object Registration (Java) (by David Rice). Identity Map. How It Works. When to Use It. Example: Methods for an Identity Map (Java). Lazy Load. How It Works. When to Use It. Example: Lazy Initialization (Java). Example: Virtual Proxy (Java). Example: Using a Value Holder (Java). Example: Using Ghosts (C#). 12. Object-Relational Structural Patterns. Identity Field. How It Works. When to Use It. Further Reading. Example: Integral Key (C#). Example: Using a Key Table (Java). Example: Using a Compound Key (Java). Foreign Key Mapping. How It Works. When to Use It. Example: Single-Valued Reference (Java). Example: Multitable Find (Java). Example: Collection of References (C#). Association Table Mapping. How It Works. When to Use It. Example: Employees and Skills (C#). Example: Using Direct SQL (Java). Example: Using a Single Query for Multiple Employees (Java) (by Matt Foemmel and Martin Fowler). Dependent Mapping. How It Works. When to Use It. Example: Albums and Tracks (Java). Embedded Value. How It Works. When to Use It. Further Reading. Example: Simple Value Object (Java). Serialized LOB. How It Works. When to Use It. Example: Serializing a Department Hierarchy in XML (Java). Single Table Inheritance. How It Works. When to Use It. Example: A Single Table for Players (C#). Loading an Object from the Database. Class Table Inheritance. How It Works. When to Use It. Further Reading. Example: Players and Their Kin (C#). Concrete Table Inheritance. How It Works. When to Use It. Example: Concrete Players (C#). Inheritance Mappers. How It Works. When to Use It. 13. Object-Relational Metadata Mapping Patterns. Metadata Mapping. How It Works. When to Use It. Example: Using Metadata and Reflection (Java). Query Object. How It Works. When to Use It. Further Reading. Example: A Simple Query Object (Java). Repository (by Edward Hieatt and Rob Mee). How It Works. When to Use It. Further Reading. Example: Finding a Person's Dependents (Java). Example: Swapping Repository Strategies (Java). 14. Web Presentation Patterns. Model View Controller. How It Works. When to Use It. Page Controller. How It Works. When to Use It. Example: Simple Display with a Servlet Controller and a JSP View (Java). Example: Using a JSP as a Handler (Java). Example: Page Handler with a Code Behind (C#). Front Controller. How It Works. When to Use It. Further Reading. Example: Simple Display (Java). Template View. How It Works. When to Use It. Example: Using a JSP as a View with a Separate Controller (Java). Example: ASP.NET Server Page (C#). Transform View. How It Works. When to Use It. Example: Simple Transform (Java). Two Step View. How It Works. When to Use It. Example: Two Stage XSLT (XSLT). Example: JSP and Custom Tags (Java). Application Controller. How It Works. When to Use It. Further Reading. Example: State Model Application Controller (Java). 15. Distribution Patterns. Remote Facade. How It Works. When to Use It. Example: Using a Java Session Bean as a Remote Facade (Java). Example: Web Service (C#). Data Transfer Object. How It Works. When to Use It. Further Reading. Example: Transferring Information about Albums (Java). Example: Serializing Using XML (Java). 16. Offline Concurrency Patterns. Optimistic Offline Lock (by David Rice). How It Works. When to Use It. Example: Domain Layer with Data Mappers (165) (Java). Pessimistic Offline Lock (by David Rice). How It Works. When to Use It. Example: Simple Lock Manager (Java). Coarse-Grained Lock (by David Rice and Matt Foemmel). How It Works. When to Use It. Example: Shared Optimistic Offline Lock (416) (Java). Example: Shared Pessimistic Offline Lock (426) (Java). Example: Root Optimistic Offline Lock (416) (Java). Implicit Lock (by David Rice). How It Works. When to Use It. Example: Implicit Pessimistic Offline Lock (426) (Java). 17. Session State Patterns. Client Session State. How It Works. When to Use It. Server Session State. How It Works. When to Use It. Database Session State. How It Works. When to Use It. 18. Base Patterns. Gateway. How It Works. When to Use It. Example: A Gateway to a Proprietary Messaging Service (Java). Mapper. How It Works. When to Use It. Layer Supertype. How It Works. When to Use It. Example: Domain Object (Java). Separated Interface. How It Works. When to Use It. Registry. How It Works. When to Use It. Example: A Singleton Registry (Java). Example: Thread-Safe Registry (Java) (by Matt Foemmel and Martin Fowler). Value Object. How It Works. When to Use It. Money. How It Works. When to Use It. Example: A Money Class (Java) (by Matt Foemmel and Martin Fowler). Special Case. How It Works. When to Use It. Further Reading. Example: A Simple Null Object (C#). Plugin (by David Rice and Matt Foemmel). How It Works. When to Use It. Example: An Id Generator (Java). Service Stub (by David Rice). How It Works. When to Use It. Example: Sales Tax Service (Java). Record Set. How It Works. When to Use It. References Index. 0321127420T10162002

1,922 citations


Proceedings ArticleDOI
17 May 2002
TL;DR: The Extended Static Checker for Java (ESC/Java) is introduced, an experimental compile-time program checker that finds common programming errors and provides programmers with a simple annotation language with which programmer design decisions can be expressed formally.
Abstract: Software development and maintenance are costly endeavors. The cost can be reduced if more software defects are detected earlier in the development cycle. This paper introduces the Extended Static Checker for Java (ESC/Java), an experimental compile-time program checker that finds common programming errors. The checker is powered by verification-condition generation and automatic theorem-proving techniques. It provides programmers with a simple annotation language with which programmer design decisions can be expressed formally. ESC/Java examines the annotated software and warns of inconsistencies between the design decisions recorded in the annotations and the actual code, and also warns of potential runtime errors in the code. This paper gives an overview of the checker architecture and annotation language and describes our experience applying the checker to tens of thousands of lines of Java programs.

1,357 citations


Book ChapterDOI
10 Jun 2002
TL;DR: J-Orchestra has significant generality, flexibility, and degree of automation advantages compared to previous work on automatic partitioning and is used to successfully partition several realistic applications including a command line shell, a ray tracer, and several applications with native dependencies.
Abstract: J-Orchestra is an automatic partitioning system for Java programs. J-Orchestra takes as input Java applications in bytecode format and transforms them into distributed applications, running on distinct Java Virtual Machines. To accomplish such automatic partitioning, J-Orchestra uses bytecode rewriting to substitute method calls with remote method calls, direct object references with proxy references, etc. Using J-Orchestra does not require great sophistication in distributed system methodology--the user only has to specify the network location of various hardware and software resources and their corresponding application classes. J-Orchestra has significant generality, flexibility, and degree of automation advantages compared to previous work on automatic partitioning. For instance, J-Orchestra can correctly partition almost any pure Java program, allowing any application object to be placed on any machine, regardless of how application objects access each other and Java system objects. This power is due to the novel way that J-Orchestra deals with unmodifiable code (e.g., native code in the Java system classes). Additionally, J-Orchestra offers support for object migration and run-time optimizations, like the lazy creation of distributed objects.We have used J-Orchestra to successfully partition several realistic applications including a command line shell, a ray tracer, and several applications with native dependencies (sound, graphics).

219 citations


Journal ArticleDOI
01 Jul 2002
TL;DR: This paper presents object sensitivity, a new form of context sensitivity for flow-insensitive points-to analysis for Java, and proposes a parameterization framework that allows analysis designers to control the tradeoffs between cost and precision in the object-sensitive analysis.
Abstract: The goal of points-to analysis for Java is to determine the set of objects pointed to by a reference variable or a reference objet field. Improving the precision of practical points-to analysis is important because points-to information has a wide variety of client applications in optimizing compilers and software engineering tools. In this paper we present object sensitivity, a new form of context sensitivity for flow-insensitive points-to analysis for Java. The key idea of our approach is to analyze a method separately for each of the objects on which this method is invoked. To ensure flexibility and practicality, we propose a parameterization framework that allows analysis designers to control the tradeoffs between cost and precision in the object-sensitive analysis.Side-effect analysis determines the memory locations that may be modified by the execution of a program statement. This information is needed for various compiler optimizations and software engineering tools. We present a new form of side-effect analysis for Java which is based on object-sensitive points-to analysis.We have implemented one instantiation of our parameterized object-sensitive points-to analysis. We compare this instantiation with a context-insensitive points-to analysis for Java which is based on Andersen's analysis for C [4]. On a set of 23 Java programs, our experiments show that the two analyses have comparable cost. In some cases the object-sensitive analysis is actually faster than the context-insensitive analysis. Our results also show that object sensitivity significantly improves the precision of side-effect analysis, call graph construction, and virtual call resolution. These experiments demonstrate that object-sensitive analyses can achieve significantly better precision than context-insensitive ones, while at the same time remaining efficient and practical.

191 citations


Proceedings ArticleDOI
27 Feb 2002
TL;DR: The environment provides a simple interface based on a "read-eval-print loop" that enables a programmer to develop, test, and debug Java programs in an interactive, incremental fashion.
Abstract: DrJava is a pedagogic programming environment for Java that enables students to focus on designing programs, rather than learning how to use the environment. The environment provides a simple interface based on a "read-eval-print loop" that enables a programmer to develop, test, and debug Java programs in an interactive, incremental fashion. This paper gives an overview of DrJava including its pedagogic rationale, functionality, and implementation.

167 citations


Proceedings ArticleDOI
23 Sep 2002
TL;DR: JESSICA2 is presented, a new DJVM running in JIT compilation mode that can execute multi-threaded Java applications transparently on clusters and implements a cluster-aware Java execution engine that supports transparent Java thread migration for achieving dynamic load balancing.
Abstract: A distributed Java Virtual Machine (DJVM) spanning multiple cluster nodes can provide a true parallel execution environment for multi-threaded Java applications. Most existing DJVMs suffer from the slow Java execution in interpretive mode and thus may not be efficient enough for solving computation-intensive problems. We present JESSICA2, a new DJVM running in JIT compilation mode that can execute multi-threaded Java applications transparently on clusters. JESSICA2 provides a single system image (SSI) illusion to Java applications via an embedded global object space (GOS) layer. It implements a cluster-aware Java execution engine that supports transparent Java thread migration for achieving dynamic load balancing. We discuss the issues of supporting transparent Java thread migration in a JIT compilation environment and propose several lightweight solutions. An adaptive migrating-home protocol used in the implementation of the GOS is introduced. The system has been implemented on x86-based Linux clusters and significant performance improvements over the previous JESSICA system have been observed.

163 citations


Journal ArticleDOI
TL;DR: It is described the design of a new tool for state-less state-space exploration of Java programs that incorporates a reduction that exploits a common pattern of synchronization, namely, the use of locks to protect shared data structures.
Abstract: State-space exploration is a powerful technique for verification of concurrent software systems. Applying it to software systems written in standard programming languages requires powerful abstractions (of data) and reductions (of atomicity), which focus on simplifying the data and control, respectively, by aggregation. We propose a reduction that exploits a common pattern of synchronization, namely, the use of locks to protect shared data structures. This pattern of synchronization is particularly common in concurrent Java programs, because Java provides built-in locks. We describe the design of a new tool for state-less state-space exploration of Java programs that incorporates this reduction. We also describe an implementation of the reduction in Java PathFinder, a more traditional state-space exploration tool for Java programs.

149 citations


Book
17 Sep 2002
TL;DR: The new edition of Mark Grand's bestselling Patterns in Java, Volume 1 brings you up to date with the latest release of Java and many of the important concerns facing Java programmers today.
Abstract: From the Publisher: In-depth coverage of forty-seven Java design patterns Since the publication of the first edition in 1998, programmers and developers have been waiting eagerly for an update to this expert guide on how to use Java in conjunction with the timesaving design patterns that have surfaced in the past few years. With the new edition of his bestselling Patterns in Java, Volume 1, Mark Grand brings you up to date with the latest release of Java and many of the important concerns facing Java programmers today. If you are a programmer or developer who wants to take advantage of new patterns, but doesn’t have the time or experience to document them for your organization, this book is for you. As with the first edition, each pattern is documented in UML and, where appropriate, a code example or an example in the core Java API is provided. This comprehensive book gives you: Seven fundamental design patterns Six creational patterns Three partitioning patterns Nine structural patterns Eleven behavioral patterns Eleven concurrency patterns UML documentation of all 47 patterns Practical, hands-on examples of pattern implementation in Java The companion Web site containing all of the Java source code and UML models from the book. Author Biography: MARK GRAND is an Atlanta-based consultant with over twenty-three years of experience in distributed systems, object-oriented design, and Java. He is currently working on an open source framework for gluing components and programs into an application. He is also the author of Patterns in Java, Volume 2 and Java Enterprise Design Patterns (both from Wiley).

112 citations


Book ChapterDOI
08 Apr 2002
TL;DR: A class of infinite-state abstract models, called Multi-Transfer Nets (MTNs), that preserve the main features of the semantics of concurrent Java and are extended based on Covering Sharing Trees and structural invariants to MTNs.
Abstract: In this paper we investigate the possible application of parameterized verification techniques to synchronization skeletons of multithreaded Java programs. As conceptual contribution, we identify a class of infinite-state abstract models, called Multi-Transfer Nets (MTNs), that preserve the main features of the semantics of concurrent Java. We achieve this goal by exploiting an interesting connection with the Broadcast Protocols of [7], and by introducing the notion of asynchronous rendez-vous. As technical contribution, we extend the symbolic verification techniques of [6] based on Covering Sharing Trees and structural invariants to MTNs. As practical contribution, we report on experimental results for verification of examples of multithreaded Java programs.

102 citations


Proceedings ArticleDOI
03 Nov 2002
TL;DR: This paper presents a Java profile for the development of software-intensive high integrity real-time systems that removes language features with high overheads and complex semantics, on which it is hard to perform timing and functional analyses.
Abstract: For many, Java is the antithesis of a high integrity programming language. Its combination of object-oriented programming features, its automatic garbage collection, and its poor support for real-time multi-threading are all seen as particular impediments. The Real-Time Specification for Java has introduced many new features that help in the real-time domain. However, the expressive power of these features means that very complex programming models can be created, necessitating complexity in the supporting real-time virtual machine. Consequently, Java, with the real-time extensions as they stand, seems too complex for confident use in high integrity systems. This paper presents a Java profile for the development of software-intensive high integrity real-time systems. This restricted programming model removes language features with high overheads and complex semantics, on which it is hard to perform timing and functional analyses. The profile fits within the J2ME framework and is consistent with well-known guidelines for high integrity software development, such as those defined by the U.S. Nuclear Regulatory Commission.

90 citations


Book ChapterDOI
08 Apr 2002
TL;DR: The problems in assigning types to variables and literals, and the problems due to expression evaluation on the Java stack are outlined, and a particular emphasis on issues related to Java exceptions and synchronized blocks are looked at.
Abstract: Java virtual machines execute Java bytecode instructions. Since this bytecode is a higher level representation than traditional object code, it is possible to decompile it back to Java source. Many such decompilers have been developed and the conventional wisdom is that decompiling Java bytecode is relatively simple. This may be true when decompiling bytecode produced directly from a specific compiler, most often Sun's javac compiler. In this case it is really a matter of inverting a known compilation strategy. However, there are many problems, traps and pitfalls when decompiling arbitrary verifiable Java bytecode. Such bytecode could be produced by other Java compilers, Java byte-code optimizers or Java bytecode obfuscators. Java bytecode can also be produced by compilers for other languages, including Haskell, Eiffel, ML, Ada and Fortran. These compilers often use very different code generation strategies from javac.This paper outlines the problems and solutions we have found in our development of Dava, a decompiler for arbitrary Java bytecode. We first outline the problems in assigning types to variables and literals, and the problems due to expression evaluation on the Java stack. Then, we look at finding structured control flow with a particular emphasis on issues related to Java exceptions and synchronized blocks. Throughout the paper we provide small examples which are not properly decompiled by commonly used decompilers.

Journal Article
TL;DR: In this paper, the authors report on the formal proof of correctness of a compiler from a substantial subset of Java source language to Java bytecode in the proof environment Isabelle and describe the effects of design decisions in these formalizations on the compiler correctness proof.
Abstract: This paper reports on the formal proof of correctness of a compiler from a substantial subset of Java source language to Java bytecode in the proof environment Isabelle. This work is based on extensive previous formalizations of Java, which comprise all relevant features of object-orientation. We place particular emphasis on describing the effects of design decisions in these formalizations on the compiler correctness proof.

Book
01 Mar 2002
TL;DR: TheJ2EE Tutorial is the hands-on, example-driven guide that offers unparalleled technical guidance into developing and deploying applications on the J2EE platform.
Abstract: You're familiar with Java programming, but now it's time for you to take it to the next level and begin creating enterprise applications with the Java 2 Platform, Enterprise Edition (J2EE). The J2EE Tutorial is the hands-on, example-driven guide that offers unparalleled technical guidance into developing and deploying applications on the J2EE platform. Written by the uniquely qualified members of the Java Software team at Sun Microsystems, The J2EE Tutorial uses the same effective interactive approach as the successful Java Tutorial collection. Throughout this book's development, hundreds of suggestions and volumes of feedback from both users and architects were integrated to ensure great writing and truly useful guidance. Inside you'll find a smart mix of example programs---including source code---that are used to illustrate key J2EE concepts. In addition, clear explanations will help you make easy work of the range of technologies collected into the J2EE platform, including: Enterprise JavaBeans, Java Servlets , JavaServer Pages, Java Message Service (JMS), Java Naming and Directory Interface (JNDI), XML, J2EE Connector Architecture, JavaMail, JDBC. When you're ready to create your own great enterprise applications, turn to the unmatched guidance, understanding, and experience you'll find only in The J2EE Tutorial. The accompanying CD-ROM is filled with a wealth of valuable resources, including all three Java Tutorial books, the J2SE 1.3.1 and J2EE 1.3.1 software development kits, the Java BluePrints sample application and book, and Forte for Java Plugin for the J2EE SDK.

Proceedings ArticleDOI
22 Apr 2002
TL;DR: An extension to the Java language, Handi-Wrap, that supports weaving aspects into code at runtime, in the form of method wrappers, which allow aspect code to be inserted around method bodies like advice in AspectJ.
Abstract: We describe an extension to the Java language, Handi-Wrap, that supports weaving aspects into code at runtime. Aspects in Handi-Wrap take the form of method wrappers, which allow aspect code to be inserted around method bodies like advice in AspectJ. Handi-Wrap offers several advantages over static aspect languages such as AspectJ. First, aspects can be woven into binary libraries. Second, a wrapper in Handi-Wrap is a first-class Java value, which allows users to exploit Java mechanisms to define and weave wrappers. For example, wrappers can be passed explicit constructor arguments, and wrapper objects can be composed. Finally, methods in all Java classes, including anonymous classes, can be wrapped. A prototype of Handi-Wrap is implemented in a compile-time metaprogramming system for Java, called Maya; we briefly describe how Maya's features support Handi-Wrap.

Book ChapterDOI
01 Jan 2002
TL;DR: First there were servlets, then there were Java Server Pages (also known as JSPs), both can serve up data on request, and, in the case of HTTP servlet, both can service up Web pages on demand.
Abstract: First there were servlets, then there were Java Server Pages (also known as JSPs). Both can serve up data on request, and, in the case of HTTP servlets, both can serve up Web pages on demand. So why have two approaches? The primary problem with servlets is that if you don’t already know Java, it is very difficult to write a servlet!

Book
24 Jul 2002
TL;DR: This book ensures that even first-time programmers can quickly develop useful programs while learning the basic principles of structured and object-oriented programming.
Abstract: Discover the power of Java for developing applications with the engaging, hands-on approach in Farrell's JAVA PROGRAMMING, 8E. With this book, even first-time programmers can quickly develop useful programs while learning the basic principles of structured and object-oriented programming. The text incorporates the latest version of Java with a reader-friendly presentation and meaningful real-world exercises that highlight new Java strengths. Updated Programming Exercises and a wealth of case problems help you build skills critical for ongoing programming success. You can find additional tools to strengthen your Java programming success with the optional CourseMate that includes a wealth of interactive teaching and learning tools and unique Video Quizzes created by the book's author.

Proceedings ArticleDOI
29 Apr 2002
TL;DR: An investigation to integrate and extend the existing real-time specification for Java and Java's Remote Method Invocation facility to provide the basis for the Distributed Real-Time Specification for Java.
Abstract: The Distributed Real-Time Specification for Java (DRTSJ) is being developed under Sun's Java Community Process. It is focused on supporting predictable, end-to-end timeliness for sequentially distributed computations (e.g., chains of invocations) in dynamic distributed object systems. This paper reports on an investigation to integrate and extend the existing real-time specification for Java and Java's Remote Method Invocation facility to provide the basis for the DRTSJ.

Patent
15 Oct 2002
TL;DR: A Java-based interface can be used to allow a Java client or application to access an application view component as discussed by the authors, which can be a design-time graphical user interface, which can include a set of Java server pages.
Abstract: A Java-based interface can be used to allow a Java client or application to access an application view component. An application view component can provide an interface to an application or enterprise system, using a resource adapter to expose functionality in the enterprise system. A Java-based interface for the resource adapter can allow the Java client to access the application view component. The interface can be a design-time graphical user interface, which can include a set of Java server pages and can be Web-based. The interface can allow a Java client to access the application view component in order to accomplish a task such as creating, defining, deploying, and testing the application view component. Each of these tasks can have their own page in the interface, such as a Java server page.

Book ChapterDOI
27 Jul 2002
TL;DR: This paper reports on the formal proof of correctness of a compiler from a substantial subset of Java source language to Java bytecode in the proof environment Isabelle, based on extensive previous formalizations of Java, which comprise all relevant features of object-orientation.
Abstract: This paper reports on the formal proof of correctness of a compiler from a substantial subset of Java source language to Java bytecode in the proof environment Isabelle. This work is based on extensive previous formalizations of Java, which comprise all relevant features of object-orientation. We place particular emphasis on describing the effects of design decisions in these formalizations on the compiler correctness proof.

Proceedings ArticleDOI
19 Jun 2002
TL;DR: This work presents MoJo --- a new native compiler and the testbed for the proxy compilation scheme, which allows embedded clients to connect to servers and delegate compilation of Java class packages to native code libraries and initial results from experimental testing using MoJo in a resource-constrained, mobile computing environment are presented.
Abstract: Interest in Java implementations for resource-constrained environments such as embedded systems has been tempered by concerns regarding its efficiency. Current native compilers for Java offer dramatic increases in efficiency, but have poor support for dynamically-loaded classes, which are typically served by slow interpreters or JIT compilers, the code-size of this latter utterly mismatching the resource constraints of the system.After a brief survey of Ahead-of-Time compilers for Java, we present MoJo --- a new native compiler and the testbed for our proxy compilation scheme, which allows embedded clients to connect to servers and delegate compilation of Java class packages to native code libraries.We also present initial results from experimental testing using MoJo in a resource-constrained, mobile computing environment. We show that MoJo is faster than all surveyed Java implementations for the test platform executing our initial test application. Our proxy compilation scheme results in a 94% speed increase over the fastest tested interpreter system and a 20% speed increase over the fastest tested JIT system.The MoJo-generated binaries for the application are also shown to be 45 times smaller than those required by its nearest iPAQ JRE competitor and 275 times smaller than the Sun JRE v1.3.1 for iPAQ as a direct result of our incremental, on-demand transfer of API classes to the client.

Patent
24 Apr 2002
TL;DR: In this paper, the authors present a secure, real-time operating system from a portable language such as Java that appears to be a Java virtual machine from a top-view perspective, but provides a secure operating systems from a bottom-view.
Abstract: The present invention allows construction of a secure, real-time operating system from a portable language such as Java that appears to be a Java virtual machine from a top perspective but provides a secure operating system from a bottom perspective. This allows portable languages, such as Java, to be used for secure embedded multiprocessor environments.

Book
01 Feb 2002
TL;DR: This book starts by introducing the basic 3D graphics concepts and terminology, and proceeds, through a comprehensive set of programming examples, to illustrate the techniques, features, work-arounds, and bug fixes for practical Java 3D work.
Abstract: Java 3D Programming is a roadmap for application developers. It shows a path through the design issues and pitfalls they will face. The book starts by introducing the basic 3D graphics concepts and terminology, and proceeds, through a comprehensive set of programming examples, to illustrate the techniques, features, work-arounds, and bug fixes for practical Java 3D work.

Patent
30 May 2002
TL;DR: In this paper, a control panel having access to the Java Virtual Machine (JVM) is invoked, and a user observes the execution of the Java program, analyzes the results of the execution, changes the configuration of the JVM, and forces re-optimization of the critical portions of the running program.
Abstract: The present invention, in various embodiments, provides techniques for improving performance of programs. In one embodiment, the program is written in the Java language and runs in the Java Runtime Environment (JRE) that includes a Java Virtual Machine (JVM) having a configuration. A control panel having access to the JVM is invoked. Via the control panel, a user observes the execution of the Java program, analyzes the results of the execution, changes the configuration of the JVM, and forces re-optimization of the critical portions of the running program. By repeating the above steps of observing the program execution, analyzing the results, changing the configuration of the Java machine, and forcing re-optimization of the critical portions of the program, the user improves the program's overall performance.

Proceedings ArticleDOI
20 Jun 2002
TL;DR: This paper presents an approach for automatically determining appropriate storage scopes for Java objects, based on dynamic analysis---observed object lifetimes and object referencing behavior, and provides experimental results that show the memory regions discovered by the technique.
Abstract: Advances in operating systems and languages have brought the ideal of reasonably-bounded execution time closer to developers who need such assurances for real-time and embedded systems applications. Recently, extensions to the Java libraries and virtual machine have been proposed in an emerging standard, which provides for specification of release times, execution costs, and deadlines for a restricted class of threads. To use such features, the code executing in the thread must never reference storage that could be subject to garbage collection. The new standard provides for region-like, stack-allocated areas (scopes) of storage that are ignored by garbage collection and deallocated en masse. It now falls to the developer to adapt ordinary Java code to use the real-time Java scoped memory regions.Unfortunately, it is difficult to determine manually how to map object instantiations to scopes. Moreover, if ordinary Java code is modified to effect instantiations in scopes, the resulting code is difficult to read, maintain, and reuse. Static analysis can yield scopes that are correct across all program executions, but such analysis is necessarily conservative in nature. If too many objects appear to live forever under such analysis, then developers cannot rely on static analysis alone to form reasonable scopes.In this paper we present an approach for automatically determining appropriate storage scopes for Java objects, based on dynamic analysis---observed object lifetimes and object referencing behavior. While such analysis is perhaps unsafe across all program executions, our analysis can be coupled with static analysis to bracket object lifetimes, with the truth lying somewhere in between. We provide experimental results that show the memory regions discovered by our technique.

Patent
15 Jan 2002
TL;DR: In this paper, a Java COD service system compiles a Java class file into a pattern which can be executed more speedily on the data processing system, and then transmits the compiled result, upon a request of the network connected via a network in order to execute the Java program at a relatively faster speed.
Abstract: A Java compile-on-demand service system and method for accelerating a processing speed of Java program in a data processing system having a relatively low performance is provided. The Java COD service system compiles a Java class file to be executed in a data processing system into a pattern which can be executed more speedily on the data processing system, and then transmits the compiled result, upon a request of the data processing system connected via a network in order to execute the Java program at a relatively faster speed. The system includes Java program providing servers, data processing systems, and a compile-on-demand server for receiving a service request, downloading a requested Java class file, compiling the downloaded Java class file, and transmitting the compiled result.

01 Jan 2002
TL;DR: A tool is presented that assists the programmer in developing a proper package structure through analysis and visualization that indicates weak areas in package structures and allows human assisted refactoring of the source code based on the analysis.
Abstract: Packages are an important mechanism to decompose Java programs. However, because packages are defined implicitly, it is not easy to develop a large application with a proper package structure. This article presents a tool that assists the programmer in developing a proper package structure through analysis and visualization. The tool indicates weak areas in package structures and allows human assisted refactoring of the source code based on the analysis. The article also introduces a new metric that is an indicator for the quality of the package architecture.

Proceedings ArticleDOI
23 Sep 2002
TL;DR: Caffeine is a dynamic analysis tool that uses the Java platform debug architecture to generate a trace, and a Prolog engine to perform queries over the trace to help the maintainer in checking her conjecture about the behavior of a Java program.
Abstract: To understand the behavior of a program, a maintainer reads some code, asks a question about this code, conjectures an answer, and searches the code and the documentation for confirmation of her conjecture. However, the confirmation of the conjecture can be error-prone and time-consuming because the maintainer has only static information at her disposal. She would benefit from dynamic information. In this paper, we present Caffeine, an assistant that helps the maintainer in checking her conjecture about the behavior of a Java program. Our assistant is a dynamic analysis tool that uses the Java platform debug architecture to generate a trace, i.e., an execution history, and a Prolog engine to perform queries over the trace. We present a usage scenario based on the n-queens problem, and two real-life examples based on the Singleton design pattern and on the composition relationship.

Book ChapterDOI
08 Apr 2002
TL;DR: This paper introduces an assertional proof method for JavaMT ("Multi-Threaded Java"), a small concurrent sublanguage of Java, covering the mentioned concurrency issues as well as the object-based core ofjava, i.e., object creation, side effects, and aliasing, but leaving aside inheritance and subtyping.
Abstract: Besides the features of a class-based object-oriented language, Java integrates concurrency via its thread-classes, allowing for a multithreaded flow of control. the concurrency model offers coordination via lock-synchronization, and communication by synchronous message passing, including re-entrant method calls, and by instance variables shared among threads.To reason about multithreaded programs, we introduce in this paper an assertional proof method for JavaMT ("Multi-Threaded Java"), a small concurrent sublanguage of Java, covering the mentioned concurrency issues as well as the object-based core of Java, i.e., object creation, side effects, and aliasing, but leaving aside inheritance and subtyping.

Patent
31 Jan 2002
TL;DR: In this article, a method of software development comprising the steps of determining, through Java reflection API calls, a current software signature for each Java object, from a Java software application comprising Java application code, to be administered by a software development wizard, retrieving from a deployment descriptor a Java object deployment description for each said Java object and detecting changes in the Java code, wherein detecting changes includes contrasting the current software signatures and the retrieved Java object deployments descriptions.
Abstract: A method of software development comprising the steps of determining, through Java reflection API calls, a current software signature for each Java object, from a Java software application comprising Java application code, to be administered by a software development wizard, retrieving from a deployment descriptor a Java object deployment description for each said Java object, and detecting changes in the Java application code, wherein detecting changes includes contrasting the current software signatures and the retrieved Java object deployment descriptions. Exemplary embodiments also include displaying, for user revision through a user interface, representations of the detected changes in the Java application code, wherein user revision includes user confirmation of detected changes, recording user revisions in the deployment descriptor, and conforming the Java application code to the user revisions.

Proceedings ArticleDOI
23 Jun 2002
TL;DR: The whole Java Card language is taken into account in order to provide realistic metrics on formal development and this formalization leads to an embeddable implementation of the byte code verifier thanks to automatic code translation from formal implementation into C code.
Abstract: The Java security policy is implemented by security components such as the Java Virtual Machine (JVM), the API, the verifier, the loader. It is of prime importance to ensure that the implementation of these components is in accordance with their specifications. Formal methods can be used to bring the mathematical proof that the implementation of these components corresponds to their specification. In the paper, a formal development is performed on the Java Card byte code verifier using the B method. The whole Java Card language is taken into account in order to provide realistic metrics on formal development. The architecture and the tricky points of the development are presented. This formalization leads to an embeddable implementation of the byte code verifier thanks to automatic code translation from formal implementation into C code. We present the formal models, discuss the integration into the card and the results of such an experiment.