/ Installation  

Installation survival guide update 20.3 (and what's new!)

Hi there AppWorks fans,

Welcome to a new installment of AppWorks tips.

Yes…the new GA AppWorks platform version 20.3 (also known as version 20 EP3) is available. And as you (probably) already know this is available since Q3 2020 and in this post we’ll just install it. So, here it is together with (as always) an update on the new features that are released in this version!

Let get right into it…

My starting point is still my own manual that you can find in the main installation menu. But an update will be given to you on each step I did on the 20.3 installation.

  1. Oracle Virtual Box

We just make sure this VM tool is up to date with the latest version. You are notified when the time is there…I never had any problems with any off the latest versions I used for my images.

  1. Creation of the VM image on Virtual Box

The steps still apply with an extra notion of the ‘Supported Environments’ PDF that can be found here. You see we could update the OS to CentOS 8, but 7 is still valid to use…Why change a winning team!?


The image I’m currently using is: CentOS-7-x86_64-Minimal-2003.iso

  1. Requesting an AppWorks license

I (again) tried to install with an older 20.2 license…and…it worked! That was not expected as I can remember this quote from OpenText “License keys for AppWorks are version specific”.

But in case you request a new one make sure to request a new one with the same full qualified domain hostname!

  1. Installing CentOS (minimal)

The same to be followed (watch the FQDN)

  1. Installing Java

Can be the same I only point now directly to the /usr/lib/jvm/java-11-openjdk- in my cat ~/.bash_profile

You probably get a later version now during installation. I run with java -version. Make sure it’s >= 11.0.6 (see the bug-note)!

openjdk version "11.0.7" 2020-04-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.7+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.7+10-LTS, mixed mode, sharing)


  1. Installing TomEE

The same and we also keep in mind this extra note.

The manual makes an additional step this time that has to do with a ‘commons-daemon’ service and the ‘jsvc’ tool that you need to generate! All these (complex steps) are needed to run tomcat in ‘daemon’ mode which is the Unix way for running TomEE as a service (like in Windows). And the documentation is even talking about a ‘known issue’ in that daemon scripts which OpenText fixes with a downloadable zip with the corrected files!?

As we already saw in previous installations we can simply create our own ‘systemctl’ service and start/stop our TomEE with systemctl stop|start tomee like we do for all our services! And automatically enable this service to start on system start-up. Far better in my opinion and I’m not the only one. Great example here.

Make sure to use the correct GA version of TomEE (this time we use 8.0.3) found here since Jun. 2020. With this also make sure you point out to the correct installation location /opt/tomee/apache-tomee-plus-8.0.3


  1. Installing PostgreSQL

Still the same (including the JDBC driver JAR file!)


  1. Installing CARS

Still the same installation procedure. Here is the direct download link. I also go for the whole suite this time where also ‘OTDS’ and the ‘Gateway’ is including as both will be used on this site.

The version for CARS is 2.7!

Since 20.2 we also see a new screen in the wizard for the LDAP management!…I gave it also the password ‘admin’.

  1. Installing AppWorks

Almost the same procedure to follow with one different step for that same LDAP!…Give it the ‘admin’ password.

Important is to update your environment variables with these 2 extra comments

  • Don’t add this jar on the CLASSPATH already /opt/opentext/AppWorksPlatform/defaultInst/cordyscp.jar
  • Also don’t add this lib to the LD_LIBRARY_PATH already /opt/opentext/AppWorksPlatform/defaultInst/lib

Believe me that you don’t want those 2 bullets up-front in your bash_profile. It lost me a full day struggling with it as TomEE did not found its own libraries anymore after installing the AppWorks platform. After all the searching I found these 3 related files where the last one is also setting the CLASSPATH variable…lesson learned here!!

sudo vi /opt/tomee/apache-tomee-plus-8.0.3/bin/setenv.sh
sudo vi /opt/opentext/AppWorksPlatform/defaultInst/bin/asenv.sh
sudo vi /opt/opentext/AppWorksPlatform/defaultInst/bin/wcpenv.sh

This is the bash_profile I now use:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc

# User specific environment and start-up programs

export CLASSPATH=$CLASSPATH:/opt/tomee/apache-tomee-plus-8.0.3/lib/postgresql-42.2.5.jar
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-
export PATH=$PATH:$HOME/.local/bin:$HOME/bin
export CATALINA_HOME=/opt/tomee/apache-tomee-plus-8.0.3
  • Make sure to pass the CLASSPATH variable within the setup where you made that ‘postgresql-42.2.5.jar’ file available. sudo CATALINA_HOME=$CATALINA_HOME CLASSPATH=$CLASSPATH ./OpenText_AppWorks_Platform_20.3.bin
  • And…in all the screenshots you will see 20.3 in the header! 😏

Extra note

After the installation we were able to check some logging with sudo cat /opt/opentext/AppWorksPlatform/defaultInst/Logs/Monitor.xml, but that log file is not available at this moment. There is still a monitor service container available that point to this log location, but outputs nothing with the default settings!

We could also check if AppWorks is running fine with ps aux | grep cordys, but later we see that this service gets up and running once we finished the package deployment in our last step.

Also stop/start AppWorks can’t be done with these commands anymore:

/etc/init.d/wcpddefaultInst stop` or `systemctl stop wcpddefaultInst.service
/etc/init.d/wcpddefaultInst start` or `systemctl start wcpddefaultInst.service

So, it looks like this release only has a CARS service and a TomEE service to restart!

  1. The final packages deployment

It’s all the same, but when done you can also check the server for ps aux | grep cordys as it will give some result now; So it looks like our good old ‘WCPD’ service is running embedded in TomEE…nice!

This was also the comment from OpenText after asking the same question: “We moved the monitor service into the TomEE application server. From AppWorks Platform 20.2, a fresh installation will not create the Monitor OS Service anymore.”

🆕 Update on the available changes in 20.3 🆕

With a new version of the platform we also get a lot of new functionality. This will give you a proper overview of the ‘new stuff’.

Let’s just jump through the list of new features in the release notes and see what kind of #nicelyness OpenText came up with in this release. Let’s craft ourselves a project with a start structure like this:


And just create a new entity in the ‘entities’ folder.


Is it a new loading icon I see passing by?…Or is it me because I’m excited?

You will get this screen with the first noticeable option we’ve all been waiting for…


Man…I can’t wait…Just create some properties; leave that mark enabled and hit the ‘Add’ button for some magic to happen!





Finally…we move from low-code to quick-code! 😜

And do you also see that ‘Magnifier’ icon in the top right corner…I don’t think I saw that thing in 20.2!?…But who cares…Now its here!

But what is crafted all automatically by itself?

  • A ‘Create’ form that looks by default like you just drop all the properties of the entity onto the form as you would also do when you create indeed a new form…You still need to make it your own in styling and presentation, but it’s a great addition.
  • A ‘DefaultLayout’ that already has the ‘Breadcrumbs’, ‘Actions’ and ‘Form’ panels ready and preconfigured for you; Even the ‘Create’ form is preselected. And not to forget…This layout is already preconfigured for viewing the instance of the entity…how nice of OpenText…thx!
  • A ‘DefaultList’ that already has all the crafted properties already in place; You just need to move them in correct order and finetune them for your own needs.

Ok…save, publish, and test!

You should be able to directly see this entity in runtime to play with…Faster prototyping is not possible in my opinion…great job!

Unique constraint

With this feature we should have a new type of “Rule” building block…Let’s craft one!

And there it is…


So, next to e_ and a_ we can now use u_

I give it the name u_check_name and hit that ‘Add’ button…what do we get?


Craft something nice and see if it works in runtime!?


Remember our post about the singleton pattern?…Well, now we can use this…And we don’t need a BPM for it…nice!

Building block types exposed in the entity overview

I don’t know if you saw it already, but for the most common building block you see now on what kind of type it is crafted:


This provides us a much better overview on what we are building in our solution!

Compact building block list for an entity

Hit the grey bar to switch to a more compact view of the list of available building blocks.


You will only see icons, but more information will be shown when you hover over it with your mouse. This is indeed a nice option as the overview of ‘Added building blocks’ is getting wider with the extra column of the feature in the previous section!

Return to homepage after action rule is done

When you create a new action “Rule” building block you get a new option to return to the homepage once the action is done. It’s the option in the ‘Advanced configuration’


A “duration property” on a form can now be configured for acceptable input formats

Nothing more to say…an image should be enough:


Default column layout for a list building block

3 types to select from when you get the overall properties of the list building block

  • Based on property type
  • Fit to panel
  • Fit to label


Auto sign out the client

For security reason the application will automatically sign out after 15 min. (by default) of inactivity.

This setting can be changed in the ‘wcp.properties’ file

sudo vi /opt/opentext/AppWorksPlatform/defaultInst/config/wcp.properties

Add this property (this sample uses a 90 min. timeout)


After this change you need to restart TomEE with systemctl restart tomee

Saving client preferences on close of the browser

Nice option so you are no longer required to first logout and then close your browser. Just closing the browser will save your changes.

I was curious what would happen in the database at that moment, so I just raised the log level and we’ll see if something nice gets updated when we close the browser in runtime!

Edit this file sudo vi /var/lib/pgsql/11/data/postgresql.conf

Set this value log_statement = 'all'

Restart PostgreSQL with systemctl restart postgresql-11.service

Monitor the logging sudo tail -f /var/lib/pgsql/11/data/log/postgresql-Sun.log

I execute this one on Sunday, but your logging file might be of another day!

The test I did was adding a new category in the left panel in runtime…You will see this ‘test’ entry in the JSON below. After some more testing I also see that column data is saved in the database and you start to see new records in the ‘O2OpenTextEntityIdentityComponentsPersonalization’ table every time you close you browser/logout from runtime. Nice to see also how stuff is working in the background!

During this testing I also see that closing the browser is not always saving the data!

  • Chrome: It’s not saving (only on logout), but could also be my chrome with extensions
  • IE: It is indeed saving on close!

This is the insert statement that is done during close/logout

insert into O2OpenTextEntityIdentityComponentsPersonalization (Id, ContextId, PanelId, S_IS_TEMPORARY_COPY, S_TEMPORARY_COPY_DATA, PersonalizationData, S_DISCRIMINATORID) values($1, $2, $3, $4, $5, $6, $7)
$1 = '1'
$2 = '90B11C6A8EBB11E6F0E862F2E28B7B87'
$3 = '90B11C6A8EBB11E6F0E862F2E28A3B87'
$4 = NULL
$5 = NULL
$6 = 'see JSON below!'
$7 = 'F8B156E1037111E6E9CB0FBF3334FBBF'
"id":"My Inbox",
"displayName":"My Inbox"

In HeidiSQL you can now also check that table with SELECT * FROM O2OpenTextEntityIdentityComponentsPersonalization


Learned something valuable with this test! 💪

Maximizing tab panels in a layout

An option in runtime!

If you create a new homepage layout with 2 separate layouts like this:


In the ‘homepage’ you drop in the 2 layouts as tabs like this:


You get this maximize icon in your runtime for these tabs


Using the same names for building blocks

I personally did not have this issue before, but it make sense that sometimes you need to have the same name for a building block. With a proper naming convention, I don’t think that you will face this issue a lot, but it’s now in 20.3 for you to use!

More, more, and even more…

In the Release Notes for this 20.3 release. Make sure you look in the ‘AppWorks Platform 20.3 Release Notes.pdf’ as the ‘AppWorks_20.3_Release_Notes.pdf’ refers to the OpenText support site!

And that’s it…Playground is open, and it gives me that much appreciated ‘DONE’ on the installation update for 20.3 as well for the overview of the new features for this GA EP3 release. And man do we get served with lots of new functionalities in design time! Normally the end-user is served, but now we as low coders can also be happy with the new functionalities. Happy low code with this new 20.3 release and I see you in the next one!

Don’t forget to subscribe to get updates on the activities happening on this site. Have you noticed the quiz where you find out if you are also “The AppWorks guy”?