I am starting with an objective to create a relatively faster and lightweight development VM for Maximo 7.6.1. To cut down on the size and hopefully gain a bit more speed, I am going to use the following components:
Operating System | Ubuntu 16.04.5 LTS (64-bit) |
Database | Oracle 11g Express Edition |
Application Server | Websphere Liberty 18.0.0.2 |
Virtual Machine Monitor | VirtualBox |
Another advantage of using the above components is they are available for free. No license required!
The download size for Oracle 11g Express edition is 301 MB in comparison to 2.5 GB for Enterprise edition. Similarly, Websphere download size is 7.2 GB, whereas Liberty is only 80 MB.
The installation will have only stages:
- Install Ubuntu on VirtualBox VM
- Install Maximo
- Install Oracle Database Express Edition (XE)
- Create MAXIMO database user
- Initialize Maximo Database
- Build Maximo deployment files
- Install WAS Liberty profile
- Deploy on Liberty
- Run Maximo
1- Install Ubuntu on VirtualBox VM
1.1- Download Ubuntu
As per Maximo compatibility matrix, only Ubuntu version supported is 16.04 LTS 64-bit. The required version can be download from here: http://releases.ubuntu.com/xenial/
The file I downloaded is ubuntu-16.04.5-desktop-amd64.iso
1.2- Create Virtual Machine
- Create a virtual machine in VirtualBox with the following settings:
RAM | 4 - 16 GB (It depends on your hardware, I gave it 16 GB) |
Processor | 1 - 4 (Again depends on your hardware) |
Hard Drive size | 25 GB or more (select 'dynamically allocated' so that it doesn't take space unless required) |
- Choose downloaded Ubuntu ISO image into the Optical Drive:
- Start the VM and follow along to install Ubuntu:
Click ‘Install Ubuntu’ and select ‘Erase disk and install Ubuntu’ on the next screen. Moreover, I deselected the option to ‘Download updates while installing’.
Just a few clicks and Ubuntu is ready.
- Install Guest Additions and restart the machine.
- Turn on clipboard between host and guest.
1.3- Create shared folder between host and guest
- Create shared folder using VirtualBox machine settings. Make it permanent and auto-mount.
- Restart the machine.
- Grant access to the shared folder running this command on terminal
$ sudo usermod -aG vboxsf userName
1.4- Enable root login in Ubuntu
First, create the password for root user and then enable the option on the login screen to enter any username.$ sudo passwd root $ sudo sh -c 'echo "greeter-show-manual-login=true" >> /etc/lightdm/lightdm.conf'
2- Install Maximo
2.1- Download Media
Find out the required media files from this link: http://www-01.ibm.com/support/docview.wss?uid=swg24044945
I have downloaded the product only which is MAM_7.6.1_LINUX64.tar.gz (also referred as CNU8YML.tar.gz)
Platform | Component | Required Files |
Linux 64 | Maximo Asset Management 7.6.1 (product only) | CNU8YML.tar.gz |
2.2- Downgrade Firefox to version 42
Maximo Launchpad uses a GUI technology, called XUL, which was last supported by Firefox version 42. Here are a couple of links which talk more about the issue:- Launchpad does not launch on Red Hat Linux and Firefox 43+ (Explains how to get around without Launcher and directly start Installation Manager)
- On Linux, the launchpad does not open when opening launchpad.sh from the terminal (Recommends to use ./imLauncherLinux.sh instead or downgrade Firefox)
- Download Firefox version 42 from Ubuntuzilla
- Find the installed version(s) of Firefox
$ sudo apt list --installed | grep -i firefox
- I have found two versions installed on my machine. Let’s remove both of them:
$ sudo apt-get remove firefox-mozilla-build $ sudo apt-get remove firefox-locale-en
- Install the downloaded Firefox
$ sudo dpkg -i firefox-mozilla-build_42.0-0ubuntu1_amd64.deb
2.3- Start Maximo Launchpad
- Log in as root user
- Extract the downloaded Maximo media file,
MAM_7.6.1_LINUX64.tar.gz
- Change directory to the extracted folder and start Launchpad
# ./launchpad.sh
- Deselect DB2 and Webphere
3- Install Oracle Database Express Edition
Download Oracle Express edition from here: http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html
The file I downloaded is oracle-xe-11.2.0-1.0.x86_64.rpm.zip
For installation, follow the instruction here: https://askubuntu.com/questions/566734/how-to-install-oracle-11gr2-on-ubuntu-14-04
I went with all default options except for following I choose port 8880.
Specify the HTTP port that will be used for Oracle Application Express [8080]: 8880
4- Create MAXIMO Database user
Make sure the database service is started
$ sudo service oracle-xe start
$ sqlplus sys as sysdba
Alter Oracle initialization parameters
sql> alter system set CURSOR_SHARING=FORCE; sql> alter system set NLS_LENGTH_SEMANTICS=CHAR; sql> alter system set OPEN_CURSORS=1000;
Create MAXIMO user if haven’t done already
sql> create user maximo identified by maximo;
Grant required privileges to MAXIMO user
sql> grant connect, resource to maximo; sql> grant create job to maximo; sql> grant create trigger to maximo; sql> grant create session to maximo; sql> grant create sequence to maximo; sql> grant create synonym to maximo; sql> grant create table to maximo; sql> grant create view to maximo; sql> grant create procedure to maximo; sql> grant alter session to maximo; sql> grant execute on ctxsys.ctx_ddl to maximo; sql> grant execute on DBMS_XA to maximo; sql> grant select_catalog_role to maximo;
Create Tablespaces – MAXDATA and MAXINDEX
sql> CREATE TABLESPACE MAXDATA DATAFILE 'max_data_perm_01.dat' SIZE 100M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE 2000M; sql> CREATE TABLESPACE MAXINDEX DATAFILE 'max_index_perm_01.dat' SIZE 100M REUSE AUTOEXTEND ON NEXT 25M MAXSIZE 1000M;
Allow MAXIMO to use newly created Tablespaces
sql> alter user maximo default tablespace MAXDATA temporary tablespace temp; sql> alter user maximo quota unlimited on maxdata; sql> alter user maximo quota unlimited on maxindex;
In case, we need to resize the tablespace beyond the maximum size in future, it can be done using the following command:
alter database datafile 'max_data_perm_01.dat' autoextend on next 50M MAXSIZE 2G;
5- Initialize Maximo Database
First, I have to change maximo.properties file so that Maximo tools can connect to the database.
Let’s copy the original file to the properties folder.
$ cd /opt/IBM/SMP/maximo/applications/maximo/properties/maximo.properties.orig $ sudo cp maximo.properties /opt/IBM/SMP/maximo/applications/maximo/properties/
Edit the connection string in maximo.properties file at /opt/IBM/SMP/maximo/applications/maximo/properties/ to include database connection properties. Only need to change mxe.db.url, rest should already have correct values.
mxe.db.url=jdbc:oracle:thin:@localhost:1521:XE mxe.db.driver=oracle.jdbc.OracleDriver mxe.db.user=maximo mxe.db.password=maximo
Run MAXINST tool. It will create all the tables, data and other objects in the database (will take a while).
$ cd /opt/IBM/SMP/maximo/tools/maximo $ sudo ./maxinst.sh -sMAXINDEX -tMAXDATA -imaximo
Above command will create an empty database. If we also need to include demo/training data, then run the following instead:
$ cd /opt/IBM/SMP/maximo/tools/maximo/en $ sudo unzip maxdemp.ora.zip $ cd /opt/IBM/SMP/maximo/tools/maximo/ $ sudo ./maxinst.sh -sMAXINDEX -tMAXDATA
6- Build Maximo deployment files
Maximo 7.6.1 comes with new tools for building Maximo for liberty. Maximo is built into 7 application bundles which are deployed as separate servers on Liberty (except maximo-ui and maximo-x which are deployed together).
More details about Maximo application bundles for Liberty can be found here.
Following are the commands for building mandatory Maximo bundles (see the fixes below before running this).
$ cd /opt/IBM/SMP/maximo/deployment/was-liberty-default $ su # ./buildmaximoui-war.sh # ./buildmaximo-xwar.sh # ./buildmaximocron-war.sh
DOS line endings error:
While running the ./buildmaxmoui-war.sh I got the following error:
bash: ./buildmaximoui-war.sh: /bin/sh^M: bad interpreter: No such file or directory
This error is due to Windows/DOS file endings on Linux.
To fix it, open the script with vi or vim and enter in vi command mode (key Esc) and type this:
:set fileformat=unix
Then save it
:x! or :wq!
Open file in vi/vim again, see if there are any ^M characters appearing. If found, remove ^M characters manually and save.
XMLChar class not found error:
Build works fine without this fix but Maximo is not able to start complaining about missing XMLChar class. To fix it, comment out the following line in buildmaximoui.war.xml and buildmaximocron-war.xml
<!--<exclude name="xercesImpl-2.7.1.jar"/> -->
Missing tools.jar:
Build command shows a warning that tools.jar is missing. To fix it, run the following:
$ su # cd /opt/IBM/SMP/maximo/tools/java # mkdir lib # cd /opt/IBM/SMP/maximo/applications/maximo/lib # cp tools.jar /opt/IBM/SMP/maximo/tools/java/lib/
Run the build commands given above after applying the fixes.
7- Install WAS Liberty profile
This is pretty straight-forward: just download from the link and unzip :
https://developer.ibm.com/wasdev/downloads/download-latest-stable-websphere-liberty-runtime/
The file I got is wlp-webProfile8-18.0.0.2.zip
8- Deploy on Liberty
Change to the directory where Liberty is extracted and run this command to create server
$ bin/server create maximo-ui-server $ bin/server create maximo-cron-server
Copy Maximo war files to liberty server folder:
- Copy the contents of /opt/IBM/SMP/maximo/deployment/was-liberty-default/deployment/maximo-ui/maximo-ui-server over to /home/syed/wlp/usr/servers/maximo-ui-server
- Copy the contents of /opt/IBM/SMP/maximo/deployment/was-liberty-default/deployment/maximo-cron/maximo-cron-server over to /home/syed/wlp/usr/servers/maximo-cron-server
Following is to install the dependencies for the two bundles:
$ bin/installUtility install maximo-ui-server $ bin/installUtility install maximo-cron-server
9- Run Maximo
Start the liberty server
$ bin/server start maximo-ui-server $ bin/server start maximo-cron-server
Finally, Maximo is up and running!
The total size of VM is about 18 GB.
great
I get a 500 error when trying to logon
Using wlp-webProfile8-19.0.0.7
This where the problem starts in the console log file
[ERROR ] SRVE0271E: Uncaught init() exception created by servlet [MAXIMOStartupServlet] in application [maximoui]: java.lang.NoClassDefFoundError: org/apache/xerces/util/XMLChar
at com.hp.hpl.jena.rdf.model.impl.Util.notNameChar(Util.java:121)
at com.hp.hpl.jena.rdf.model.impl.Util.splitNamespace(Util.java:79)
at com.hp.hpl.jena.graph.Node_URI.getLocalName(Node_URI.java:64)
at com.hp.hpl.jena.rdf.model.impl.ResourceImpl.getLocalName(ResourceImpl.java:133)
at com.hp.hpl.jena.rdf.model.impl.PropertyImpl.checkLocalName(PropertyImpl.java:81)
at com.hp.hpl.jena.rdf.model.impl.PropertyImpl.(PropertyImpl.java:89)
at com.ibm.tivoli.oslc.Constants.(Constants.java:92)
at com.ibm.tivoli.maximo.oslc.provider.OslcResourceCacheImpl.loadOslcRelatedResourcesFromIntegrationOS(OslcResourceCacheImpl.java:623)
at com.ibm.tivoli.maximo.oslc.provider.OslcResourceCacheImpl.loadOslcResourcesFromIntegrationOS(OslcResourceCacheImpl.java:599)
at com.ibm.tivoli.maximo.oslc.provider.OslcResourceCacheImpl.loadOslcResourceInfo(OslcResourceCacheImpl.java:148)
at com.ibm.tivoli.maximo.oslc.provider.OslcResourceCacheImpl.init(OslcResourceCacheImpl.java:93)
at psdi.mbo.AbstractMaximoMTEnabledCache.getCache(AbstractMaximoMTEnabledCache.java:99)
at psdi.mbo.AbstractMaximoMTEnabledCache.init(AbstractMaximoMTEnabledCache.java:67)
at com.ibm.tivoli.maximo.oslc.provider.OslcResourceCache.(OslcResourceCache.java:71)
at com.ibm.tivoli.maximo.oslc.provider.OslcResourceCache.(OslcResourceCache.java:47)
at psdi.iface.mic.MicService.init(MicService.java:153)
at psdi.iface.mic.EntMicService.init(EntMicService.java:126)
at psdi.server.ServiceCoordinator.init(ServiceCoordinator.java:154)
at psdi.server.MXServer.init(MXServer.java:2627)
at psdi.server.MXServer.start(MXServer.java:3703)
at psdi.servlet.MAXIMOStartupServlet.init(MAXIMOStartupServlet.java:92)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:291)
at [internal classes]
It seems that the issue is with XMLChar class not being found. I have already addressed this in the post.
See section ‘XMLChar class not found error’.
Thanks.
Hello,
I would like to try using google cloud. Have you tried it?
Sorry Pankaj, I haven’t.
Hi Umar,
In step 2.3 I faced problem with IBM jre heap size. The error message as below:
JVMDUMP010I System dump written to /tmp/IBM_LaunchPad_3447/core.20191018.102708.3655.0001.dmp
JVMDUMP032I JVM requested Heap dump using ‘/tmp/IBM_LaunchPad_3447/heapdump.20191018.102708.3655.0002.phd’ in response to an event
JVMDUMP010I Heap dump written to /tmp/IBM_LaunchPad_3447/heapdump.20191018.102708.3655.0002.phd
JVMDUMP032I JVM requested Java dump using ‘/tmp/IBM_LaunchPad_3447/javacore.20191018.102708.3655.0003.txt’ in response to an event
JVMDUMP010I Java dump written to /tmp/IBM_LaunchPad_3447/javacore.20191018.102708.3655.0003.txt
JVMDUMP032I JVM requested Snap dump using ‘/tmp/IBM_LaunchPad_3447/Snap.20191018.102708.3655.0004.trc’ in response to an event
JVMDUMP010I Snap dump written to /tmp/IBM_LaunchPad_3447/Snap.20191018.102708.3655.0004.trc
JVMDUMP013I Processed dump event “systhrow”, detail “java/lang/OutOfMemoryError”.
Exception in thread “Thread-17” java.lang.OutOfMemoryError: Java heap space
at java.lang.StringBuffer.ensureCapacityImpl(StringBuffer.java:338)
at java.lang.StringBuffer.append(StringBuffer.java:204)
at com.ibm.tivoli.pae.prereq.MWIPrereq$GrabStream.run(Unknown Source)
Could you please suggest how to increase heap size for IBM jre in this case? As I know, installer copied jre from installer directory:
/Documents/MAM_7.6.0.0_LINUX64/Install/IM/installer.linux.x86_64/jre_7.0.9040.20160504_1613/jre
Hi,
I had got problem with above IBM JRE heap size due to I used Maximo 7.6.0 installation file (MAM_7.6.0.0_LINUX64). Just change to 7.6.1 as documentation and it works!
Thank you Umar for your very good documentation! Appreciate!
Regards,
Phan Thanh
Hi Umar , I can not launch vm image on my windows 10 host. did you do this on windows 10 Home edition ?
Hi PB,
Are you using VirtualBox for running VM? VirtualBox is fully supported on Windows Home.
Yes I am using VirtualBox 6.0. But its giving error as
Failed to open a session for the virtual machine Ubuntu.
(VERR_NEM_MISSING_KERNEL_API).
VT-x is not available (VERR_VMX_NO_VMX).
Result Code: E_FAIL (0x80004005)
Component: ConsoleWrap
Interface: IConsole {872da645-4a9b-1727-bee2-5585105b9eed}
I ahve tried many things to turn of Hyper-v , enable bios virtulization etc no luck.
This can happen if you turn on Hyper-V, WSL or Sandbox feature on Windows. VirtualBox doesn’t work if any of these are turned on.
I also have struggled in past with turning them off completely. When turned off, there are some residual settings which interface with VirtualBox.
This is what I have in my notes from that time, hope it can help.
– Turn off windows features: WSL and Virtual Machine Platform
– run: bcdedit /set hypervisorlaunchtype off
with multiple times installing ubuntu freshly managed to get this VM installation completed.
How admin console works in WAS Liberty profiles , there is not dmgr ..right?
Hi PB, you can find detail about administering WAS Liberty here: https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/twlp_admin.html
May i know how to download maximo ? I can’t find any links to download maximo 7.6.
Hi Ubi,
You need to have a license for Maximo to download it.
If you just want to try it out, you can access the demo version at https://www.ibm.com/support/pages/maximo-asset-management-761-preview-site
hi Umar, thank you for this helpful article, I did it till the end but when I go to localhos:9080/maximo/ui I have this message context Root not found, I appreciate your help
Hi Guys,
Anyone get use Mxloader in this installation, I tried use but received this error:
Caused by: psdi.util.MXSystemException: BMXAA1581E – No object with the name {0} is set up in JNDI tree. Check the JMS/JNDI setup in the server administration console.
CWNEN1001E: The object referenced by the java:comp/env/ejb/maximo/local/mosservice JNDI name could not be instantiated. If the reference name maps to a JNDI name in the deployment descriptor bindings for the application performing the JNDI lookup, make sure that the JNDI name mapping in the deployment descriptor binding is correct. If the JNDI name mapping is correct, make sure the target resource can be resolved with the specified name relative to the default initial context.
at psdi.iface.util.WebUtil.loadEJBHandle(WebUtil.java:164)
at psdi.iface.util.WebUtil.loadEJBHandle(WebUtil.java:116)
at psdi.iface.servlet.MOSServiceServlet.loadEJBHandle(MOSServiceServlet.java:241)
at psdi.iface.servlet.MOSServiceServlet.init(MOSServiceServlet.java:68)
Do you fix this? I’m getting the same issue
Hi Guys,
Any use MIF in this installation, because I tried and received this error:
Exception thrown by application class ‘psdi.iface.servlet.MOSServiceServlet.init:76’
javax.servlet.ServletException: psdi.util.MXSystemException: BMXAA1581E – No object with the name {0} is set up in JNDI tree. Check the JMS/JNDI setup in the server administration console. CWNEN1001E: The object referenced by the java:comp/env/ejb/maximo/local/mosservice JNDI name could not be instantiated. If the reference name maps to a JNDI name in the deployment descriptor bindings for the application performing the JNDI lookup, make sure that the JNDI name mapping in the deployment descriptor binding is correct. If the JNDI name mapping is correct, make sure the target resource can be resolved with the specified name relative to the default initial context.
at psdi.iface.servlet.MOSServiceServlet.init(MOSServiceServlet.java:76)
at javax.servlet.GenericServlet.init(GenericServlet.java:244)
at [internal classes]
at com.ibm.tivoli.maximo.filter.MTIntegrationFilter.doFilter(MTIntegrationFilter.java:66)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)
at [internal classes]
Caused by: psdi.util.MXSystemException: BMXAA1581E – No object with the name {0} is set up in JNDI tree. Check the JMS/JNDI setup in the server administration console. CWNEN1001E: The object referenced by the java:comp/env/ejb/maximo/local/mosservice JNDI name could not be instantiated. If the reference name maps to a JNDI name in the deployment descriptor bindings for the application performing the JNDI lookup, make sure that the JNDI name mapping in the deployment descriptor binding is correct. If the JNDI name mapping is correct, make sure the target resource can be resolved with the specified name relative to the default initial context.
at psdi.iface.util.WebUtil.loadEJBHandle(WebUtil.java:164)
at psdi.iface.util.WebUtil.loadEJBHandle(WebUtil.java:116)
at psdi.iface.servlet.MOSServiceServlet.loadEJBHandle(MOSServiceServlet.java:241)
at psdi.iface.servlet.MOSServiceServlet.init(MOSServiceServlet.java:68)
… 5 more
Caused by: javax.naming.NamingException: CWNEN1001E: The object referenced by the java:comp/env/ejb/maximo/local/mosservice JNDI name could not be instantiated. If the reference name maps to a JNDI name in the deployment descriptor bindings for the application performing the JNDI lookup, make sure that the JNDI name mapping in the deployment descriptor binding is correct. If the JNDI name mapping is correct, make sure the target resource can be resolved with the specified name relative to the default initial context.
at com.ibm.ws.injectionengine.osgi.internal.naming.InjectionJavaColonHelper.newCannotInstantiateObjectException(InjectionJavaColonHelper.java:183)
at [internal classes]
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at psdi.iface.util.WebUtil.loadEJBHandle(WebUtil.java:154)
… 8 more
Caused by: com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E: The server was unable to obtain an object instance for the java:comp/env/ejb/maximo/local/mosservice reference. The exception message was: The EJB reference in the meaweb.war module of the maximomea application could not be resolved; nested exception is: com.ibm.ejs.container.EJBNotFoundException: CNTR4011E: The psdi.iface.mos.MOSServiceHomeLocal home interface for the mosservice enterprise bean in the mboejb.jar module in the maximomea application could not be obtained for injection because home interfaces are not supported by any of the features configured in the server.xml file.
at com.ibm.wsspi.injectionengine.InjectionBinding.getInjectionObject(InjectionBinding.java:1454)
… 11 more
Caused by: javax.ejb.EJBException: The EJB reference in the meaweb.war module of the maximomea application could not be resolved; nested exception is: com.ibm.ejs.container.EJBNotFoundException: CNTR4011E: The psdi.iface.mos.MOSServiceHomeLocal home interface for the mosservice enterprise bean in the mboejb.jar module in the maximomea application could not be obtained for injection because home interfaces are not supported by any of the features configured in the server.xml file.
at com.ibm.ws.ejbcontainer.injection.factory.EJBLinkObjectFactory.getObjectInstance(EJBLinkObjectFactory.java:126)
… 11 more
Caused by: com.ibm.ejs.container.EJBNotFoundException: CNTR4011E: The psdi.iface.mos.MOSServiceHomeLocal home interface for the mosservice enterprise bean in the mboejb.jar module in the maximomea application could not be obtained for injection because home interfaces are not supported by any of the features configured in the server.xml file.
at com.ibm.ws.ejbcontainer.osgi.internal.injection.EJBLinkObjectFactoryImpl.checkHomeSupported(EJBLinkObjectFactoryImpl.java:66)
… 11 more
Anyone have suggestion?