Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
If you are looking into migrating all the apps, please look at Backup, Restore and Disaster Recovery.
In order to migrate a single Joget app from one server to another, we will need to assess the current footprint of the app to determine the best way to migrate.
This section is applicable to you if you intend to migrate the form data stored in the server, otherwise, you can move on to the next section.
As part of application building best practises, your app table name should have is own prefix.
For example, in the screenshot below. The "Expenses Claim" app is making use of "j_expense" as the prefix in its forms' table naming.
Figure 1: Form tables
Migrating app form data out would be quite straightforward since it resides in its own set of tables. Depending on the database systems that you are using, you can make use the appropriate tools/clients to export the data out.
Figure 2: Export App
When exporting app, we can export its dependant plugins as well as form data too. By default, only the app design is exported out.
However, it is important to note that although there's ability to export form data in Export App feature, the intent of this feature is to export/import setup data, not production data. If the resultant export package size file size is too big, importing it later on will result in error / request time out issues.
This section is applicable to you if you intend to migrate the form data stored in the server, otherwise, you can move on to the next section.
Referring to Figure 1 above, we can make use of the Form builder > Advanced Tools > Table > Table Usage In Other Apps to check if tables are being shared with other apps.
If there are shared form data tables, then we will need to assess how we can separate the data or continue to access the shared data upon separation. There are few things to consider based on the assumption that the data is vital to the app that we are migrating out:-
This section is applicable to you if your app is making use of processes (Process Builder), otherwise, you can move on to the next section.
Due to the complexity and structure of the data of the workflow engine (shk* tables), as of now, we do not recommend migrating process data out in parts.
This is because data of process instances are stored in set of tables shared by all other apps in the same Joget server. Process data contains not just instances from the latest version of the app that we are migrating out, it may also contain all the process instance data of the same app but from earlier versions. The current server and target server may also contain different set of versions of the same app too. Therefore, migrating the data out in parts will likely to affect the normal functionality of the workflow engine.
We would recommend to leave the process instances' data behind. For process instances that are still in transit (open.running), here's the approach that we recommend.
This way, end users should be able to seamlessly continue with their process flow.
Having explained about the complexity of migrating workflow engine data out, there is an alternative.
In case you find it important to preserve the audit trail of the part / completed process data, you can enable Process Data Collector at the app level. Process related data of the app would be written into set of tables (app_report_* tables) that can be easily digested for analytical use such as by using SLA Report Menu. However, this plugin would only work on new process data as they are being executed after it is enabled, and not retrospectively on past process data.
This section is applicable to you if your app is making use plugins, otherwise, you can move on to the next section.
Referring to Figure 1 above, plugins that are used by the app can be exported alongside with the app itself. You should check if the new / target server has the same plugins but of different versions and check for its compatibilty.
This section is applicable to you if your app is making external calls / relying on external systems, otherwise, you can move on to the next section.
Make a list of all external touch points that your app is using.
Figure 3: Service Calls in App's Performance
The server calls in app's performance tab is a good place to refresh your memory as it will be able to help to list down calls being made outside of the Joget server over a period of time.
For each of them, do check for permission in the external systems to see if you need to whitelist / permit your new server in order to continue to function normally. If the new server is located in environment that is significantly different with current server (i.e geographically far away), it would be good to test its network / throughput to ensure that the app in the new server would be able to function within expected response times and not get bogged down by slow external integrations.
When we are migrating the app out from one to another, it is good to maintain the exact same version from the original server and the one you are migrating to. This is so that we do not introduce too much of moving variables, in case the app we migrated to, fails to function as expected.
Bear in mind that if you intend to upgrade your Joget platform, do it first at the environment where the staging server is, or upgrade the staging server where the said apps have been confirmed working before by following the Upgrade Guide For DX 8. This way, the only change made is to upgrade the Joget platform version. It would be easier to find out cause of any problems as there are not many variables changed.
Typically, we will continue to serve the same set of users in the new server as we scale out.
If you are making use of an identity management system (i.e. LDAP), then it should be relatively easy to simply point to the same server.
Otherwise, you may need to duplicate the existing user directory date (tables with prefix of dir_ in the database) to the new server.
Before attempting anything, always perform a backup in any (app or database) servers that you will be working on. This is so that there's always something to fallback on, just in case!
Here's the checklist that we would recommend before the migration.
Migrate non-process data over first by copying them over. Remember to copy and not to move, so that the original server remains fully functional and intact.
To verify the data that you have copied them over, make use of CRUD Menu or List Menu in the app to browse through the data imported in.
Then, perform the following steps, starting with just 1 process instance. The steps below can be performed using the utility app available for download in this article.
Once we have validated and refined the steps to migrate a process instance, we can then move on to migrate more process instances over.
We have created an utility app to perform the 3 steps listed above. It has been tested using MySQL database and on Joget DX 7.
Please refer to the diagram below to understand on how to use it.
Figure 6: Utility App to Migrate Process Instances
App Version 1
Note: This migration utility app is tested on Joget v6 Enterprise 6.0.31 and Joget DX Enterprise 7.0.16 and with process migrated into a Joget server running on Joget DX 7.0.16.
App Version 2
Note: Added button to abort process instances. Tested on Joget DX 8.0.9.