9 August 2018

Java EE component versions overview (updated)

The table below lists the components in latest versions of the Java Enterprise Edition.
Many of the Java EE projects live on github.
After Java EE8, Java EE is moving to the EE4J project (Eclipse Enterprise For Java) aka Jakarta.

  • I put the most important changes in red.
  • Components with a [version number] between brackets are  proposed for removal in a future release.
  • An x indicates a technology is removed from the specification
    • JSR's are shown as hyperlinked numbers.
    • SE indicates that an API was moved to the standard edition 
      • eventually followed with the version number
      • Java SE version history is in a separate post 
      • These API's will be removed from Java SE again with Java 11
    • Web technologies are in a separate post
    • EJB history is in a separate post
    • I added some application servers at the bottom of the table. 
    J2EE 1.4

    Java EE5

    Java EE6

    Java EE7

    Java EE8
    Java SE59 1.4176 5270 6336 7337 8
    EJB153 2.1220 3.0318 3.1345 3.2
    EE Management77 1.0

    JMS 914 1.1

    343 2.0368 2.1
    JTA 9071.01.1
    JavaMail 9191.
    Connector (JCA)112 1.51.5322 1.61.7
    Java Activation Framework (JAF) 9251.01.1SE:1.1.1
    Web Services 1091.11.21.3
    Web Services Metadata 181
    JAX-WS (SOAP) 101 JAX-RPC 1.1 224 2.0SE:2.0SE:2.2

    311 1.1
    339 2.0370 2.1
    JAXB 222
    JSON-P  353 1.03741.1
    JSON-B 367
    JAXR (UDDI Registry)1.0
    SOAP w attachments (SAAJ) 671.21.3SE
    StAX 173
    container authorisation (JACC) 1151.
    container authentication (JASPIC) 196

    Security 375

    Common annotations 250
    Java Persistence (JPA)
    1.0317 2.0338 2.12.2
    Bean Validation

    303 1.0349 1.1
    Managed Beans

    CDI for Java EE

    299 1.0346 1.1365 2.0
    DI for Java 330

    Concurrency utilities 236

    State management 350

    Batch  352

    JCache 107

    Sun JSAS89.1
    Glassfish23 (12/09)4 (5/13)5 (9/17)
    JBoss / WildFly457 (7/11)8 (2/14)12 (2/18)
    IBM Websphere678 (6/11)-
    Oracle Weblogic91012.1.1
    12.2.1 (11/15)
    Apache Geronimo123 (7/12)-
    • J2EE 1.3(2001) introduced
      • Message Driven  Beans
      • Local interfaces
    • Profiles are a subset of the spec.
      • Java EE Web profile (only profile currently defined)
        • contents
          • java SE
          • web technologies, JTA, common annotations, JPA, validation, managed beans, interceptors, CDI, DI
          • EJB Lite
            • Stateless, Stateful, and Singleton session beans
              • asynchronous session beans (EJB 3.2)
            • only local EJB interfaces or no interfaces
            • interceptors
            • security
            • transactions
            • non persistent timer only (EJB 3.2)
            • No Message Driven beans and remote invocation.
          • JAX-RS (Java EE7)
        • implemented by
          • Resin 4
          • Apache TomEE 

        7 August 2018

        Java Web Services resources (updated)

        7 June 2018

        Java EE web technology version history (updated)

        JSR numbers are included as links.
        Servers are webcontainers.Take care, web containers do not include JSF. You have to add it yourself or use an enterprise application server. Enterprise application servers are included in the
        complete Java EE version overview.

        Java EEservletJSP     ELJSTLJSF    WebSocketMVCServer       What’s new

        jetty 1
        ServletContext, RequestDispatcher
        tomcat 3.3
        jetty 3
        53 2.3
        53 1.2
        tomcat 4.1
        jetty 4
        154 2.4
        152 2.0
        52 1.1
        tomcat 5.5
        jetty 5
        245 2.1
        127 1.2

        tomcat 6
        jetty 6
        315 3.0

        314 2.0

        tomcat 7
        jetty 8
        asynchronous servlets, EL method calls, more...
        340 3.1
         341 3.0

        344 2.2
        356 1.0

        tomcat 8
        jetty 9.1
        HTML 5, non blocking (Listener) servlet IO
        369 4.0

        372 2.3
        371 1.0tomcat 9 HTTP/2

        21 May 2018

        UML links

        3 May 2018

        windows 10 logon/logoff tracking by filtering system events

        When I'm late filling in my timesheets, it always is a headache to remember which hours I spent working. My windows event viewer (eventvwr.msc) can be a help but the logs are too crowded.
        The events related to logon/logoff are polluted with plenty of events from system services.
        So I ventured to create a filter only showing the events relating to my user. This requires XML filtering based on XPATH.

        1.  Create a new custom event view
          1.  right click the security category and select Create Custom View...
          2.  enter the event ID's you want to filter. For logon/logoff these are 4624, 4634 and 4647
            1. You can get the id's by examining your events or from this MSDN page.
        UPDATE: I'm often not logging of and this method does not log system sleep. Instead of monitoring logon/logoff I made a new filter that logs By source on event source Power-Troubleshooter. The details in the logs show the time the system went to sleep and woke up. The time in the details are in Zulu time (UTC+0), so they are some hours of from the real time, but given that the event time is correct, this is easy to deal with. The post remains interesting as a general explanation of event filtering, so I just added this update, and did not modify the general procedure
        1. Modify the base filter. 
          1. There is a field for filtering on the user name in the filter definition form, but that did not work. By clicking the XML tab we can edit the XML filter definition. Take care: you will not be able to edit the filter using the graphical user interface anymore after that.
          2. I added user filtering in the XML. This is my filter
          3. <QueryList>
              <Query Id="0" Path="Security">
                <Select Path="Security">
                  *[System[( EventID=4624 or EventID=4634 or EventID=4647)] 
                    and EventData[Data[@Name='TargetUsername']='jan']]
          4. I saved the filter and provided a name for the new custom filter. 
        2. We're done
        Now you might wonder where I got the name of the field I needed to filter on from.  You can get the XML element names by examining the event in your logs
        1. In eventviewer, pick a logon event of logon type 2. More info on logon events...
        2. Select the event and in the bottom  half of the window you see the details
        3. Select the Details Tab, then the XML view button. This shows you the name/value pairs on which you can filter. I  want to filter on my user, so I'll need the SubjectUserName field.
        On this Micorosoft technet page you find more info on XML event filtering.

        2 May 2018

        Node.js 10 released

        Node.js 10 is releaed and will become the long term support version (replacing Node 8) in october 2018.

        • ES6 module support: 
          • given the ubiquity of node.js native modules (CommonJS) this was a hard nut to crack
          • Both systems provide and use module elements differently
            • Node.js modules work with module.exports and require 
            • EJS modules work with export and import
          • a difference between both module systems is that node modules load synchronously and ES6 modules load asynchronously. Tools bridging both worlds like webpack load ES6 modules syncronously into Node.js. These tools have allowed isomorphic javascript, running both in the browser and in Node. The node team has not gone this way and stuck to the standard: they load ES6 modules synchronously.
          • Node 10 allows usage of ES6 modules only in files with the new .mjs extension (module javascript). So .js files keep on using module.exports and require. 
          • How do you access a module from the other module universe?
            • You can import from a Node .js file into a ES6 .mjs file, but you can only use a default import. That is logical, as Node's module.exports only exports one thing. This one thing can be an object or a function, that can encapsulate more stuff.
            • You can import from a .mjs file into a Node .js file, but only by explicitly making the import asynchronous using await import(). Again this seems a logical choice.
            • This image from a Medium article  sums it up nicely
            • If you import a file without an extension Node will first look for a .mjs file. If it does not find it, it will look for a .js file. This leaves the door open to using your ES6 .js files, without renaming them.
          • This seems to be a workable system, but I'm not sure I like the degradation of ES6 modules to second class .mjs citizens.  Well, this is a work in progress, and I think for now the Node team is awating the reaction from the developer community
        • API changes
          • fs.promises: fs functions returning promises without having to use util.promisify()!
          • standard numeric codes for error messages
          • console.table
        • npm 6
          • better security and new npm audit command to check a package for vulnerabilities
          • warnings if you download a package with security issues
          • speed bump

        21 March 2018

        Nobody uses Maven
        Maven  uses you

           Venkat Subramaniam