Monday, September 28, 2015

Windows 10 and SVN icon overlays not showing any more

After my Windows 10 update, I couldn't see my SVN icon overlays in Explorer any more. I learned that Windows allows a maximum of 11 overlays used by installed programs (it takes 4 himself).

The solution
  • go to registry edior and traverse to : HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
  • Order you icon overlay names aphabetically by renaming them. Your high-prio overlays could start with a space. Then use numeric characters. Your lowest prio overlays could start with a "Z".
  • Restart Explorer or reboot your machine.


Thursday, July 23, 2015

Dynamic SQL and TIBCO BusinessWorks

In the field, I've seen a multitude of TIBCO BusinessWorks 5.x solutions where the SQLDirect activity is used for running SQL statements which are created dynamically. I've mainly come across implementations with conditional where-clauses where BW had the responsibility to change the SQL at runtime before passing it to the database layer. In order to make this work, a lot of mapping in combination with string concatenation is necessary. As a result it ended up with overly complex BW-process implementations.

Other cons:

  • Not using bind variables (used in JDBCQuery activity) means HardParsing which hurts database performance;
  • Possible SQL injection vulnerability;
  • No possibilities for batch processing.

A solution to this is using the JDBCQuery activity. But when your solution needs to support a big bunch of conditional where-clauses, this isn't really feasible. My preferred solution is to use embedded SQL in a StoredProcedure which will be called by BW using the CallProcedure activity. This is suitable for relatively small/medium tables. In below Oracle PL/SQL code, the trick is in the WHERE clause part. When no params are provided for the optional fields, this clause will be ignored.


PL/SQL code:


If you spot an opportunity of phasing Direct SQL out, you should do it. Only use this activity for DDL-statements (like CREATE or DROP) or when the other activities in the JDBC-palette don't provide you with the things you need. Happy coding!

References:

Thursday, April 9, 2015

TIBCO BusinessWorks remote deployment using DomainUtility or AppManage

This is a guest post from RubiX colleague Maarten van Alphen, Systems Integration Specialist with extensive kowledge and experience with TIBCO software. Check out his profile for more information.

For our TIBCO BusinessWorks Continuous Deployment setup, it was a requirement to be able to deploy EAR files to a DTAP environment from a local workstation. There are two tools and methods available in order to achieve this: DomainUtility tool or AppManage. The main prerequisite is that firewall configuration should allow traffic over the specific ports.

Method 1: DomainUtility

This is extensively documented by TIBCO in the supplied software documentation. Main drawback is that the workstation is discoverable as a machine in all the TIBCO domain environments.

Method 2: AppManage

Copy the following files, containing domain settings, from the remote machine to your local machine:
  • <tibco_home>/tra/domain/<domain>/AdministrationDomain.properties
  • <tibco_home>/tra/domain/<domain>/AuthorizationDomain.properties
  • <tibco_home>/tra/domain/<domain>/hawkagent.cfg
Copy these files to a folder on your local machine (or deployment server): <tibco_home>/tra/domain/<domain>/

Please note that this path could be something other that TIBCO's structure, but for clarity sake we will be reusing it.

Next step is to add the domain to "DomainHome.properties" file: <tibco_home>/tra/domain/DomainHome.properties

Add the following lines:
<domain>.TIBCO_ADMIN_DOMAIN_HOME=<tibco_home>/administrator/domain
<domain>.TIBCO_TRA_DOMAIN_HOME=<tibco_home>/tra/domain


<tibco_home> is the location of TIBCO software on the local machine (not the remote machine, the server you are deploying to).

You can now use AppManage on the local machine and use the added domain as target destination. Make sure you have the right credentials. Another catch is to make sure that the machine name isn't always mentioned in the files which confuses Hawk and makes deployment to a remote machine impossible. So make sure that regarding TCP connections, the machine name is explicitly mentioned, for example: tcp:<machine>:port instead of tcp:port.


Saturday, April 4, 2015

Saturday, March 21, 2015

How to fix "Bundled JRE is not binary compatible with host OS/Arch or it is corrupt. Testing bundled JRE failed." error while installing TIBCO EMS 8.1 on Ubuntu 14.04 LTS 64-bits

During the installation of EMS 8.1 in console mode on Ubuntu 14.04, I encountered an error that you typically get when you're trying to run 32-bit executable files in a 64-bit multi-arch Ubuntu version.

The solution is to simply add i386 architecture by runinng the following commands:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

After running these commands successfully, restart your installation by running the TIBCO Universal Installer again. 


Tuesday, March 17, 2015

How to solve the TIBCO Silver Fabric issue: engine stuck on status 'allocating'

After installing the 64-bit distributions of TIBCO Silver Fabric on my Windows 7 machine, I encountered an error when I started up a Stack containing components Administrator and BusinessWorks (from the TIBCO Silver Fabric Enabler for ActiveMatrix BusinessWorks 2.6.0). The engine where Silver Fabric is trying to run Administrator is stuck on status "allocating".

This is an excerpt from the engine logging:
10/13/14 07:39:24.994 INFO: [ProcessWrapper] [STDERR] TibrvException[error=901,message=Library not found: tibrvj]
10/13/14 07:39:24.994 INFO: [ProcessWrapper] [STDERR] at com.tibco.tibrv.Tibrv.loadLib(Tibrv.java:476)
10/13/14 07:39:24.994 INFO: [ProcessWrapper] [STDERR] at com.tibco.tibrv.Tibrv.open(Tibrv.java:275) 10/13/14 07:39:25.009 INFO: [ProcessWrapper] [STDERR] TibrvException[error=27,message=Native implementation required]
10/13/14 07:39:25.025 INFO: [ProcessWrapper] [STDERR] at COM.TIBCO.hawk.console.nest.shared.TibrvProxy.open(TibrvProxy.java:33)
10/13/14 07:39:25.025 INFO: [ProcessWrapper] [STDERR] at com.tibco.tibrv.TibrvRvdTransport.init(TibrvRvdTransport.java:67)
10/13/14 07:39:25.041 INFO: [ProcessWrapper] [STDERR] at COM.TIBCO.hawk.console.nest.shared.TibrvProxy.open(TibrvProxy.java:24)
10/13/14 07:39:25.041 INFO: [ProcessWrapper] [STDERR] at com.tibco.tibrv.TibrvRvdTransport.(TibrvRvdTransport.java:50)
10/13/14 07:39:25.041 INFO: [ProcessWrapper] [STDERR] at COM.TIBCO.hawk.agent.AgentTibrvTransports.initTransports(AgentTibrvTransports.java:75)

At first, I thought that the RV_HOME system variable wasn't setup properly because of the "Native implementation required" message in the logs. To investigate this, I found an article that explained how to test if the tibrvj library could load propery. After executing the JAR file, the following exception returned:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\TIBCO\tibrv\8.2\bin\tibrvj.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform

Usually this means that correct C++ runtime components are missing. After installing the correct Microsoft Visual C++ Redistributable Package version, the problem was solved!