<<

Remastering Legacy

2019.5.15 Kenji Kazumura

0 Copyright 2019 FUJITSU LIMITED Fujitsu and Java

One of the oldest Java related products vendor Including Java for mainframe

Interstage Application since 1998

Java EE certified GlassFish base

Interstage Studio

Eclipse base

classic GUI for desktop

1 Copyright 2019 FUJITSU LIMITED History of Client Java Client & Server Web

Server Server Server Server JSP/JSF /Flash HTML5・SPA Clinet Browser Browser Browser

Reduce Reduce Reduce Client Rich GUI Server Load Security Risk Maintenance Increase Client Increase Improve Poor GUI Maintenance Security Risk pc performance Cost W3C HTML5 recomendation

2 Copyright 2019 FUJITSU LIMITED Applet Technology

Bundle with Navigator WebStart 2001 1998 1996 2013 1995 J2SE 1.2/Java Plugin 2015

Java BundleApplet runs on withHotJava browserNetscape Navigator 2017 2001 Applet 1998 WebStart 1996 1995 J2SE 1.2/Java Plugin Plugin runs on HotJava browser NPAPI ※NPAPI:Netscape Plugin Application Programming

3 Copyright 2019 FUJITSU LIMITED Applet Technology US DHS recomendation Bundle with WebStart (disable Plugin) 2001 1998 1996 2013 1995 J2SE 1.2/Java Plugin 2015 disable NPAPI

Java Applet runs on HotJava browser Edge quit NPAPI 2017 Applet support

Java Virtual Machine quit NPAPI except Flash Plugin Oracle Java 9 deprecate Applet NPAPI Oracle Java 6/7 Web browser remove Plugin ※NPAPI:Netscape Plugin Application Programming Interface

4 Copyright 2019 FUJITSU LIMITED Applet Resources How much are there Applet ?

Fujitsu Customers # of client pc A Company 90,000 B Company 70,000 C Company 54,000 D Company 21,000 E Company 5,000 F Company 3,500 G Company 3,000 H Company 3,000 Total 249,500

5 Copyright 2019 FUJITSU LIMITED Migration Plans

1 Use Applet

until end of IE11

2 Use JSP/JSF JavaServer Faces

Not so much used ?

3 use HTML5/JavaScript

favorite!?

6 Copyright 2019 FUJITSU LIMITED Jakarta EE survey (used API)

Java Persistence API (JPA) 76.23% Java API for Restful Web Services (JAX-RS) 75.73%

Servlet 59.39%

Enterprise JavaBeans (EJB) 51.14%

Java Transition API 47.31% (JTA)

JavaServer Pages 39.39% (JSP) JavaServer Faces 33.63% (JSF)

://jakarta.ee/news/2018/04/24/jakarta-ee-community-survey/ JSP/JSF are not used so much

7 Copyright 2019 FUJITSU LIMITED Migration Technologies

Java app runs on browser without Plugin DukeScript https://dukescript.com/

JavaFX app runs on browser jpro https://www.jpro.io

Transpiler from Java to JavaScript JSweet http://www.jsweet.org/

8 Copyright 2019 FUJITSU LIMITED Transpiler

Change source code in a language to same code in a different language

Difference between transpiler and

COBOL source C source transpiler

Machine code

9 Copyright 2019 FUJITSU LIMITED Examples of transpiler Legacy language • Fortran → C (f2c) • C++ → C (cfront)

JavaScript (altJS) • TypeScript → JavaScript • CoffeeScript → JavaScript

Legacy to JavaScript • Java → JavaScript (GWT, JSweet) • Haskell → JavaScript (GHCJS)

10 Copyright 2019 FUJITSU LIMITED Java→JavaScript transpiler

pros • Need not know JavaScript • Easy to migration of legacy Java app • IDE support

cons • Rapid frontend technology • API mismatch

11 Copyright 2019 FUJITSU LIMITED JSweet

Java → TypeScript(JavaScript) transpiler • http://jsweet.org Syntax Mapper • Only Syntax conversion • Use JavaScript API in Java code Resolve existing problems of transpiler

Application Java source JavaScript API(Candy) separation JavaScript impl

12 Copyright 2019 FUJITSU LIMITED Existing transpiler (API conversion)

Input Java source

Button = new Button(); button.setLabel(“click me”);

transpile Need not modify Java source

Output JavaScript

var button = document.createElement(”button”); button.innerText = “click me”;

13 Copyright 2019 FUJITSU LIMITED JSweet transpiler (Syntax Mapper) Input Java source Button button = new Button(); button.setLabel(“click me”); Modify Java source API conversion Modified Java source HTMLButtonElement button = document.createElement(StringTypes.button); button.innerText = “click me”;

transpile Syntax Mapper

Output TypeScript let button : HTMLButtonElement= document.createElement(”button”) button.innerText = “click me”;

14 Copyright 2019 FUJITSU LIMITED New problem

Need source modification before transpilation Resolve by Candy

No modification Application

Common Library(Candy) Java Modified code source JavaScript API(Candy) separation JavaScript impl Good for systems using common library/framework

15 Copyright 2019 FUJITSU LIMITED JSweet (practical way) Input Java source public class Button extends JButton { Button button = new Button(); public void setLabel(String label) { button.setLabel(“click me”); this.label = label; } No Modify only library modification ( ) for app API conversion

public class Button { public Button { button = document.createElement(StringTypes.button); } Button button = new Button(); public void setLable(String label); button.innerText = label; button.setLabel(“click me”); }

transpile Syntax Mapper

16 Copyright 2019 FUJITSU LIMITED Candy (JSweet library)

Bridge between Java and JavaScript • There are 1744 Candy registered (as of 2018/5) http://www.jsweet.org/candies-releases/ • Can create your own Candy types • Java Candy: Application common Java library can be used Common Library(Candy) by JSweet • JavaScript Candy: JavaScript API(Candy) bridge to existing JavaScript impl JavaScript

17 Copyright 2019 FUJITSU LIMITED System of Company A Summary of system Requirements 22K LoC Applet Migrate to JavaScript Created more than with less cost and time 10years ago Must be same as Use Fujitsu GUI before for Looks and product operation

18 Copyright 2019 FUJITSU LIMITED Fujitsu product for Client provide button,label,frame and dialog for Java GUI application

Application(Java)

JBKGUI SpreadBean Spread functions similar to Excel JRE(AWT/coreAPI) for Java application Java Virtual Machine

JBK Plugin

Web browser

Run applet on Web browser *JBK: J Business Kit

19 Copyright 2019 FUJITSU LIMITED Applet transformation

before after

Applet(Java) Application(JavaScript)

JBKGUI Spread JBKGUI SpreadBean (JavaScript)(JavaScript) Java base core JavaScript spread API JRE(AWT/coreAPI) AWT framework library

JBK Plugin JavaScript engine Java Virtual Machine jQuery AngularJS SlickGrid … Wijmo Web browser Web browser …

20 Copyright 2019 FUJITSU LIMITED Demo POC

21 Copyright 2019 FUJITSU LIMITED Result

LoC of two windows

LoC %auto total manual auto A window 6,102 63 6,039 99.0% B window 4,764 44 4,720 99.1% common 11,789 849 10,940 92.8% total 22,655 956 21,699 95.8% manual: need to modify for transpiler

High auto transformation by Candy of Fujitsu product

22 Copyright 2019 FUJITSU LIMITED Copyright 2019 FUJITSU LIMITED