SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
Tim Ellison
1st October 2012




Java and Real-World Compatibility
CON5243




                                    © 2012 IBM Corporation
Important Disclaimers



THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY.

WHILST EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION
CONTAINED IN THIS PRESENTATION, IT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED.

ALL PERFORMANCE DATA INCLUDED IN THIS PRESENTATION HAVE BEEN GATHERED IN A CONTROLLED
ENVIRONMENT. YOUR OWN TEST RESULTS MAY VARY BASED ON HARDWARE, SOFTWARE OR INFRASTRUCTURE
DIFFERENCES.

ALL DATA INCLUDED IN THIS PRESENTATION ARE MEANT TO BE USED ONLY AS A GUIDE.

IN ADDITION, THE INFORMATION CONTAINED IN THIS PRESENTATION IS BASED ON IBM’S CURRENT PRODUCT
PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM, WITHOUT NOTICE.

IBM AND ITS AFFILIATED COMPANIES SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE
OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION.

NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, OR SHALL HAVE THE EFFECT OF:

- CREATING ANY WARRANT OR REPRESENTATION FROM IBM, ITS AFFILIATED COMPANIES OR ITS OR THEIR
SUPPLIERS AND/OR LICENSORS




2                                                                                       © 2012 IBM Corporation
Introduction to the speaker


■   Over 20 years experience developing and
    deploying Smalltalk and Java SDKs


■   Recent work focus:

     – IBM JDK architecture

     – Class library engineering

     – Open source participation
                                              Photo


■   My contact information:
       tim_ellison@uk.ibm.com




3                                                     © 2012 IBM Corporation
Agenda



■   Why is compatibility important, and what do we mean by “real world” compatibility?


■   Different types of compatibility : what are they? why are they important? how do we deal with them?


■   Protecting yourself from incompatible changes in Java.


■   Ways to find and address compatibility issues in your own code.




4                                                                                             © 2012 IBM Corporation
The Java promise
■   Benefits of Java SE as a universal computing platform
     – Leverage investment in secure, portable, high-performance, rich function runtime
     – Available across a wide variety of heterogeneous environments
     – Broad ecosystem of tools, books, conferences, developers, services, etc.


■   Java SE is specification based
      – There are a number of different specifications
         • Java Language Specification
         • Java Virtual Machine Specification
         • Java Platform API Specification
         • ...etc
                                                ■   These are detailed specifications for implementers and
                                                    users, to
                                                      – ensure consistency in behavior across implementations
                                                      – describe how the language is interpreted, binaries are
                                                        combined, the memory model executed, etc


                                                ■   Java has evolved through collaboration on specifications
                                                    and competition on implementation


5                                                                                               © 2012 IBM Corporation
The Java compatibility promise
■   As a Java developer you are awarded certain assurances by sticking to the rules
         • often described as “write once run anywhere”
     – Java is therefore the ‘platform’ on which you program
         • you are not programming specifically for Linux or 64-bit or NFS or …
■   Implementers try to optimize the Java platform to exploit the ‘physical’ platform
■   Strong specifications give rise to a broad ecosystem
      – multiple JVMs, multiple class libraries
      – goals of different implementations
          • portability, research, production deployment, size, development support, ...
■   The Technology Compatibility Kit (TCK)
     – ensures that implementations comply with the specifications
■   Implementers use additional test suites to ensure implementation correctness, robustness,
    performance, etc

      “Except for timing dependencies or other non-determinisms and
      given sufficient time and sufficient memory space, a program
      written in the Java programming language should compute the
      same result on all machines and in all implementations.”

         http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#13.2
6                                                                                               © 2012 IBM Corporation
Real-world compatibility
    ■   Real-world compatibility goes beyond the language, runtime, and specifications
    ■   An application's dependency on the Java platform goes beyond the specifications, e.g.:
         – list of, and content of system properties
         – command line options
         – output format: version strings, verbose GC output, etc.
         – ...etc.


    ■   WORA is the Java philosophy that gives you portability across implementations, platforms, etc.
         – the code you wrote continues to work across different Java implementations different hardware
           platforms, vendors, etc.
         – This is one specific aspect of compatibility
         – WORA is viable for a subset of applications, typically migration help is required


    ■   Compatibility ensures the code you wrote continues to work as Java evolves
         – you can pick up bug fixes and enhancements in the platform
         – take advantage of security, performance, new places to run your code
         – some compatibility trade-offs are made as the platform evolves
         – there are a number of tricks and tips for ensuring compatibility and dealing with breakage


    ■   This talk will look at some areas and examples of intentional and unintentional compatibility breakages
7                                                                                                © 2012 IBM Corporation
Types of Compatibility


■   Functional compatibility : does running your program have the same effect ?


■   Source compatibility : does your source code result in the same set of binaries ?


■   Binary compatibility : do your binaries successfully link to the new platform binaries ?




8                                                                                              © 2012 IBM Corporation
Functional compatibility

■   The functional contract of Java is primarily defined by the specifications
■   Some aspects of an implementations behavior are intentionally omitted from the spec
     – they are known or expected to behave differently in different implementations
     – omission does not overly constrain the implementation for future evolution


■   Having application dependencies upon unspecified runtime behavior can lead to breakage
     – For example,
         • Hashing iteration order
         • Walking the stack trace looking for a method
         • Parsing message output from the launcher
         • ...etc.


■   The platform is very good about preserving functional compatibility defined in the specifications
     – it would be bad if programs compiled and ran on the new platform, but did something different!


■   When differences are found that are not compliant with the spec, either
     – the implementation is modified to fit the spec – often chosen for new code
     – the spec is changed to fit the implementation – often chosen for established code

9                                                                                            © 2012 IBM Corporation
Functional changes in the platform are not uncommon
     ■   RFE 6693236: Verification of Version 51.0 Class Files

     ■   RFE 6463998: Spec for java.lang.Float.parseFloat(String) and parseDouble(String) Updated to Document Exception

     ■   RFE : java.lang.Character.isLowerCase/isUpperCase Methods Are Updated to Comply with the Specified Unicode Definition

     ■   RFE 5045147: Inserting an Invalid Element into a TreeMap Throws an NPE

     ■   RFE 5063507: Formatter.format() Now Throws FormatFlagsConversionMismatchException

     ■   RFE 6621689: The Behavior for Several java.nio.channels.DatagramChannel Methods have Changed

     ■   RFE 4640544: Updated Socket Channel Functionality

     ■   RFE 7042594: Spec for java.awt.Color Method Documents Potential Exception

     ■   RFE 6315717: The MouseEvent.getButton() method may return values outside of the [0-3] range

     ■   RFE 6802853: Invoking Windows.setBackground may result in an UnsupportedOperationException exception

     ■   RFE 7023011: Toolkit.getPrintJob(Frame, String, Properties) now throws NullPointerException

     ■   RFE 4714232: The sun.awt.exception.handler System Property has Been Replaced with Official API

     ■   RFE : Handling Certain Color Spaces, as Indicated in the JPEG Spec are Now Optional

     ■   RFE 4700857: Separation of User Locale and User Interface Locale

     ■   RFE 5108776: Reliable Event Handling has been Added to the JMX API

     ■   RFE Out-of-the-Box JMX Management Has a New Keyword for ReadWrite Access

     ■   … and more



10                                                                                                                               © 2012 IBM Corporation
Simple example




                                                                  What is the problem here?


                                                                                  Specification


                                                                                  Application
     public class Parser {
         public static void main(String[] args) {
            System.out.println(Float.parseFloat(null));
         }                                                                        Result
     }


     Exception in thread "main" java.lang.NullPointerException
     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:989)
     at java.lang.Float.parseFloat(Float.java:422)
     at Parser.main(Parser.java:5)


11                                                                                    © 2012 IBM Corporation
In this case, the decision was made
                                                               to change the spec to fit the
                                                               implementation.

                                                               Current behaviour is well established,
                                                               and not unreasonable.


                                                               Simply changing a comment can affect
                                                               compatibility!




     public class Parser {
         public static void main(String[] args) {
            System.out.println(Float.parseFloat(null));
         }
     }

     Exception in thread "main" java.lang.NullPointerException
     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:989)
     at java.lang.Float.parseFloat(Float.java:422)
     at Parser.main(Parser.java:5)


12                                                                                     © 2012 IBM Corporation
Further example


                                                     Specification enhanced to say:

                                               “If this channel's socket is not bound then this
                                               method will first cause the socket to be bound to an
                                               address that is assigned automatically, as if invoking
                                               the bind method with a parameter of null.”




                                                                         Experience now shows the
                                                                         original design choice was
                                                                         poor, but fixing it is a 'breaking'
                                                                         change.




 DatagramChannel's methods #send, #receive, and #connect behavior were
 changed when invoked on an unbound socket. These methods used to return null, but
 now do an implicit bind and continue...

   To restore the previous behavior, the sun.nio.ch.bugLevel property can be set to the
13 value of "1.4", "1.5", or "1.6"                                            © 2012 IBM Corporation
More subtle behavioural changes
■    Not all functional and behavioural changes are so clearly seen...
■    Side effects from changing the VM specification
       – class file format changed in Java 5 to allow for class literals in the constant pool.
       – so code such as
              if (foo instanceof YourClass.class)
         doesn’t cause YourClass to be loaded in Java 5.0 onwards
           • maybe YourClass has a static intializer that does something (fails early etc) when loaded
           • code compiled with 1.4.2 will still work, but show the old class init behavior


■    Side effects from optimizations
       – simple optimizations by the class library developers or JIT developers may break your
         assumptions
           • eg. internal hashtable ordering breaks compatiblity of iteration ordering
           • jitted code can re-arrange some variable read and store within the bounds of the memory
             model


■    Side effects from differences in implementation
       – Class.getName() returns an interned string vs. new string in Oracle's implementation- then it is
         used in an identity hash table assuming it was interned later
       – locks used and ordering of lock in class loading e.g. class loader lock -> deadlock
14                                                                                            © 2012 IBM Corporation
Functional compatibility in the real world

     ■   Functional compatibility is tested using the technology compatibility test suite
     ■   Functional fidelity is limited to the claims made in the specifications
     ■   As the platform evolves functional compatibility breakages are dealt with by:
          – Changing the implementation to match the spec
          – Changing the spec to match the implementation
          – Providing some backwards compatibility options


     ■   Changes to existing function are only considered at major platform release boundaries
          – … and then only after careful consideration
          – Highly unlikely in update and maintenance releases
          – Reflects the 'cost' of moving onto new updates


     ■   Changes can be hard to spot and may result in different behavior only on edge-cases
          – Requires extensive testing of the application to mitigate the effects


     ■   Resolution requires understanding the intent of the application

15                                                                                               © 2012 IBM Corporation
Types of Compatibility


■    Functional compatibility : does running your program have the same effect ?


■    Source compatibility : does your source code result in the same set of binaries ?


■    Binary compatibility : do your binaries successfully link to the new platform binaries ?




16                                                                                              © 2012 IBM Corporation
Source compatibility
■    Does your source code result in the 'same' set of binaries as the platform changes?


■    Most obviously, does the source still compile on the later versions of Java?
      – language changes may invalidate previously acceptable programs
      – may make previously invalid programs valid – but not such an interesting set


■    Main requirement is, if I compile this source again on a different/newer Java implementation does the
     compiler resolve your application's name references to the same or equivalent things in the new
     binary?


■    Why would that not happen?
      – introduction of new language keywords (strictfp, assert, enum)
      – introduction of new types may cause ambiguity where non existed in prior releases




17                                                                                             © 2012 IBM Corporation
Simple example

     public class Parser {

         public static void main(String[] args) {
             boolean assert = args.length != 0;
             System.out.println(assert);
         }
     }




     java version "1.4.2"
     Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)
     Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn142sr1aifx-20060318
     (142SR1a + 98226) (JIT enabled: jitc))

     false




18                                                                                    © 2012 IBM Corporation
Compiling the same source on Java 5.0 ...




     “assert” was a legal variable name in Java 1.4.2, but became a keyword of the
     Java language in Java 5.0

19                                                                             © 2012 IBM Corporation
An example of naming issues in the JDK

      import java.lang.reflect.*;
      import java.net.*;

      public class Parser {

             public static void main(String[] args) {
                 System.out.println(Proxy.isProxyClass(Parser.class));
             }
      }




     java version "1.4.2"
     Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)
     Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn142sr1aifx-20060318
     (142SR1a + 98226) (JIT enabled: jitc))

     false




20                                                                                    © 2012 IBM Corporation
Compiling the same source on Java 5.0 ...




     A second type with the same name was introduced in Java 5.0.
     This may happen in your application code too.


21                                                                  © 2012 IBM Corporation
Method overloading


     import java.math.BigDecimal;

     public class Parser {

         public static void main(String[] args) {     Actual parameter
             System.out.println(new BigDecimal(1));
         }                                            (int)1 undergoes
     }                                                widening primitive
                                                      conversion




                                                      Matched constructor




22                                                                © 2012 IBM Corporation
Compiling the same source on Java 5.0 ...


     import java.math.BigDecimal;                     Adding a more specific
     public class Parser {                            constructor means the same
                                                      program now compiles
         public static void main(String[] args) {
             System.out.println(new BigDecimal(1));
                                                      against a different method...
         }
     }




23                                                                        © 2012 IBM Corporation
Source compatibility in the real world
■    Java's update releases will maintain source compatibility, but major releases may break source
     compatibility with sufficient, considered justification
       – General policy:
          • maintenance releases dot-dot releases do not introduce new language features or APIs
          • functionality and major releases are upwards but not downwards source compatible
          • deprecated APIs are only there to support backwards compatibility, and programs are advised
             to move off these APIs


■    Some code is reachable in the platform (e.g. com.sun.*) but does not form part of the Java platform
     specification, so comes with no compatibility or WORA promises.
       – looking ahead to modularity, these may be permanently hidden by module scope visibility


■    The same source may not compile correctly due to
      – changes to the language
      – changes to the set of types referrable during compilation
■    Some of these problems can be resolved by 'mechanical' transform of source code
      – e.g. type and variable renaming



24                                                                                           © 2012 IBM Corporation
Types of Compatibility


■    Functional compatibility : does running your program have the same effect ?


■    Source compatibility : does your source code result in the same set of binaries ?


■    Binary compatibility : do your binaries successfully link to the new platform binaries ?




25                                                                                              © 2012 IBM Corporation
Binary compatibility
     “A change to a type is binary compatible with (equivalently, does
     not break binary compatibility with) pre-existing binaries if
     pre-existing binaries that previously linked without error will
     continue to link without error. “
     http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html

     ■   What assurances are given for your existing binary program files?
     ■   Maybe your applications are third-party libraries
          – you want to ensure that new versions of your program are
            drop-in replacements for the current version
          – important to understand as it is often infeasible or impossible
            to recompile the whole application stack
     ■   Java implementer: how can Java evolve and ensure we continue
         to run the billions of lines of Java code out there?
     ■   Each Java version goal is to be upwards binary compatible with
         earlier versions
           – code compiled for Java 5 will work on Java 6 and Java 7 etc,
             with caveats (to be discussed)



26                                                                            © 2012 IBM Corporation
Binary file version loading compatibility

     $ java Test
     The java class could not be loaded. java.lang.UnsupportedClassVersionError: Test
     (Unsupported major.minor version 50.0)


     ■   VM checks class file format generated by the compiler

                       Java version                Version accepted
                       1.0.2                       45.0 → 45.3
                       1.1.x                       45.0 → 45.66535
                       1.n                         45 → (44+n).0                e.g. 1.6   45.0 -> 50.0



■    Tools like javac can emit specific class file format for different sources
      – e.g., javac -target 1.4
      – of course, your code must only use the APIs that are available in the earlier runtime...
          • Use javac -source and -bootclasspath options


■    Byte code optimizers and obfuscators may produce class files that violate class file format spec


27                                                                                                 © 2012 IBM Corporation
Evolving Java APIs in the platform and applications (while preserving linkage)
■    Some modifications are binary compatibility preserving
      – Adding a new API package, type, field, method
      – Adding an element to an annotation type with a default value
      – Adding or deleting unchecked exceptions thrown
      – Add, delete, or change static or instance initializers
      – Change abstract classes to non-abstract classes
      – Change final classes to non-final classes
      – Change body of method or constructor
      – Increase method access; that is, from protected access to public access
      – ...and more
■    Others break binary compatibility
      – Deleting an API package, type, field, method
      – Changing a method name
      – Changing the method return type
      – Re-ordering type parameters
      – Adding a public or protected method to an interface
      – Changing a type from non-abstract to abstract
      – Adding checked exceptions thrown
      – ...and more

        http://wiki.eclipse.org/Evolving_Java-based_APIs
28                                                                                © 2012 IBM Corporation
Evolving Java APIs
■    Some modifications are binary compatibility preserving
      – Adding a new API package, type, field, method
      – Adding an element to an annotation type with a default value
                               Virtual extension methods proposed for Java 8
      – Adding or deleting unchecked exceptions thrown
      – Add, delete, or change interface Collection<T> {
                               static or instance initializers
                                  ...
      – Change abstract classes to non-abstract classes block)
                                  void forEach(Block<T>
                                       default Collections.<T>forEach;
      – Change final classes to non-final classes
                               }
      – Change body of method or constructor
      – Increase method access; that is, from protected access to public access binary compatibility.
                               Allows interfaces to evolve while preserving
      – ...and more            Provides a default for implementing classes that do not
                               implement the extension method.
■    Others break binary compatibility
      – Deleting an API package, type, field, method
      – Changing a method name
      – Changing the method return type
      – Re-ordering type parameters
      – Adding a public or protected method to an interface
      – Changing a type from non-abstract to abstract
      – Adding checked exceptions thrown
      – ...and more

        http://wiki.eclipse.org/Evolving_Java-based_APIs
29                                                                                           © 2012 IBM Corporation
Example: modest, considered, binary breaking changes




     Path2D.Double was never intended to be overridden. The spec was changed in
     Java 7.0 causing types that try to override to fail to link.
30                                                                          © 2012 IBM Corporation
Serialization compatibility
■    Serialization is used for object persistence and interchange (e.g. RMI)


■    The binary representation of a serialized object contains a serialVersionUID embodying a type version
     identifier.


■    Classes writing and reading instance representations must be compatible
       – If the class is Serializable then you must consider the impact of Class changes
       – Even internal, private methods and fields may affect the compatibility of serialized objects


■    The specification tells you the list of compatible and incompatible changes
      – See http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html


■    General rule:
      – Take control of the version identifier by specifying it explicitly
         • private static final long serialVersionUID = 1L;
      – Update the version identifier when you are no longer compatible


31                                                                                                © 2012 IBM Corporation
Final thoughts...




32                       © 2012 IBM Corporation
Evolving Java code safely

■    As an API producer you should consider the implications of changes on compatibility
■    As an API consumer there are steps you can take to minimize impact of JDK compatibility changes




■    API docs and compiler warnings are your friend


■    Addressing compatibility and complexity
      – access to early builds in OpenJDK to help uncover issues
      – forum for direct discussion on proposals with designers
      – ability to submit fixes and workarounds, and get feedback on issues you may encounter
      – not a place to ask for help with your application, this is platform issues


■    Modularity will be a real test of application compliance
      – well-behaved applications will see benefits from a modular runtime
      – poorly behaved applications will have to run in a compatibility mode


33                                                                                          © 2012 IBM Corporation
IBM WebSphere Application Server Migration Toolkit

     ■   Free download
     ■   Contains rules covering functional,
         source, and binary compatibility impact
     ■   Analyzes your source and offers advice
         and quick fixes


websphere migration toolkit




34                                                   © 2012 IBM Corporation
References



■    Get Products and Technologies:
      – IBM Java Runtimes and SDKs:
          • https://www.ibm.com/developerworks/java/jdk/
      – IBM Monitoring and Diagnostic Tools for Java:
          • https://www.ibm.com/developerworks/java/jdk/tools/
      – IBM WebSphere Application Server Migration Toolkit
          • http://www.ibm.com/developerworks/websphere/downloads/migtoolkit/


■    Learn:
      – IBM Java InfoCenter:
          • http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp
■    Discuss:
      – IBM Java Runtimes and SDKs Forum:
          • http://www.ibm.com/developerworks/forums/forum.jspa?forumID=367&start=0




35                                                                                    © 2012 IBM Corporation
Copyright and Trademarks



© IBM Corporation 2012. All Rights Reserved.



IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business
Machines Corp., and registered in many jurisdictions worldwide.



Other product and service names might be trademarks of IBM or other companies.



A current list of IBM trademarks is available on the Web – see the IBM “Copyright and trademark
information” page at URL: www.ibm.com/legal/copytrade.shtml




36                                                                                         © 2012 IBM Corporation

Weitere ähnliche Inhalte

Was ist angesagt?

Eclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFaEclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFaBENOIT_LANGLOIS
 
What Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell YouWhat Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell YouJohn Pape
 
Under the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT CompilerUnder the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT CompilerMark Stoodley
 
Soccnx III - Using Social Controls in XPages
Soccnx III - Using Social Controls in XPagesSoccnx III - Using Social Controls in XPages
Soccnx III - Using Social Controls in XPagesLetsConnect
 
Project P erts2012
Project P erts2012Project P erts2012
Project P erts2012AdaCore
 
Providing Global Gateways to success!
Providing Global Gateways to success!Providing Global Gateways to success!
Providing Global Gateways to success!guest28a0624
 
Techniques for Automated Software Evolution
Techniques for Automated Software EvolutionTechniques for Automated Software Evolution
Techniques for Automated Software EvolutionRaffi Khatchadourian
 
Develop Ruby Applications Fast | TubroRuby
Develop Ruby Applications Fast | TubroRubyDevelop Ruby Applications Fast | TubroRuby
Develop Ruby Applications Fast | TubroRubyMichael Findling
 
Safe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get ThereSafe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get ThereAdaCore
 
Mobile Patterns with WebSphere Message Broker
Mobile Patterns with WebSphere Message BrokerMobile Patterns with WebSphere Message Broker
Mobile Patterns with WebSphere Message BrokerAnt Phillips
 
Sivaprasanth Rentala_Kedar profile
Sivaprasanth Rentala_Kedar profileSivaprasanth Rentala_Kedar profile
Sivaprasanth Rentala_Kedar profilesivaprasanth rentala
 
Collab net overview_june 30 slide show
Collab net overview_june 30 slide showCollab net overview_june 30 slide show
Collab net overview_june 30 slide showsfelsenthal
 
Quality on Submit
Quality on SubmitQuality on Submit
Quality on SubmitAgileSparks
 
Overall & technical IT Recruitment skills
Overall &  technical IT Recruitment skills Overall &  technical IT Recruitment skills
Overall & technical IT Recruitment skills Toine Van Kastel
 

Was ist angesagt? (16)

Eclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFaEclipse Summit 2008 - Thales - SolFa
Eclipse Summit 2008 - Thales - SolFa
 
What Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell YouWhat Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell You
 
Under the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT CompilerUnder the Hood of the Testarossa JIT Compiler
Under the Hood of the Testarossa JIT Compiler
 
Soccnx III - Using Social Controls in XPages
Soccnx III - Using Social Controls in XPagesSoccnx III - Using Social Controls in XPages
Soccnx III - Using Social Controls in XPages
 
Project P erts2012
Project P erts2012Project P erts2012
Project P erts2012
 
Providing Global Gateways to success!
Providing Global Gateways to success!Providing Global Gateways to success!
Providing Global Gateways to success!
 
Techniques for Automated Software Evolution
Techniques for Automated Software EvolutionTechniques for Automated Software Evolution
Techniques for Automated Software Evolution
 
Introducing J2ME Polish
Introducing J2ME PolishIntroducing J2ME Polish
Introducing J2ME Polish
 
Develop Ruby Applications Fast | TubroRuby
Develop Ruby Applications Fast | TubroRubyDevelop Ruby Applications Fast | TubroRuby
Develop Ruby Applications Fast | TubroRuby
 
Safe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get ThereSafe and Reliable Embedded Linux Programming: How to Get There
Safe and Reliable Embedded Linux Programming: How to Get There
 
Mobile Patterns with WebSphere Message Broker
Mobile Patterns with WebSphere Message BrokerMobile Patterns with WebSphere Message Broker
Mobile Patterns with WebSphere Message Broker
 
Ozone presentation
Ozone presentationOzone presentation
Ozone presentation
 
Sivaprasanth Rentala_Kedar profile
Sivaprasanth Rentala_Kedar profileSivaprasanth Rentala_Kedar profile
Sivaprasanth Rentala_Kedar profile
 
Collab net overview_june 30 slide show
Collab net overview_june 30 slide showCollab net overview_june 30 slide show
Collab net overview_june 30 slide show
 
Quality on Submit
Quality on SubmitQuality on Submit
Quality on Submit
 
Overall & technical IT Recruitment skills
Overall &  technical IT Recruitment skills Overall &  technical IT Recruitment skills
Overall & technical IT Recruitment skills
 

Andere mochten auch

Impact2014: Practical Performance Troubleshooting
Impact2014: Practical Performance TroubleshootingImpact2014: Practical Performance Troubleshooting
Impact2014: Practical Performance TroubleshootingChris Bailey
 
JavaOne2013: Secure Engineering Practices for Java
JavaOne2013: Secure Engineering Practices for JavaJavaOne2013: Secure Engineering Practices for Java
JavaOne2013: Secure Engineering Practices for JavaChris Bailey
 
Tuning IBMs Generational GC
Tuning IBMs Generational GCTuning IBMs Generational GC
Tuning IBMs Generational GCChris Bailey
 
Java Code to Java Heap - En Français
Java Code to Java Heap - En FrançaisJava Code to Java Heap - En Français
Java Code to Java Heap - En FrançaisChris Bailey
 
JavaOne2013: Implement a High Level Parallel API - Richard Ning
JavaOne2013: Implement a High Level Parallel API - Richard NingJavaOne2013: Implement a High Level Parallel API - Richard Ning
JavaOne2013: Implement a High Level Parallel API - Richard NingChris Bailey
 
Impact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java ToolsImpact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java ToolsChris Bailey
 
Java security in the real world (Ryan Sciampacone)
Java security in the real world (Ryan Sciampacone)Java security in the real world (Ryan Sciampacone)
Java security in the real world (Ryan Sciampacone)Chris Bailey
 
JavaOne2013: Securing Java in the Server Room - Tim Ellison
JavaOne2013: Securing Java in the Server Room - Tim EllisonJavaOne2013: Securing Java in the Server Room - Tim Ellison
JavaOne2013: Securing Java in the Server Room - Tim EllisonChris Bailey
 
High speed networks and Java (Ryan Sciampacone)
High speed networks and Java (Ryan Sciampacone)High speed networks and Java (Ryan Sciampacone)
High speed networks and Java (Ryan Sciampacone)Chris Bailey
 
Introduction to the IBM Java Tools
Introduction to the IBM Java ToolsIntroduction to the IBM Java Tools
Introduction to the IBM Java ToolsChris Bailey
 
JavaOne 2014: Java Debugging
JavaOne 2014: Java DebuggingJavaOne 2014: Java Debugging
JavaOne 2014: Java DebuggingChris Bailey
 
Practical Performance: Understand and improve the performance of your applica...
Practical Performance: Understand and improve the performance of your applica...Practical Performance: Understand and improve the performance of your applica...
Practical Performance: Understand and improve the performance of your applica...Chris Bailey
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScriptChris Bailey
 
JavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine CodeJavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine CodeChris Bailey
 
Debugging Java from Dumps
Debugging Java from DumpsDebugging Java from Dumps
Debugging Java from DumpsChris Bailey
 
JavaOne 2013: Memory Efficient Java
JavaOne 2013: Memory Efficient JavaJavaOne 2013: Memory Efficient Java
JavaOne 2013: Memory Efficient JavaChris Bailey
 
From Java code to Java heap: Understanding and optimizing your application's ...
From Java code to Java heap: Understanding and optimizing your application's ...From Java code to Java heap: Understanding and optimizing your application's ...
From Java code to Java heap: Understanding and optimizing your application's ...Chris Bailey
 
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...Chris Bailey
 
Node Summit 2016: Web App Architectures
Node Summit 2016:  Web App ArchitecturesNode Summit 2016:  Web App Architectures
Node Summit 2016: Web App ArchitecturesChris Bailey
 
FrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with SwiftFrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with SwiftChris Bailey
 

Andere mochten auch (20)

Impact2014: Practical Performance Troubleshooting
Impact2014: Practical Performance TroubleshootingImpact2014: Practical Performance Troubleshooting
Impact2014: Practical Performance Troubleshooting
 
JavaOne2013: Secure Engineering Practices for Java
JavaOne2013: Secure Engineering Practices for JavaJavaOne2013: Secure Engineering Practices for Java
JavaOne2013: Secure Engineering Practices for Java
 
Tuning IBMs Generational GC
Tuning IBMs Generational GCTuning IBMs Generational GC
Tuning IBMs Generational GC
 
Java Code to Java Heap - En Français
Java Code to Java Heap - En FrançaisJava Code to Java Heap - En Français
Java Code to Java Heap - En Français
 
JavaOne2013: Implement a High Level Parallel API - Richard Ning
JavaOne2013: Implement a High Level Parallel API - Richard NingJavaOne2013: Implement a High Level Parallel API - Richard Ning
JavaOne2013: Implement a High Level Parallel API - Richard Ning
 
Impact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java ToolsImpact2014: Introduction to the IBM Java Tools
Impact2014: Introduction to the IBM Java Tools
 
Java security in the real world (Ryan Sciampacone)
Java security in the real world (Ryan Sciampacone)Java security in the real world (Ryan Sciampacone)
Java security in the real world (Ryan Sciampacone)
 
JavaOne2013: Securing Java in the Server Room - Tim Ellison
JavaOne2013: Securing Java in the Server Room - Tim EllisonJavaOne2013: Securing Java in the Server Room - Tim Ellison
JavaOne2013: Securing Java in the Server Room - Tim Ellison
 
High speed networks and Java (Ryan Sciampacone)
High speed networks and Java (Ryan Sciampacone)High speed networks and Java (Ryan Sciampacone)
High speed networks and Java (Ryan Sciampacone)
 
Introduction to the IBM Java Tools
Introduction to the IBM Java ToolsIntroduction to the IBM Java Tools
Introduction to the IBM Java Tools
 
JavaOne 2014: Java Debugging
JavaOne 2014: Java DebuggingJavaOne 2014: Java Debugging
JavaOne 2014: Java Debugging
 
Practical Performance: Understand and improve the performance of your applica...
Practical Performance: Understand and improve the performance of your applica...Practical Performance: Understand and improve the performance of your applica...
Practical Performance: Understand and improve the performance of your applica...
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScript
 
JavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine CodeJavaOne 2015: From Java Code to Machine Code
JavaOne 2015: From Java Code to Machine Code
 
Debugging Java from Dumps
Debugging Java from DumpsDebugging Java from Dumps
Debugging Java from Dumps
 
JavaOne 2013: Memory Efficient Java
JavaOne 2013: Memory Efficient JavaJavaOne 2013: Memory Efficient Java
JavaOne 2013: Memory Efficient Java
 
From Java code to Java heap: Understanding and optimizing your application's ...
From Java code to Java heap: Understanding and optimizing your application's ...From Java code to Java heap: Understanding and optimizing your application's ...
From Java code to Java heap: Understanding and optimizing your application's ...
 
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...
JavaOne2013: Build Your Own Runtime Monitoring for the IBM JDK with the Healt...
 
Node Summit 2016: Web App Architectures
Node Summit 2016:  Web App ArchitecturesNode Summit 2016:  Web App Architectures
Node Summit 2016: Web App Architectures
 
FrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with SwiftFrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with Swift
 

Ähnlich wie Real World Java Compatibility (Tim Ellison)

Real World Java Compatibility
Real World Java CompatibilityReal World Java Compatibility
Real World Java CompatibilityTim Ellison
 
C,c++,java,php,.net training institute in delhi, best training institute for ...
C,c++,java,php,.net training institute in delhi, best training institute for ...C,c++,java,php,.net training institute in delhi, best training institute for ...
C,c++,java,php,.net training institute in delhi, best training institute for ...MCM COmpetitive Classes
 
We4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application developmentWe4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application developmentWe4IT Group
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isilWilly Aguirre
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isilWilly Aguirre
 
Project report for final year project
Project report for final year projectProject report for final year project
Project report for final year projectsuneel singh
 
Lessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage projectLessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage projectMark Roden
 
Twelve Factor - Designing for Change
Twelve Factor - Designing for ChangeTwelve Factor - Designing for Change
Twelve Factor - Designing for ChangeEric Wyles
 
Introducing Java 8
Introducing Java 8Introducing Java 8
Introducing Java 8PT.JUG
 
Java on zSystems zOS
Java on zSystems zOSJava on zSystems zOS
Java on zSystems zOSTim Ellison
 
JVM Multitenancy (JavaOne 2012)
JVM Multitenancy (JavaOne 2012)JVM Multitenancy (JavaOne 2012)
JVM Multitenancy (JavaOne 2012)Graeme_IBM
 
Developing XPages Applications
Developing XPages ApplicationsDeveloping XPages Applications
Developing XPages ApplicationsNiklas Heidloff
 
SemeruRuntimesUnderTheCover .pptx
SemeruRuntimesUnderTheCover .pptxSemeruRuntimesUnderTheCover .pptx
SemeruRuntimesUnderTheCover .pptxSumanMitra22
 

Ähnlich wie Real World Java Compatibility (Tim Ellison) (20)

Real World Java Compatibility
Real World Java CompatibilityReal World Java Compatibility
Real World Java Compatibility
 
Spring
SpringSpring
Spring
 
C,c++,java,php,.net training institute in delhi, best training institute for ...
C,c++,java,php,.net training institute in delhi, best training institute for ...C,c++,java,php,.net training institute in delhi, best training institute for ...
C,c++,java,php,.net training institute in delhi, best training institute for ...
 
spring
springspring
spring
 
We4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application developmentWe4IT lcty 2013 - infra-man - whats new in ibm domino application development
We4IT lcty 2013 - infra-man - whats new in ibm domino application development
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isil
 
Spring presentecion isil
Spring presentecion isilSpring presentecion isil
Spring presentecion isil
 
Project report for final year project
Project report for final year projectProject report for final year project
Project report for final year project
 
Lessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage projectLessons learned from the worlds largest XPage project
Lessons learned from the worlds largest XPage project
 
Learn java theory presentation
Learn java theory presentationLearn java theory presentation
Learn java theory presentation
 
Twelve Factor - Designing for Change
Twelve Factor - Designing for ChangeTwelve Factor - Designing for Change
Twelve Factor - Designing for Change
 
Java By Sai NagaVenkata BuchiBabu Manepalli
Java By Sai NagaVenkata BuchiBabu ManepalliJava By Sai NagaVenkata BuchiBabu Manepalli
Java By Sai NagaVenkata BuchiBabu Manepalli
 
Java By Sai NagaVenkata BuchiBabu Manepalli
Java By Sai NagaVenkata BuchiBabu ManepalliJava By Sai NagaVenkata BuchiBabu Manepalli
Java By Sai NagaVenkata BuchiBabu Manepalli
 
Introducing Java 8
Introducing Java 8Introducing Java 8
Introducing Java 8
 
Java on zSystems zOS
Java on zSystems zOSJava on zSystems zOS
Java on zSystems zOS
 
JVM Multitenancy (JavaOne 2012)
JVM Multitenancy (JavaOne 2012)JVM Multitenancy (JavaOne 2012)
JVM Multitenancy (JavaOne 2012)
 
Developing XPages Applications
Developing XPages ApplicationsDeveloping XPages Applications
Developing XPages Applications
 
SemeruRuntimesUnderTheCover .pptx
SemeruRuntimesUnderTheCover .pptxSemeruRuntimesUnderTheCover .pptx
SemeruRuntimesUnderTheCover .pptx
 
Introduction to Spring & Spring BootFramework
Introduction to Spring  & Spring BootFrameworkIntroduction to Spring  & Spring BootFramework
Introduction to Spring & Spring BootFramework
 
1.Intro--Why Java.pptx
1.Intro--Why Java.pptx1.Intro--Why Java.pptx
1.Intro--Why Java.pptx
 

Mehr von Chris Bailey

NodeJS Interactive 2019: FaaS meets Frameworks
NodeJS Interactive 2019:  FaaS meets FrameworksNodeJS Interactive 2019:  FaaS meets Frameworks
NodeJS Interactive 2019: FaaS meets FrameworksChris Bailey
 
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaSVoxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaSChris Bailey
 
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Silicon Valley Code Camp 2019 - Reaching the Cloud Native WorldSilicon Valley Code Camp 2019 - Reaching the Cloud Native World
Silicon Valley Code Camp 2019 - Reaching the Cloud Native WorldChris Bailey
 
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
FaaS Meets Java EE: Developing Cloud Native Applications at SpeedFaaS Meets Java EE: Developing Cloud Native Applications at Speed
FaaS Meets Java EE: Developing Cloud Native Applications at SpeedChris Bailey
 
AltConf 2019: Server-Side Swift State of the Union
AltConf 2019:  Server-Side Swift State of the UnionAltConf 2019:  Server-Side Swift State of the Union
AltConf 2019: Server-Side Swift State of the UnionChris Bailey
 
Server-side Swift with Swagger
Server-side Swift with SwaggerServer-side Swift with Swagger
Server-side Swift with SwaggerChris Bailey
 
Node Summit 2018: Cloud Native Node.js
Node Summit 2018: Cloud Native Node.jsNode Summit 2018: Cloud Native Node.js
Node Summit 2018: Cloud Native Node.jsChris Bailey
 
Index - BFFs vs GraphQL
Index - BFFs vs GraphQLIndex - BFFs vs GraphQL
Index - BFFs vs GraphQLChris Bailey
 
Swift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift MicroservicesSwift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift MicroservicesChris Bailey
 
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Swift Cloud Workshop - Codable, the key to Fullstack SwiftSwift Cloud Workshop - Codable, the key to Fullstack Swift
Swift Cloud Workshop - Codable, the key to Fullstack SwiftChris Bailey
 
Try!Swift India 2017: All you need is Swift
Try!Swift India 2017: All you need is SwiftTry!Swift India 2017: All you need is Swift
Try!Swift India 2017: All you need is SwiftChris Bailey
 
Swift Summit 2017: Server Swift State of the Union
Swift Summit 2017: Server Swift State of the UnionSwift Summit 2017: Server Swift State of the Union
Swift Summit 2017: Server Swift State of the UnionChris Bailey
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesChris Bailey
 
IBM Cloud University: Java, Node.js and Swift
IBM Cloud University: Java, Node.js and SwiftIBM Cloud University: Java, Node.js and Swift
IBM Cloud University: Java, Node.js and SwiftChris Bailey
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesChris Bailey
 
FrenchKit 2017: Server(less) Swift
FrenchKit 2017: Server(less) SwiftFrenchKit 2017: Server(less) Swift
FrenchKit 2017: Server(less) SwiftChris Bailey
 
AltConf 2017: Full Stack Swift in 30 Minutes
AltConf 2017: Full Stack Swift in 30 MinutesAltConf 2017: Full Stack Swift in 30 Minutes
AltConf 2017: Full Stack Swift in 30 MinutesChris Bailey
 
InterConnect: Server Side Swift for Java Developers
InterConnect:  Server Side Swift for Java DevelopersInterConnect:  Server Side Swift for Java Developers
InterConnect: Server Side Swift for Java DevelopersChris Bailey
 
InterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and WhenInterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and WhenChris Bailey
 
Playgrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFFPlaygrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFFChris Bailey
 

Mehr von Chris Bailey (20)

NodeJS Interactive 2019: FaaS meets Frameworks
NodeJS Interactive 2019:  FaaS meets FrameworksNodeJS Interactive 2019:  FaaS meets Frameworks
NodeJS Interactive 2019: FaaS meets Frameworks
 
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaSVoxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
Voxxed Micro-services: Serverless JakartaEE - JAX-RS comes to FaaS
 
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
Silicon Valley Code Camp 2019 - Reaching the Cloud Native WorldSilicon Valley Code Camp 2019 - Reaching the Cloud Native World
Silicon Valley Code Camp 2019 - Reaching the Cloud Native World
 
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
FaaS Meets Java EE: Developing Cloud Native Applications at SpeedFaaS Meets Java EE: Developing Cloud Native Applications at Speed
FaaS Meets Java EE: Developing Cloud Native Applications at Speed
 
AltConf 2019: Server-Side Swift State of the Union
AltConf 2019:  Server-Side Swift State of the UnionAltConf 2019:  Server-Side Swift State of the Union
AltConf 2019: Server-Side Swift State of the Union
 
Server-side Swift with Swagger
Server-side Swift with SwaggerServer-side Swift with Swagger
Server-side Swift with Swagger
 
Node Summit 2018: Cloud Native Node.js
Node Summit 2018: Cloud Native Node.jsNode Summit 2018: Cloud Native Node.js
Node Summit 2018: Cloud Native Node.js
 
Index - BFFs vs GraphQL
Index - BFFs vs GraphQLIndex - BFFs vs GraphQL
Index - BFFs vs GraphQL
 
Swift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift MicroservicesSwift Cloud Workshop - Swift Microservices
Swift Cloud Workshop - Swift Microservices
 
Swift Cloud Workshop - Codable, the key to Fullstack Swift
Swift Cloud Workshop - Codable, the key to Fullstack SwiftSwift Cloud Workshop - Codable, the key to Fullstack Swift
Swift Cloud Workshop - Codable, the key to Fullstack Swift
 
Try!Swift India 2017: All you need is Swift
Try!Swift India 2017: All you need is SwiftTry!Swift India 2017: All you need is Swift
Try!Swift India 2017: All you need is Swift
 
Swift Summit 2017: Server Swift State of the Union
Swift Summit 2017: Server Swift State of the UnionSwift Summit 2017: Server Swift State of the Union
Swift Summit 2017: Server Swift State of the Union
 
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js MicroservicesIBM Cloud University: Build, Deploy and Scale Node.js Microservices
IBM Cloud University: Build, Deploy and Scale Node.js Microservices
 
IBM Cloud University: Java, Node.js and Swift
IBM Cloud University: Java, Node.js and SwiftIBM Cloud University: Java, Node.js and Swift
IBM Cloud University: Java, Node.js and Swift
 
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-ServicesNode Interactive: Node.js Performance and Highly Scalable Micro-Services
Node Interactive: Node.js Performance and Highly Scalable Micro-Services
 
FrenchKit 2017: Server(less) Swift
FrenchKit 2017: Server(less) SwiftFrenchKit 2017: Server(less) Swift
FrenchKit 2017: Server(less) Swift
 
AltConf 2017: Full Stack Swift in 30 Minutes
AltConf 2017: Full Stack Swift in 30 MinutesAltConf 2017: Full Stack Swift in 30 Minutes
AltConf 2017: Full Stack Swift in 30 Minutes
 
InterConnect: Server Side Swift for Java Developers
InterConnect:  Server Side Swift for Java DevelopersInterConnect:  Server Side Swift for Java Developers
InterConnect: Server Side Swift for Java Developers
 
InterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and WhenInterConnect: Java, Node.js and Swift - Which, Why and When
InterConnect: Java, Node.js and Swift - Which, Why and When
 
Playgrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFFPlaygrounds: Mobile + Swift = BFF
Playgrounds: Mobile + Swift = BFF
 

Kürzlich hochgeladen

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Kürzlich hochgeladen (20)

Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 

Real World Java Compatibility (Tim Ellison)

  • 1. Tim Ellison 1st October 2012 Java and Real-World Compatibility CON5243 © 2012 IBM Corporation
  • 2. Important Disclaimers THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY. WHILST EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. ALL PERFORMANCE DATA INCLUDED IN THIS PRESENTATION HAVE BEEN GATHERED IN A CONTROLLED ENVIRONMENT. YOUR OWN TEST RESULTS MAY VARY BASED ON HARDWARE, SOFTWARE OR INFRASTRUCTURE DIFFERENCES. ALL DATA INCLUDED IN THIS PRESENTATION ARE MEANT TO BE USED ONLY AS A GUIDE. IN ADDITION, THE INFORMATION CONTAINED IN THIS PRESENTATION IS BASED ON IBM’S CURRENT PRODUCT PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM, WITHOUT NOTICE. IBM AND ITS AFFILIATED COMPANIES SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION. NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, OR SHALL HAVE THE EFFECT OF: - CREATING ANY WARRANT OR REPRESENTATION FROM IBM, ITS AFFILIATED COMPANIES OR ITS OR THEIR SUPPLIERS AND/OR LICENSORS 2 © 2012 IBM Corporation
  • 3. Introduction to the speaker ■ Over 20 years experience developing and deploying Smalltalk and Java SDKs ■ Recent work focus: – IBM JDK architecture – Class library engineering – Open source participation Photo ■ My contact information: tim_ellison@uk.ibm.com 3 © 2012 IBM Corporation
  • 4. Agenda ■ Why is compatibility important, and what do we mean by “real world” compatibility? ■ Different types of compatibility : what are they? why are they important? how do we deal with them? ■ Protecting yourself from incompatible changes in Java. ■ Ways to find and address compatibility issues in your own code. 4 © 2012 IBM Corporation
  • 5. The Java promise ■ Benefits of Java SE as a universal computing platform – Leverage investment in secure, portable, high-performance, rich function runtime – Available across a wide variety of heterogeneous environments – Broad ecosystem of tools, books, conferences, developers, services, etc. ■ Java SE is specification based – There are a number of different specifications • Java Language Specification • Java Virtual Machine Specification • Java Platform API Specification • ...etc ■ These are detailed specifications for implementers and users, to – ensure consistency in behavior across implementations – describe how the language is interpreted, binaries are combined, the memory model executed, etc ■ Java has evolved through collaboration on specifications and competition on implementation 5 © 2012 IBM Corporation
  • 6. The Java compatibility promise ■ As a Java developer you are awarded certain assurances by sticking to the rules • often described as “write once run anywhere” – Java is therefore the ‘platform’ on which you program • you are not programming specifically for Linux or 64-bit or NFS or … ■ Implementers try to optimize the Java platform to exploit the ‘physical’ platform ■ Strong specifications give rise to a broad ecosystem – multiple JVMs, multiple class libraries – goals of different implementations • portability, research, production deployment, size, development support, ... ■ The Technology Compatibility Kit (TCK) – ensures that implementations comply with the specifications ■ Implementers use additional test suites to ensure implementation correctness, robustness, performance, etc “Except for timing dependencies or other non-determinisms and given sufficient time and sufficient memory space, a program written in the Java programming language should compute the same result on all machines and in all implementations.” http://java.sun.com/docs/books/jls/third_edition/html/binaryComp.html#13.2 6 © 2012 IBM Corporation
  • 7. Real-world compatibility ■ Real-world compatibility goes beyond the language, runtime, and specifications ■ An application's dependency on the Java platform goes beyond the specifications, e.g.: – list of, and content of system properties – command line options – output format: version strings, verbose GC output, etc. – ...etc. ■ WORA is the Java philosophy that gives you portability across implementations, platforms, etc. – the code you wrote continues to work across different Java implementations different hardware platforms, vendors, etc. – This is one specific aspect of compatibility – WORA is viable for a subset of applications, typically migration help is required ■ Compatibility ensures the code you wrote continues to work as Java evolves – you can pick up bug fixes and enhancements in the platform – take advantage of security, performance, new places to run your code – some compatibility trade-offs are made as the platform evolves – there are a number of tricks and tips for ensuring compatibility and dealing with breakage ■ This talk will look at some areas and examples of intentional and unintentional compatibility breakages 7 © 2012 IBM Corporation
  • 8. Types of Compatibility ■ Functional compatibility : does running your program have the same effect ? ■ Source compatibility : does your source code result in the same set of binaries ? ■ Binary compatibility : do your binaries successfully link to the new platform binaries ? 8 © 2012 IBM Corporation
  • 9. Functional compatibility ■ The functional contract of Java is primarily defined by the specifications ■ Some aspects of an implementations behavior are intentionally omitted from the spec – they are known or expected to behave differently in different implementations – omission does not overly constrain the implementation for future evolution ■ Having application dependencies upon unspecified runtime behavior can lead to breakage – For example, • Hashing iteration order • Walking the stack trace looking for a method • Parsing message output from the launcher • ...etc. ■ The platform is very good about preserving functional compatibility defined in the specifications – it would be bad if programs compiled and ran on the new platform, but did something different! ■ When differences are found that are not compliant with the spec, either – the implementation is modified to fit the spec – often chosen for new code – the spec is changed to fit the implementation – often chosen for established code 9 © 2012 IBM Corporation
  • 10. Functional changes in the platform are not uncommon ■ RFE 6693236: Verification of Version 51.0 Class Files ■ RFE 6463998: Spec for java.lang.Float.parseFloat(String) and parseDouble(String) Updated to Document Exception ■ RFE : java.lang.Character.isLowerCase/isUpperCase Methods Are Updated to Comply with the Specified Unicode Definition ■ RFE 5045147: Inserting an Invalid Element into a TreeMap Throws an NPE ■ RFE 5063507: Formatter.format() Now Throws FormatFlagsConversionMismatchException ■ RFE 6621689: The Behavior for Several java.nio.channels.DatagramChannel Methods have Changed ■ RFE 4640544: Updated Socket Channel Functionality ■ RFE 7042594: Spec for java.awt.Color Method Documents Potential Exception ■ RFE 6315717: The MouseEvent.getButton() method may return values outside of the [0-3] range ■ RFE 6802853: Invoking Windows.setBackground may result in an UnsupportedOperationException exception ■ RFE 7023011: Toolkit.getPrintJob(Frame, String, Properties) now throws NullPointerException ■ RFE 4714232: The sun.awt.exception.handler System Property has Been Replaced with Official API ■ RFE : Handling Certain Color Spaces, as Indicated in the JPEG Spec are Now Optional ■ RFE 4700857: Separation of User Locale and User Interface Locale ■ RFE 5108776: Reliable Event Handling has been Added to the JMX API ■ RFE Out-of-the-Box JMX Management Has a New Keyword for ReadWrite Access ■ … and more 10 © 2012 IBM Corporation
  • 11. Simple example What is the problem here? Specification Application public class Parser { public static void main(String[] args) { System.out.println(Float.parseFloat(null)); } Result } Exception in thread "main" java.lang.NullPointerException at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:989) at java.lang.Float.parseFloat(Float.java:422) at Parser.main(Parser.java:5) 11 © 2012 IBM Corporation
  • 12. In this case, the decision was made to change the spec to fit the implementation. Current behaviour is well established, and not unreasonable. Simply changing a comment can affect compatibility! public class Parser { public static void main(String[] args) { System.out.println(Float.parseFloat(null)); } } Exception in thread "main" java.lang.NullPointerException at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:989) at java.lang.Float.parseFloat(Float.java:422) at Parser.main(Parser.java:5) 12 © 2012 IBM Corporation
  • 13. Further example Specification enhanced to say: “If this channel's socket is not bound then this method will first cause the socket to be bound to an address that is assigned automatically, as if invoking the bind method with a parameter of null.” Experience now shows the original design choice was poor, but fixing it is a 'breaking' change. DatagramChannel's methods #send, #receive, and #connect behavior were changed when invoked on an unbound socket. These methods used to return null, but now do an implicit bind and continue... To restore the previous behavior, the sun.nio.ch.bugLevel property can be set to the 13 value of "1.4", "1.5", or "1.6" © 2012 IBM Corporation
  • 14. More subtle behavioural changes ■ Not all functional and behavioural changes are so clearly seen... ■ Side effects from changing the VM specification – class file format changed in Java 5 to allow for class literals in the constant pool. – so code such as if (foo instanceof YourClass.class) doesn’t cause YourClass to be loaded in Java 5.0 onwards • maybe YourClass has a static intializer that does something (fails early etc) when loaded • code compiled with 1.4.2 will still work, but show the old class init behavior ■ Side effects from optimizations – simple optimizations by the class library developers or JIT developers may break your assumptions • eg. internal hashtable ordering breaks compatiblity of iteration ordering • jitted code can re-arrange some variable read and store within the bounds of the memory model ■ Side effects from differences in implementation – Class.getName() returns an interned string vs. new string in Oracle's implementation- then it is used in an identity hash table assuming it was interned later – locks used and ordering of lock in class loading e.g. class loader lock -> deadlock 14 © 2012 IBM Corporation
  • 15. Functional compatibility in the real world ■ Functional compatibility is tested using the technology compatibility test suite ■ Functional fidelity is limited to the claims made in the specifications ■ As the platform evolves functional compatibility breakages are dealt with by: – Changing the implementation to match the spec – Changing the spec to match the implementation – Providing some backwards compatibility options ■ Changes to existing function are only considered at major platform release boundaries – … and then only after careful consideration – Highly unlikely in update and maintenance releases – Reflects the 'cost' of moving onto new updates ■ Changes can be hard to spot and may result in different behavior only on edge-cases – Requires extensive testing of the application to mitigate the effects ■ Resolution requires understanding the intent of the application 15 © 2012 IBM Corporation
  • 16. Types of Compatibility ■ Functional compatibility : does running your program have the same effect ? ■ Source compatibility : does your source code result in the same set of binaries ? ■ Binary compatibility : do your binaries successfully link to the new platform binaries ? 16 © 2012 IBM Corporation
  • 17. Source compatibility ■ Does your source code result in the 'same' set of binaries as the platform changes? ■ Most obviously, does the source still compile on the later versions of Java? – language changes may invalidate previously acceptable programs – may make previously invalid programs valid – but not such an interesting set ■ Main requirement is, if I compile this source again on a different/newer Java implementation does the compiler resolve your application's name references to the same or equivalent things in the new binary? ■ Why would that not happen? – introduction of new language keywords (strictfp, assert, enum) – introduction of new types may cause ambiguity where non existed in prior releases 17 © 2012 IBM Corporation
  • 18. Simple example public class Parser { public static void main(String[] args) { boolean assert = args.length != 0; System.out.println(assert); } } java version "1.4.2" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2) Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn142sr1aifx-20060318 (142SR1a + 98226) (JIT enabled: jitc)) false 18 © 2012 IBM Corporation
  • 19. Compiling the same source on Java 5.0 ... “assert” was a legal variable name in Java 1.4.2, but became a keyword of the Java language in Java 5.0 19 © 2012 IBM Corporation
  • 20. An example of naming issues in the JDK import java.lang.reflect.*; import java.net.*; public class Parser { public static void main(String[] args) { System.out.println(Proxy.isProxyClass(Parser.class)); } } java version "1.4.2" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2) Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn142sr1aifx-20060318 (142SR1a + 98226) (JIT enabled: jitc)) false 20 © 2012 IBM Corporation
  • 21. Compiling the same source on Java 5.0 ... A second type with the same name was introduced in Java 5.0. This may happen in your application code too. 21 © 2012 IBM Corporation
  • 22. Method overloading import java.math.BigDecimal; public class Parser { public static void main(String[] args) { Actual parameter System.out.println(new BigDecimal(1)); } (int)1 undergoes } widening primitive conversion Matched constructor 22 © 2012 IBM Corporation
  • 23. Compiling the same source on Java 5.0 ... import java.math.BigDecimal; Adding a more specific public class Parser { constructor means the same program now compiles public static void main(String[] args) { System.out.println(new BigDecimal(1)); against a different method... } } 23 © 2012 IBM Corporation
  • 24. Source compatibility in the real world ■ Java's update releases will maintain source compatibility, but major releases may break source compatibility with sufficient, considered justification – General policy: • maintenance releases dot-dot releases do not introduce new language features or APIs • functionality and major releases are upwards but not downwards source compatible • deprecated APIs are only there to support backwards compatibility, and programs are advised to move off these APIs ■ Some code is reachable in the platform (e.g. com.sun.*) but does not form part of the Java platform specification, so comes with no compatibility or WORA promises. – looking ahead to modularity, these may be permanently hidden by module scope visibility ■ The same source may not compile correctly due to – changes to the language – changes to the set of types referrable during compilation ■ Some of these problems can be resolved by 'mechanical' transform of source code – e.g. type and variable renaming 24 © 2012 IBM Corporation
  • 25. Types of Compatibility ■ Functional compatibility : does running your program have the same effect ? ■ Source compatibility : does your source code result in the same set of binaries ? ■ Binary compatibility : do your binaries successfully link to the new platform binaries ? 25 © 2012 IBM Corporation
  • 26. Binary compatibility “A change to a type is binary compatible with (equivalently, does not break binary compatibility with) pre-existing binaries if pre-existing binaries that previously linked without error will continue to link without error. “ http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html ■ What assurances are given for your existing binary program files? ■ Maybe your applications are third-party libraries – you want to ensure that new versions of your program are drop-in replacements for the current version – important to understand as it is often infeasible or impossible to recompile the whole application stack ■ Java implementer: how can Java evolve and ensure we continue to run the billions of lines of Java code out there? ■ Each Java version goal is to be upwards binary compatible with earlier versions – code compiled for Java 5 will work on Java 6 and Java 7 etc, with caveats (to be discussed) 26 © 2012 IBM Corporation
  • 27. Binary file version loading compatibility $ java Test The java class could not be loaded. java.lang.UnsupportedClassVersionError: Test (Unsupported major.minor version 50.0) ■ VM checks class file format generated by the compiler Java version Version accepted 1.0.2 45.0 → 45.3 1.1.x 45.0 → 45.66535 1.n 45 → (44+n).0 e.g. 1.6 45.0 -> 50.0 ■ Tools like javac can emit specific class file format for different sources – e.g., javac -target 1.4 – of course, your code must only use the APIs that are available in the earlier runtime... • Use javac -source and -bootclasspath options ■ Byte code optimizers and obfuscators may produce class files that violate class file format spec 27 © 2012 IBM Corporation
  • 28. Evolving Java APIs in the platform and applications (while preserving linkage) ■ Some modifications are binary compatibility preserving – Adding a new API package, type, field, method – Adding an element to an annotation type with a default value – Adding or deleting unchecked exceptions thrown – Add, delete, or change static or instance initializers – Change abstract classes to non-abstract classes – Change final classes to non-final classes – Change body of method or constructor – Increase method access; that is, from protected access to public access – ...and more ■ Others break binary compatibility – Deleting an API package, type, field, method – Changing a method name – Changing the method return type – Re-ordering type parameters – Adding a public or protected method to an interface – Changing a type from non-abstract to abstract – Adding checked exceptions thrown – ...and more http://wiki.eclipse.org/Evolving_Java-based_APIs 28 © 2012 IBM Corporation
  • 29. Evolving Java APIs ■ Some modifications are binary compatibility preserving – Adding a new API package, type, field, method – Adding an element to an annotation type with a default value Virtual extension methods proposed for Java 8 – Adding or deleting unchecked exceptions thrown – Add, delete, or change interface Collection<T> { static or instance initializers ... – Change abstract classes to non-abstract classes block) void forEach(Block<T> default Collections.<T>forEach; – Change final classes to non-final classes } – Change body of method or constructor – Increase method access; that is, from protected access to public access binary compatibility. Allows interfaces to evolve while preserving – ...and more Provides a default for implementing classes that do not implement the extension method. ■ Others break binary compatibility – Deleting an API package, type, field, method – Changing a method name – Changing the method return type – Re-ordering type parameters – Adding a public or protected method to an interface – Changing a type from non-abstract to abstract – Adding checked exceptions thrown – ...and more http://wiki.eclipse.org/Evolving_Java-based_APIs 29 © 2012 IBM Corporation
  • 30. Example: modest, considered, binary breaking changes Path2D.Double was never intended to be overridden. The spec was changed in Java 7.0 causing types that try to override to fail to link. 30 © 2012 IBM Corporation
  • 31. Serialization compatibility ■ Serialization is used for object persistence and interchange (e.g. RMI) ■ The binary representation of a serialized object contains a serialVersionUID embodying a type version identifier. ■ Classes writing and reading instance representations must be compatible – If the class is Serializable then you must consider the impact of Class changes – Even internal, private methods and fields may affect the compatibility of serialized objects ■ The specification tells you the list of compatible and incompatible changes – See http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html ■ General rule: – Take control of the version identifier by specifying it explicitly • private static final long serialVersionUID = 1L; – Update the version identifier when you are no longer compatible 31 © 2012 IBM Corporation
  • 32. Final thoughts... 32 © 2012 IBM Corporation
  • 33. Evolving Java code safely ■ As an API producer you should consider the implications of changes on compatibility ■ As an API consumer there are steps you can take to minimize impact of JDK compatibility changes ■ API docs and compiler warnings are your friend ■ Addressing compatibility and complexity – access to early builds in OpenJDK to help uncover issues – forum for direct discussion on proposals with designers – ability to submit fixes and workarounds, and get feedback on issues you may encounter – not a place to ask for help with your application, this is platform issues ■ Modularity will be a real test of application compliance – well-behaved applications will see benefits from a modular runtime – poorly behaved applications will have to run in a compatibility mode 33 © 2012 IBM Corporation
  • 34. IBM WebSphere Application Server Migration Toolkit ■ Free download ■ Contains rules covering functional, source, and binary compatibility impact ■ Analyzes your source and offers advice and quick fixes websphere migration toolkit 34 © 2012 IBM Corporation
  • 35. References ■ Get Products and Technologies: – IBM Java Runtimes and SDKs: • https://www.ibm.com/developerworks/java/jdk/ – IBM Monitoring and Diagnostic Tools for Java: • https://www.ibm.com/developerworks/java/jdk/tools/ – IBM WebSphere Application Server Migration Toolkit • http://www.ibm.com/developerworks/websphere/downloads/migtoolkit/ ■ Learn: – IBM Java InfoCenter: • http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp ■ Discuss: – IBM Java Runtimes and SDKs Forum: • http://www.ibm.com/developerworks/forums/forum.jspa?forumID=367&start=0 35 © 2012 IBM Corporation
  • 36. Copyright and Trademarks © IBM Corporation 2012. All Rights Reserved. IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., and registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web – see the IBM “Copyright and trademark information” page at URL: www.ibm.com/legal/copytrade.shtml 36 © 2012 IBM Corporation