[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| 
Re: [jakartaee-platform-dev] EE versus SE TCK tests, asking why we have Java SE TCK tests in our Jakarta EE TCKs and planning for EE 11 TCK Refactoring
 | 
Title: Re: [jakartaee-platform-dev] EE versus SE TCK tests, asking
      why we have Java SE TCK tests in our Jakarta EE TCKs and planning
      for EE 11 TCK Refactoring
  
  
    
    
    On 10/26/22 9:59 AM, Tracy Burroughs
      wrote:
    
    
      
      
      
      
      
      
      
      
        Is a Java SE TCK
            really adequate to determine that
            an implementation is compatible?
        
            For example, the Jakarta Persistence 3.1 specification
            contains requirements for when running in a Jakarta EE
            Container, but the Java SE TCK would not confirm an
            implementation could support these requirements. 
            Specifically, when a Jakarta Persistence
            implementation is used in a Jakarta EE Container it must
            support injection (@PersistenceUnit and @PersistenceContext)
            and must support extended persistence contexts for stateful
            beans, and none of this could be covered by a Java SE TCK.
            Those are just some of the Jakarta EE Container integration
            requirements.
            
            If an implementation of the Jakarta Persistence API passes
            the Java SE TCK, but does not support integration with a
            Jakarta EE Container, then is it
            really compatible?
          
       
    
    In the past the answer has been yes as the Persistence SPEC
      ballot was done early (e.g. with only a Persistence Provider
      implementation).  Also in the past, the Jakarta EE Container
      testing with Persistence was covered during the last Spec Ballot
      wave.  That was in the past though, we should be looking forward
      to what we can improve for EE 11+.  
    
    
      
        
            
            Perhaps a Java SE TCK would be adequate to take a
            specification to ballot? 
            However, what happens when a new version of the
            specification is released, and then we discover that some
            new Jakarta EE requirement in the new spec version isn’t
            feasible because none of the implementations that passed the
            Java SE TCK had tested the new Jakarta EE requirements?
          
       
    
    Some possible options for improving process around specifications
      that have both Java SE + Jakarta EE TCK tests:
      1.  Fold all of the Specification API ballots into a series of
      public milestone releases that all implementations can use.  Such
      that the Core Profile/Web Profile/Full Platform Specification
      Ballot will include releasing all of the standalone Spec APIs.
      2.  Or refactor the various standalone Spec APIs to improve our
      layering (not sure if this helps with the Java SE vs Jakarta EE
      TCK test concern but we could discuss further if there is
      interest).
      3.  Or create separate Java SE + Jakarta EE TCKs such that the
      Java SE TCK can be complete very early (for the early Spec Ballot
      waves) and the EE TCK complete very late (for the last Spec Ballot
      wave).
      4.  Or update TCK Process to allow test changes to be made in a
      service release as mentioned in
      https://github.com/jakartaee/specification-committee/issues/63
      (this is a work in progress).
    
      
        
            
            For those specifications that do not contain extra Jakarta
            EE Container integration requirements, then a Java SE TCK
            works well to determine compatible implementations. 
            And it also seems like a good idea to support running
            that same (or similar) TCK in a Jakarta EE Container
            environment, to ensure the implementation continues to be
            compatible. 
            However, for those specifications that contain
            specific Jakarta EE Container integration requirements,
            relying on a Java SE TCK to determine compatibility seems
            questionable.
          
       
    
    Historically, in the case of Persistence, the early Persistence
      Provider implementations are not required to test with an EE
      implementation as that level of testing (and the bug fixing that
      goes with it) is covered later during EE Platform level testing. 
      Persistence is a special case also as it doesn't really have to be
      balloted during the first Spec API Ballot wave, it could be later.
    
    Scott
    
    
      
        
            
            
        Tracy Burroughs 
            
         
        
         
        
          Hi, From a definition
              point of view, what defines a Java SE TCK test versus a
              Jakarta EE TCK test?  IMO, a TCK test can be: A Jakarta EE
              TCK test which means deployed + run with a Jakarta EE
              container.                        
                           
              
         
        
        
          
            
              
                
                  
                    
                      
                        
                          
                            
                              | 
                                 This
                                      Message Is From an External Sender
                                       
                               | 
                             
                            
                              | 
                                 This
                                    message came from outside your
                                    organization.
                                     
                               | 
                             
                          
                         
                       | 
                     
                  
                 
               | 
            
          
        
        
        Hi,
        From a definition point of view, what defines a Java SE TCK
          test versus a Jakarta EE TCK test? 
          
        IMO, a TCK test can be:
        
          - 
            A Jakarta EE TCK test which
              means deployed + run with a Jakarta EE container.
 
          - 
            A Java SE TCK test which
              means run directly with Java SE (doesn't require a Jakarta
              EE container.)
 
          - 
            Both #1 (EE) + #2 (SE) ways
              of being run.
 
        
        What other definitions come to mind when explaining the
          difference between Java SE versus Jakarta EE tests?
        Why do we have Java SE TCK tests in our Jakarta EE TCKs?
        IMO, we need the Java SE TCK tests during the respective
          owning Specification API Ballot process and later for
          validating implementations as being compatible.  For example,
          the Jakarta Persistence 3.1 SPEC API (using EclipseLink)
          initially passed the Ballot process using the Jakarta
          Persistence 3.1 TCK (which contains only Java SE TCK tests)
          and Hibernate ORM also passed the Jakarta Persistence 3.1 TCK
          proving that it is Persistence 3.1 compatible.  We also have
          specifications that do not require testing against an EE
          container to meet the Specification requirements (e.g. JSON
          Binding).  We do have the freedom to add further Jakarta EE
          TCK tests for validating that technologies like JSON Binding
          work with particular EE containers (as previously discussed,
          that is an itch that implementations want to scratch).
        Platform TCK issue#1126 [3] is for planning the (remaining)
          Jakarta EE 11 Platform TCK refactoring effort.  It is a work
          in progress for the initial EE 11 refactoring work.  The
          milestone one goal is to establish a small number of
          refactored Jakarta EE TCK tests for each different test bucket
          to serve as examples that can be extended with the remaining
          tests and also allow interested EE 10 implementations to
          validate that they can pass the initial TCK tests.  The milestone
            two goal is to do the same for adding a small number of
          refactored Java SE TCK tests for the test buckets that have
          such SE tests that can be validated against interested
          implementations of the relevant specifications.  The milestone
            three goal is to add some `hard to refactor` tests to
          each test bucket (should still be using EE 10
          specifications).  The
          milestone four goal is to complete the TCKs needed for
          the first wave of EE 11 Specification Ballots (with EE 11 TCK
          tests being added in time for that to happen).  Everything
          mentioned here is subject to change as we further define the
          Jakarta EE 11 release.
        Scott
        [1] https://jakarta.ee/committees/specification/tckprocess
          
          [2] "How Tests May be Added to a TCK
                The only time tests may be added to a TCK are in a major
          or minor release. A service release which updates the exclude
          list MUST not have test additions or updates (see exception
          below for addressing newer Java SE versions).
          "
        [3] https://github.com/eclipse-ee4j/jakartaee-tck/issues/1126. 
          
       
      
      
      _______________________________________________
jakartaee-platform-dev mailing list
jakartaee-platform-dev@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jakartaee-platform-dev