Giter VIP home page Giter VIP logo

app-server-migration's Introduction

AppServerMigration

About AppServerMigration

Application Server Migration automates the discovery process of migrating the code from source server to target server based on Java programming language.

Cloning the project

git clone [email protected]:awslabs/app-server-migration.git
cd app-server-migration

Build the project

Prior to building the project, ensure that you have the following tools installed in your machine:

  • Java 8
  • Docker
  • Maven
  • Git

For Linux (Ubuntu, CentOS and RHEL) and Mac OS, you may execute the ./setup.sh script to install the above dependencies. For Windows, kindly follow their official documentation guide for installation.

Build the project using mvn package command.

Run the project

For Linux and MacOS machines

# Run Database 
# During installation script may ask for password, enter your system password.
# After installation AurangoDB Web interface is accessible on http://localhost:8529 (using default user name: root and password: openSesame)
bash arangoDB.sh

# Run Analyzer
Option 1: 
# This option is helpful when you want to check out projects from SCM and run the scan
# In this mode we provide repository details of projects(which needs to be scanned) 
# in the configuration file and provide path of configuration file as shown below

./run.sh config:<path/to/configurationfile> <destination/path/> <ARANGO_USERNAME> <ARANGO_ROOT_PASSWORD> <Single or multiple comma separated rule names>

or
Option 2:
# This option is helpful when you already have source code downloaded on your machine
# In this mode we provide local path of the project 

./run.sh source:<path/to/project> <destination/path/> <ARANGO_USERNAME> <ARANGO_ROOT_PASSWORD> <Single or multiple comma separated rule names>
e.g.
./run.sh source:/usr/example/project/ ~/test-directory root openSesame oracle-to-postgres,weblogic-to-tomcat

For Windows machines

# Run Database (default root password will be openSesame)
powershell ./arangoDB.ps1 config:<path/to/configurationfile> <destination/path/> <ARANGO_USERNAME> <ARANGO_ROOT_PASSWORD>
# Run Analyzer
Option 1: 
# This option is helpful when you want to check out projects from SCM and run the scan
# In this mode we provide repository details of projects(which needs to be scanned) 
# in the configuration file and provide path of configuration file as shown below

powershell ./run.ps1 config:<path/to/configurationfile> <destination/path/> <ARANGO_USERNAME> <ARANGO_ROOT_PASSWORD> <Single or multiple comma separated rule names>

or
Option 2:
# This option is helpful when you already have source code downloaded on your machine
# In this mode we provide local path of the project 

powershell ./run.ps1 source:<path/to/project> <destination/path/> <ARANGO_USERNAME> <ARANGO_ROOT_PASSWORD> <Single or multiple comma separated rule names>
e.g.
powershell ./run.ps1 source:/usr/example/project/ /usr/example/project/reports root openSesame oracle-to-postgres,weblogic-to-tomcat

Create custom rules

You may create your own rules which can be fed to the rule engine in order to assess to your source files based on your rules. There are 2 files which you need to create rules.json and recommendations.json. For reference, you can check oracle-to-postgres-javarules.json and oracle-to-postgres-recommendations.json respectively.

The rules.json file would look like:

{
	"analyzer": "com.amazon.aws.am2.appmig.estimate.java.JavaFileAnalyzer",
	"file_type": "java",
	"rules": [
		{
			"id": 1,
			"name": "Name",
			"description": "Detailed Description",
			"complexity": "minor",
			"mhrs": 1,
			"rule_type": "package",
			"remove": {
				"import": ["java.sql.DriverManager","oracle.jdbc.driver.OracleDriver"]
			},
			"recommendation": 12
		},
	]
}

Understanding each key of above JSON file:

  • analyzer: Canonical name of the analyzer class. In the above example, we are using JavaFileAnalyzer.java. You may create your own Analyzer by implementing IAnalyzer interface.
  • file_type: Type of source files which will be assessed
  • rules: Array of objects, each corresonding to a rule
    • id: Rule identifier
    • name: Name of the rule
    • description: A verbose rule description
    • complexity: AppServerMigration identifies the complexity of migration per application either as minor, major or critical, depending on the features that need to be converted to make the application target compatible. If the changes are only in the configurations and not in the code, then it is minor. Major category involves code changes. There might be features specific to the source server which are not supported on the target server. In such scenarios, the whole functionality needs to be re-written. Such categories fall under critical complexity. For instance, trying to migrate a web application from Oracle WebLogic to Apache Tomcat, which has EJB code.
    • mhrs: Effort estimations in person hours to migrate the application. Report shows the time required to migrate per feature, along with the total time needed to migrate the entire application.
    • rule_type: Denotes where to search to find a rule match. In the above example rule, it will look for import statements to search for imported packages. The processing logic is coded in the Analyzer.
    • remove: Action denoting elimination of attributes present inside it. In the above example, the rule will match against any import statement having package name either java.sql.DriverManager or oracle.jdbc.driver.OracleDriver.
    • recommendation: Maps to the identifier of recommendation present in the associated recommendations.json file.

The recommendations.json file would look like:

"recommendations": [
		{
			"id": 1,
			"name": "Replace Oracle database driver with Postgres database driver",
			"description": "Review the driver being loaded in this block of code and change the driver from oracle.jdbc.driver.OracleDriver to  org.postgresql.Driver"
		},
]

Understanding each key of above JSON file:

  • recommendations: Array of objects, each representing a recommendation.
    • id: Recommendation identifier
    • name: Name of the recommendation, which will be displayed on the report
    • description: A verbose recommendation description, which will be displayed on the report

To run ArangoDB in local (alternative to running arango.sh)


Running in-memory graph database ArangoDB

docker run -p 8529:8529 -e ARANGO_ROOT_PASSWORD=openSesame arangodb/arangodb:3.8.3

Connecting to ArangoDB UI

http://localhost:8529/

You can find the name of the container by running

docker ps

To retrieve the HOST run the following command with container ID obtained from docker ps

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <<CONTAINER ID>>

To stop a ArangoDB database instance, run the following command

docker stop CONTAINER_NAME

Security

See CONTRIBUTING for more information.

License

This project is licensed under the Apache-2.0 License.

app-server-migration's People

Contributors

agoteti avatar ferozbaig-amzn avatar saikatak avatar rajkag avatar satyacloudcode avatar mansiyd avatar dependabot[bot] avatar amazon-auto avatar praghu1 avatar sandeep7658 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.