Frequently Asked Questions (FAQ)

General


What is Jazillian?
What is this “natural” Java code that Jazillian generates?
So now, what do I do with the Jazillian generated “natural” Java code next?
How do I get Jazillian?
What percent of my code will Jazillian translate correctly?

Supported Languages and Environments


What languages does Jazillian translate?
Which standards and versions does Jazillian support?
What hardware does Jazillian support (or assume that I'm using)?
Which Operating Systems does Jazillian support (or assume that I'm using)?
What COBOL, C, C++ and Java Packages (or "extensions") do you support? MFC? Swing? JDBC? Others?
Can Jazillian handle embedded languages like SQL?

Architecture and Design


Will Jazillian make my code more object oriented?
What if I want to re-architect my application and/or environment in this transformation process?
What does Jazillian do with my data, data layer, data structures, etc.?
What does Jazillian do with my User Interface? How do you link it?

Technical Details


What happens to my application's input and output files?
What are these "customized translation rules"?
Can users add their own translation rules?
Do you provide any sort of runtime library?
Will Jazillian rename functions and variables to match Java conventions?
How does Jazillian handle “Goto’s”?

Legal Issues


Can I use the code I generating for whatever I want?
What if I'm not comfortable submitting my source code to you?


What is Jazillian?

Jazillian is a solution that translates legacy source code (COBOL, C & C++) to “natural” Java source code – Java code that looks as if it was hand written. It is easily readable as Java code; therefore it is highly maintainable and customizable. Jazillian generated code creates a great starting point for enhancements and future development of your Java application. Jazillian does not create “dead-end” proprietary or emulated Java code that is difficult to understand and nearly impossible to modify. Jazillian generated Java code becomes your source code; you really can get rid of your original legacy source code. Jazillian creates a foundation for your Java application for use today and your future development.

What is this “natural” Java code that Jazillian generates?

Jazillian generated “natural” Java code is Java code that looks as if it was hand written. Not only is it easily readable as Java code, making it highly maintainable and customizable, but it has no wrappers, emulation or proprietary Java code involved. There is nothing artificial about it. Any Java developer will be able to understand it, maintain it and modify it. See Jazillian Design Philosophy for more details.

So now, what do I do with the Jazillian generated “natural” Java code next?

Once Jazillian has translated your legacy code to Java, you may plug that code into a J2EE, SOA, or some other Java-based architecture. In this way, you're re-architecting your application while leveraging your existing business logic code. Now that your application is in Java, you can do whatever refactoring, redesigning, and re-architecturing is necessary, using standard, off-the-shelf Java-based tools.

How do I get Jazillian?

Jazillian provides software conversion as a solution or service to make sure we can get you as close to 100% as possible to “natural” Java code. This is done by Jazillian working with you to understand what you have and where you want to go with your overall transformation project (including your application, your architecture, your J2EE and SOA environment). We typically develop customized rules to generate Java code that looks exactly the way you want it, including hooks to make it fit into your architecture. Just contact us to get started.

What percent of my code will Jazillian translate correctly?

This is difficult to answer as it depends on the complexity of the application code. If the code is straightforward and is standards compliant without a lot of complexities, Jazillian will translate 99% to 100% of the code. For an application that is old, has non-standard constructs, or does nasty things with pointers and the preprocessor, Jazillian may only translate 90-95% of the lines correctly. This would probably still mean that using Jazillian would be significantly worthwhile as a resource in your migration and development project, but the generated Java code would not be nearly perfect.

What languages does Jazillian translate?

Jazillian translates COBOL, C, and C++ source code to Java code. Java is the only destination language at this time.

Which standards and versions does Jazillian support?

Jazillian's pattern-matching approach allows us to be very flexible and accept many non-standard constructs in COBOL, C, and C++. Because we only use a language parser in a limited way, the translation is not tightly tied to any specific standard or vendor. In most cases, non-standard constructs will simply "flow through" and appear in the generated Java code. Having said that, we are careful to accept all code that adheres to common language standards:

COBOL: Jazillian accepts code that conforms to the most commonly used COBOL standard, "COBOL85". There are several COBOL standards in use, and many vendor-specific extensions to those standards. Although we officially only support COBOL85 code, we also handle many of the smaller vendor-specific constructs. Major vendor-specific features such as vendor-specific database and user interface code are not handled.

C: Jazillian accepts code that conforms to the latest C standard, "C99". In addition, we have added and continue to add support for some gcc constructs.

C++: Jazillian accepts code that conforms to the latest C++ standard, "ISO/IEC 14882", published in 1998. Jazillian does not currently support non-standard extensions and features for various C compilers.

In many instances, we can build customized translation rules to accommodate specific non-standard code. The key to making this work is your definition of what you are using and what you want to replace it with.

What hardware does Jazillian support?

Java primitives are fixed particular sizes, independent of the hardware.

COBOL field types are replaced by Java primitives that are large enough to hold the same value. For example, "PIC X(10)" indicates a 10-digit field which would require a Java "long".

For C and C++, Jazillian provides a rule which maps each primitive type to a Java primitive type, like this:

unsigned char-->int
signed char-->int
char-->char
unsigned int-->int
signed int-->int
...and so on...
These mappings will be correct for most platforms, but it's configurable.

Which Operating Systems does Jazillian support (or assume that I'm using)?

Jazillian does not make any assumptions about which operating system your code runs under. In the case of C and C++, many applications use preprocessor constructs (e.g. "#ifdef WIN32") to make the code cross-platform. By default, Jazillian has no such variables set, as it typically generates cross-platform Java from any of the platform-specific input code. However, this is configurable; you may have whatever variables set that you want for the translation.

Many simple platform-specific references are replaced by Jazillian. For example, any "\n" at the end of the last printf() argument would be removed and println() would be used instead. But there will always be cases that cannot be caught. You might need to replace a hard-coded ":" with File.pathSeparator, for example.

Any platform-specific references in your code to the Windows Registry, UNIX devices, etc. must be replaced by hand.

What COBOL, C, C++ and Java Packages (or "extensions") do you support? MFC? Swing? JDBC? Others?

Jazillian only generates Java code that's part of the "core" Java language. That means that the code it produces is all under the "java" directory, nothing under "javax", "org", or any other directory. It cannot handle any non-core COBOL, C or C++ packages, such as GUI packages, database accessing packages, logging facilities, transaction managers, etc.

Can Jazillian handle embedded languages like SQL?

Jazillian currently has some limited capability to convert embedded SQL into JDBC calls.

If you have embedded code that you want to carry forward and keep inside the generated Java code (using SQLJ, for example), we can build custom rules to do that.

Will Jazillian make my code more object oriented?

Generally, no. Jazillian will not redesign your application from being procedural to object oriented. Each COBOL PROCEDURE SECTION becomes a Java class. Each C input file becomes a Java class. Each C struct, union, and enum also becomes a Java class. And of course, each C++ class becomes a Java class.

And, naturally, the generated Java code uses the built-in object oriented nature of Java. For example, a call to a global C function can get changed to one or more calls on a particular Java object instance:

                      fseek(v2, v1, 0); --> v2.rewind(); v2.skip(v1);
                  
But beyond that, Jazillian does not do any type of "intelligent re-architecture".

What if I want to re-architect my application and/or environment in this transformation process?

We will work with you to define custom rules that put hooks into your business logic to allow it to fit into your new architecture. For example, your code may need new calls inserted to connect to a database via JDBC or Hibernate, or calls to a web-based GUI. See Jazillian Design Philosophy for more details.

What does Jazillian do with my data, data layer, data structures, etc.?

If your data is kept in flat files, the generated Java code will continue to use those flat files. If your data is kept in some database, there are two options: Either you must replace the database-accessing code with its Java equivalent, or we may be able to write custom rules to replace your old calls with new ones.

Typically, when moving a legacy application to a Java environment, you'll be replacing your current proprietary or vendor-specific database calls with vendor-neutral calls from your Java code, such as JDBC calls to a relational database, or calls to a persistence tool such as Hibernate. Jazillian can help in this conversion by developing custom rules for you.

What does Jazillian do with my User Interface? How do you link it?

As with database access, you have two options when it comes to hooking up your Jazillian-generated Java code to GUI code. Either you must replace the GUI-interface code with its Java equivalent, or we may be able to write custom rules to replace your old calls with new ones.

What happens to my application's input and output files?

If your application reads and writes flat files, Jazillian will produce code that also reads and writes those same files in the same format.

For COBOL, Jazillian stores your FD and WORKING_STORAGE information into a single XML file, which is read when your application is running by the Jazillian-generated Java code. For more information, see The Jazillian COBOL-to-Java Approach.

For C and C++, flat files are typically read and written as streams of bytes, and so the Java code does the same, and looks very similar.

What are these “custom rules?”

Jazillian is designed as a series of several hundred pattern-matching rules that are applied to your legacy code to translate it to Java. Custom rules are additional rules that we develop with your input, which are specific to your application and your architecture. Some examples are:
  • A Rule to add hooks to your new database, GUI, logging mechanism, etc.
  • A Rule to rename files, variables, etc to more meaningful names.
  • A Rule to remove hooks to code that will no longer be used in your new Java architecture.
  • A Rule for organizing your code into Java packages.
  • A Rule for replacing all "long"s with "BigInteger" for better precision.

Ideas for custom rules generally come from you. When you see the Jazillian-generated output for the first time, you may have ideas for changes that you'de like to make, but you want those changes to be automated.

Can users add their own translation rules?

With Jazillian provided as a solution offering, we typically include an agreed upon amount of customer rule development, rule modification and professional services into the scope of what Jazillian provides in the course of a project. For larger projects in terms of size or duration, we will consider working with you to develop some of your own custom translation rules. Exceptions can and do occur and we are open to discuss other ways of working with you based on the specific needs of your company and your project.

Do you provide any sort of runtime library?

Yes. We have a small runtime library that allows us to produce simpler Java code. For example, in C you can determine an object's array index by subtracting the address of the array from the address of the object. Jazillian looks for that usage pattern, replacing it with a call to the ArrayUtils.indexOf() method in the Jazillian Runtime Library. Here is an example.

Will Jazillian rename functions and variables to match Java conventions?

To the extent that that's possible, yes. Files and classes will be named appropriately (for example, hello.c becomes Hello.java). Variables will be renamed where possible ("SOME_VAR_NAME" will become "someVarName"), but not where impossible ("somevarname" will not be changed). Also, Jazillian provides customizable text files to allow you to provide your own mappings of existing names to new names for file names, variable names, and method names. See the links to app2.txt and files.txt in the C Example Application for examples.

How does Jazillian handle “Goto’s”?

Jazillian uses the goto-removal algorithm described in "Taming Control Flow: A Structured Approach to Eliminating Goto Statements" by Ana M. Erosa and Laurie J. Hendren, September 29, 1993. In this approach, the goto statements are moved closer and closer to their corresponding labels in a series of transformation steps, until the goto statements can just be removed. We made just one small improvement on this algorithm, taking advantage of the fact that Java does let you have "labeled breaks" - a variation on a goto.

This algorithm can produce code that, while correct, is more complicated than a person would write. We also have additional pattern-matching rules that will produce simpler Java code.

Can I use the code I generating for whatever I want?

Yes, the code generated by Jazillian is entirely owned by you. This assumes, of course, that you are the owner of the original legacy source code file we translated. Jazillian maintains no rights or claims to the Jazillian generated Java source code. There is no ongoing code usage cost, compiler cost or translation cost. This may be something of a relief if you are coming from a COBOL and mainframe world.

What if I'm not comfortable submitting my source code to you?

This is a very common concern in today’s competitive business world and the world of software piracy and systems security. We typically work with you on a non-disclosure agreement basis. There are many ways to work together to insure the protection of your assets and property. Please contact us to discuss how we can insure that we can work with you to meet the needs or your corporation and environment.
Copyright 2003-2007 Jazillian, Inc. Java is a registered trademark of Sun Microsystems, Inc. in the U.S. or other countries.