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

 

CategoryTubameWindup
Tool TypeEclipse PluginsStandalone Java Application
Open Source Projecthttps://github.com/TUBAMEhttp://windup.jboss.org

Open Source License

Apache License, Version 2.0Eclipse Public License v1.0
OS Supported

Windows XP/7,

Linux

Any platform that runs Java 1.6
JREJRE/JDK 1.6 or higherJRE/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 TechnologyJava and Eclipse plugin build processJava and Maven multi-module archtype
DocumentationGuides

Guides

Videos

Bug Feporting

Forum

Email

GitHub project

in-progress

in-progress

GitHub project

Windup Forum

Windup email list

Download Archive Formatmultiple zip filessingle jar file

 

 

 

 

Resources

[1] Tubame project page

[2] Windup project page

[3] Tubame Rules Schema

[4] Windup Rules Schema