Introduction
Tubame and Windup are Java EE application migration productivity tools. Each simplifies the migration of applications from other containers to the current release of JBoss application server. Both tools analyze application code and produce a report of found issues. They are both open source projects. This survey compares the features of these two tools.
History
Tubame was developed by Nippon Telegraph and Telephone,(NTT). It has been used by its internal engineering teams for several years. It is a set of 6 Eclipse plugins. In Sep 2013 NTT made 3 of the plugins available to the public via the open source project Tubame [1].
Windup was developed at Red Hat. Internally it was known as project Cake and was used by Red Hat consultants. Windup is a standalone Java application. It was made available to the public Jun 2013 via the open source project Windup [2].
Tool Design
Overview
Tubame is a set of 3 Eclipse plugins and an single external, customizable rules file. The tool analyzes the source code based on the set of rules provided in the rules file. The analysis is only preformed on text based, Java, JSP, and XML files provided in the project directory. The results are saved to a file and subsequently formatted and displayed as a report in a custom Eclipse perspective, KnowledgeBase Search Tool. Tubame enables the user to customize the external rules file and issue advise through its Knowledge Manager Tool perspective. The views in this perspective guide the user through editing the fields of the rules file.
Windup is a standalone Java application. It loads multiple external, customizable rules files. It analyzes files both in a directory structure and in archive files. It analyzes text based Java, JSP, and XML files, as well as, compiled classes if a decompiler library is provided. The report is a set of HTML documents. The user can customize existing rules files and provide new ones, using any XML file editor.
Rules
Tubame and Windup are rules-based tools. Each has defined its own namespace and metadata format for its XML rules file [3],[4]. Each has a predefined, set of rules against which code is evaluated and a rules engine that preforms the analysis. Both provide a means for the user to add rules to the default set without having to rebuild the tool.
Windup's rule definitions are a small set of custom Spring beans. Each bean takes several input parameters. The key parameter is a search pattern defined by either a Regular Expression, (regex) or an XPath expression. The rules engine uses Spring dependency injection to load its rules and Java regex and xpath utilities when evaluating the source files.
Tubame uses a single custom schema type for all its rules. JAXB is used to load the rules into the engine. The schema has defined 2 fields in which search text can be entered. The fields accept regex and XPath expressions. There is a field to specify a custom Python object to execute during the code analysis phase. When no custom Python object is present in the rule, the engine executes a default set of Python objects in its code analysis.
Reports
Tubame and Windup use different reporting frameworks but provide similar information. Both reports group issues into categories, link to the offending source code, provide advise for issue resolution, and estimate the work effort. Tubame uses a custom Eclipse perspective for its report. The perspective provides a set of views. There is a view that displays the analysis results, the detail advise for rules, and monitors work status. Windup generates a set of HTML documents for its report. There is a top level summary page and a detailed page for each file containing issue(s) to be addressed and advise on how to resolve the issue(s). The reports differ in that Tubame lists all the rules it processes in its report. The user must search the list for flagged issues. Windup lists only the issues that need to be addressed. Tubame and Windup use a different unit of measure for work effort. Tubame uses man-hours. Windup uses story points, a measure indicating level of complexity or difficultly. It is left to the user to specify the man-hours base upon task complexity and their skill level.
Building
Tubame and Windup both require Java 1.6 or higher. Windup uses a maven multi-module archtype. The project sources can be built from the command-line or with any IDE that supports maven. Tubame plugins must be built from within Eclipse. It is a multi-step process requiring compiling several foundational projects, manually copying JAR files into the plugin projects, and running the plugin-wizard on each plugin.
Documentation
Windup's project wiki provides guides for building and running the tool, and customizing rules. There is also a video overview of the tool, a detailed look at the report and walk through of enhancing the rule set.
Tubame's project wiki pages provides guides for building and installing the plugins, using the custom perspectives and adding rules to the project.
Feature Comparison
Category | Tubame | Windup |
---|---|---|
Tool Type | Eclipse Plugins | Standalone Java Application |
Open Source Project | https://github.com/TUBAME | http://windup.jboss.org |
Open Source License | Apache License, Version 2.0 | Eclipse Public License v1.0 |
OS Supported | Windows XP/7, Linux | Any platform that runs Java 1.6 |
JRE | JRE/JDK 1.6 or higher | JRE/JDK 1.6 or higher |
Execution Env | Eclipse 3.7 Indigo ONLY (Juno and Kepler not supported) | Command-line (Optional Eclipse plugin available) |
Project Technology Dependencies | Java XML Eclipse (Indigo) API Python 2.7 lxml regex XPath | Java XML Spring API (3.1.0.RELEASE) JDT api Freemarker HTML XSLT regex XPath |
Input Data Formats | Text files: Java, JSP, XML in an Eclipse Java Project | Text files, archive files: Java, JSP, XML, class* provided in a directory structure. * user must provide decompiler library |
Output Formats | custom .jbm file csv | HTML Excel |
Default Rules Files | JBossMigrationKnowhowEAP4toEAP6-En.xml | java-jbpm-config.windup.xml java-persistence-config.windup.xml java-websphere-config.windup.xml java-jboss-config.windup.xml java-ejb-config.windup.xml java-jdk-config.windup.xml java-seam-to-cdi.windup.xml java-jboss-esb-config.windup.xml java-weblogic-config.windup.xml java-webservice-config.windup.xml xml-weblogic-config.windup.xml xml-webservice-config.windup.xml xml-orion-config.windup.xml xml-persistence-config.windup.xml xml-spring-config.windup.xml xml-glassfish-config.windup.xml xml-jboss-config.windup.xml xml-jboss-esb-config.windup.xml xml-resin-config.windup.xml xml-jrun-config.windup.xml xml-ejb-config.windup.xml xml-base-config.windup.xml xml-jonas-config.windup.xml xml-websphere-config.windup.xml manifest-config.windup.xml pom-config.windup.xml |
Build Technology | Java and Eclipse plugin build process | Java and Maven multi-module archtype |
Documentation | Guides | Guides Videos |
Bug Feporting Forum | GitHub project in-progress in-progress | GitHub project |
Download Archive Format | multiple zip files | single jar file |
Comments