*
Metamerge logo
Search

Advanced Search
*
*
*
* HOME DOCUMENTS & RESOURCES DOWNLOADS EARLY TECH ACCESS SUPPORT FAQ KNOWN ISSUES OLD VERSIONS
*

 

FAQ Metamerge Integrator 4.6

Questions:

Installation and licensing:

Writing AssemblyLines:

Security

Error messages

Limitations:

Third party software

Answers

Installation and licensing:

Q: My license is about to expire.  What do I do?

Contact your sales representative.  He will send you a new license file (aslicense.jar).  You will need to replace your old license file with this one on all computers where you are running Metamerge Integrator.

The location of the old file is dependent on what version of Metamerge Integrator you are running:

  • Version from 4.6beta (June 2001):  jars/ subdirectory of the directory where you installed Metamerge Integrator
  • Version 4.5.3 and before (June 2001): lib/ext subdirectory of the Java runtime library  you are using with Metamerge Integrator.   Version before 4.5.3 include all versions of ArchiTech server (as the product was called prior to 2001).

Q: I have a Unix system without X-Windows.  How do I install Metamerge Integrator?

We will here assume that setting the DISPLAY variable does not help you:  The target system could for example be on a protected net that cannot see your X Server.

You will of course not be able to run the Admin Tool, as it has a GUI, but you can still run the MI server. What you have to do is:

  1. Install on a Unix machine where you have access to an X server.  Install to a directory called metamerge
  2. Create an archive (i.e  tar or zip) with all the files installed in metamerge 
  3. Copy the archive to the target machine an extract the metamerge directory
  4.  Edit the miserve.lax file.  The sections LAX.DIR, LAX.NL.CURRENT.VM and LAX.ROOT.INSTALL.DIR must refer to the path where you have placed the metamerge directory.

Q: I have installed a new version, service pack or Connector version, but I just see the old functionality

Make sure that all your old jar-files in the jars directory and subdirectories are renamed to an extension different than .jar .  For example, if you have a new jdbc.jar, make sure it either replaces the old one, or that you rename the old to jdbc.jar.old.  This is because the jar-file loader will pick up any jar-files it finds.  So renaming a file is not enough:  For the loader to miss it it cannot have the extension .jar.

If you do a full install, make sure you install on a fresh directory and copy your licence file (aslicense.jar) from/to the jars/ directory.

Q: Can I install different versions of Integrator on the same computer?

Yes.  Just make sure you don't install them on the same or overlapping directories. Also remember that, under Windows,  your shortcuts/program menu will only point to one specific instance of miadmin.exe or miserver.exe

You can also have them use different version of Java:  Each installation has .lax files that are edited during installation (see description in Distribution Components for more on the .lax files)

 

Writing AssemblyLines:

Q: I need the file my AssemblyLine creates before the AssemblyLine has finished, but it is empty or incomplete

Q: I need to change the output filename while the AssemblyLine is processing

Files are closed only when the AssemblyLine terminates.  However, you can force a Connector to close and reinitialise.  The snippet of code below will create a new file each time it is executed:  The filenames will be file1.xml, file2.xml etc.  (assuming the variable iteration was initialised to 0).

iteration++;
// close the file associated with the Connector named xml
xml.connector.terminate();  
// Associate a new filename to the Connector parameter filePath
xml.connector.setParam("filePath","c:/tmp/file" + iteration + ".xml"); 
// reinitialise the Connector
xml.connector.initialize(null);

This code can be put wherever you want, even within the Connector itself!  connector.terminate() is not as dangerous as it sounds.

If you have opened the AddOnly Connector in append mode, the setParam() is not necessary, but for output mode the sequence terminate()  and initialize() would make you loose previous work.

Q: I need to pass the input/output file names (or other Connector parameters) to an AssemblyLine I start from an EventHandler

On the EventHandler side, you want to pass a filename over to the AssemblyLine, and the easiest way is to use an entry object. Here the filename is called myFileName, and we use a Property instead of an Attribute

var entry = system.newEntry();
entry.setProperty("inputFileName","myFileName");
// start AssemblyLine
var al = main.startAL ("myAssemblyLine", entry); 
al.join ();  // wait for al to finish

On the AssemblyLine side you will have code in your Prolog, in the Before Connectors Initialized part (because you want you parameters to be used when the Connectors are initialised).

workEntry = task.getWork(); // gets the initial entry
var FileName = workEntry.getProperty("inputFileName");
// Set the relevant parameter of the raw connector 
myFileConnector.connector.setParam("filePath",FileName);
// If you don't want the AL to run with the intitial  entry, clear it
task.setWork(null);

There are a couple of finer points here:

  1. Clearing the work entry makes sure that we pass control to the first Iterator .  Of course, if you have an entry that is to be processed, do not clear it! (See Multiple Iterators in an AssemblyLine for further discussion)
  2. Using the Properties instead of the Attributes makes sure that the AssemblyLine does not map the Attribute later (in case of it automatically mapping of all Attributes) 

Q: When creating XML files from an LDAP directory or LDIF file, the AssemblyLine  fails

When reading from an LDAP directory or an LDIF file, the distinguished name will typically be in an attribute named $dn. If you map this attribute without changing the name into an XML file, it will fail because $dn is not a legal tag in an XML document. If you do explicit mapping, you should change "$dn" to "dn" (or something without a special character) in your output connector. If you do implicit mapping (e.g. * or "Automatically map all attributes" checked in AssemblyLine/Settings) you could configure the XML parser to translate the distinguished name (i.e. $dn) to a different name. For example, you could add something like this in the Before Add Hook:

conn.setAttribute("dn", work.getAttribute("$dn"));
conn.removeAttribute("$dn");

Q: When I compare JavaScripts strings, I get inequality despite the fact that the strings are equal

JavaScript has two kind of strings:  String literals like "test", and the string Object you will get as a result of new String();  Usually string literals are used, but when you use methods like work.getString("a") it will return a string Object.  This topic is treated in depth here.

Q: Can I use Bean Shell with with Metamerge Integrator

We have tested it briefly, but not certified it.  If you want to try it out, follow the instruction given here.

Q:  How do I start the Metamerge Integrator from a trigger in my database?

There are many ways to do that. 

  • A simple way is to have the trigger update a dedicated table with the data you want sent to the AssemblyLine.  You would then start an AssemblyLine every 5 minutes (for example by using the Timer EventHandler), iterating through the table and removing entries as they are processed.
  • If the AssemblyLine runs on a different machine, you could make the trigger generate small files containing the relevant data and reachable by FTP.  The FTP Poller could then look for files and process them, making sure they are removed after being processed.
Discussion: 

Writing to a TCP port and using the TCP Port EventHandler seems nice, but should be avoided if you are concerned with data being lost:  You (or the trigger) will have no simple way of knowing what data have and have not been processed.  The same can be said for a solution involving the HTTPClient.

However, if you have access to JMS Message Bus technology, the trigger can simply drop the data to be processed on the bus.

Q: I have an AssemblyLine with an iterator in it, but some of the entries are skipped. Why is that?

If you have a Lookup Connectors after your Iterator, the Connector might fail due to no or multiple entries found (see Hooks, Failure Hooks). The failing Lookup Connector will cause the AssemblyLine to skip the entry and tell the Iterator to move on with the next entry.  

However, if the On Error hook of the Lookup Connector is enabled (see Enabling Hooks) , the AssemblyLine will think the error is taken care of and proceed.  Of course, you should put code there to check whether the error was serious or just acceptable (for example no entries returned).  Checking the content of your attributes is one way, using the rscTaskComponent method  getDuplicateEntryCount () is another. See Hooks, Lookup OK for more on this 

Q: I have a new version of a script connector (or parser) in the base template library, but my AssemblyLine seems to use an old one?

When you use a Script Connector (or Parser), the script gets copied from the Library where it resides and into your configuration file. This has the advantage of you being able to customise the script, but the caveat that new versions will not be known to your AssemblyLine.  

Removing the old script Connector from the AssemblyLine and re-introducing it will get you around this (but remember to copy over code from your hooks!)

Q: I have written my own Connector, and it used to work.  When I recompile it now, why has it stopped working?

First of all, from version 4.6, a new public String getVersion() method is mandatory (so you can keep track of the version of your Connector).

Another source of problems, could show up if you use the same libraries as Integrator.  A new version of Integrator might have updated it's libraries, or you might have upgraded your libraries since last time you compiled your Connector.

Q: I want to copy a whole LDAP directory to another.  How do it do that?

This is treated in the LDAP documentation, and an example is provided as well.

Security

Q: I need support for 128 bits RC4 bulk encryption over SSL.  Why is it not supported?

Integrator supports SSL through JSSE. The version delivered with Integrator 4.6 only supports 40 bits RC4 encryption. A newer version (1.0.2) supporting 128 bits RC4 is available and can be downloaded from http://java.sun.com/products/jsse/index-102.html .  Refer to the download link to see what other cryptographic suites are supported by 1.0.2 (RSA, DES, Triple DES, Diffie-Hellman, DSA) 

 

Q: I need Third Party SSL Socket Factories. Are those supported?

This is a matter of what version of JSSE you have.  Due to export restrictions, only the Global version of JSSE is delivered with Integrator. If you reside in the USA or Canada, refer to Sun's  JSSE home page to download a more powerful version. 

Q: How do I use certificates from Trusted Third Parts?

Refer to the Certificate Manager for more on this.

 

Error messages

ERROR> AssemblyLine x failed because No criteria can be built from input (no link criteria specified)

This happens when you have, for example, a link criteria like

 uid equals $w_uid

but the w_uid working attribute is not present in the work entry.  This could be because it has not been read from the input sources, or was not present in the input sources. In other words, work.getAttribute("w_uid") would return null.

One way to avoid this is to write, in the before_execute hook of the Lookup or Update Connector that fails, some code to skip the Connector when the link criteria cannot be resolved.  For example:

if (work.getAttribute("w_uid") == null)
    
system.ignoreEntry();

Your business logic may require other processing, like a skipEntry() call instead of an ignoreEntry(). (skipEntry()  will switch to the next entry returned by the current iterator). 

 

Limitations:

Q: I run out of memory, but have more available.  Can something be done?

Increasing the memory available to the Virtutal Machine

Some components, such as the XML parser, will use a lot of memory, and the Java VM default only has 64 MB available.

In order to increase the memory available to miserver (or miadmin), you can add this line to miserver.lax (or miadmin.lax):

lax.nl.java.option.java.heap.size.max=268435456

This will allow 256Mbyte memory to be used.  

Notes

  • Your OS might limit how much memory it lets you get.  Under Unix, try ulimit -a  to see how much you can have.  Under NT, remember that the OS keeps some memory to itself (128MB+) so even if your server contains 256MB you might only get access to 100MB or less.
  • If your memory problems occurred while using and LDAP iterator, check out the LDAP documentation for more tips
  • A memory leak is known, the the Known Issues for more on this.
Limiting the number of threads

When using certain EventHandlers (like TCP or HTTP), or when your AssemblyLines start firing up other AssemblyLines which again can start other, you might use a lot of memory.  See the section about How to Control the Number of Threads for a discussion on this.

Q: Does Integrator support double bytes character sets?

Integrator is written in Java which in turn supports Unicode (double bytes) characters sets.  However, external components like drivers might not support the set.  

Scripting languages supported by WSH (Windows Scripting Host) will probably cause problems when using Unicode character sets.

Third party software:

Q:What version of JavaScript is included and can I replace it with a newer one?

We are currently using Rhino version 1.4R3 from Mozilla.  A newer version (1.5 R2) is available and can be downloaded, see instructions below. We know of few problems (see below) with this version, but you replace the Rhino/BSF engines at your own risk.

For description of changes between Rhino 1.4R3 and 1.5R2, see http://www.mozilla.org/rhino/download.html

Here are the instructions you need to upgrade:

1. Download 
  • bsf2-2.zip and extract it into your Metamerge directory
2. Remove 

    "jstools.jar" and "bsfengines.jar" from the "jars" directory.

You should then be up and running with the BSF2.2 (see http://oss.software.ibm.com/developerworks/projects/bsf  ) and Rhino 1.5R2 ( http://www.mozilla.org/rhino/ ) versions.

Improvements that you will note:
  1. Line numbers are supplied when script errors are found
  2. try/catch construction available within JavaScript
  3. Inherited static methods would not work.  For example, task.sleep() is now available.  With earlier versions of BSF, you had to write java.lang.Thread.sleep()  to get access to task.sleep() 
Know problems:

Sometime, at places where objects (in particular work) are null, Integrator might behave differently (it might in fact abort because work is undefined). You will experience this if you have code using work  before Connector initialisation and in similar cases of 'early' work use where work is not defined.

Q: Can I use Java 1.4 with Integrator 4.6?

We do not yet support Java1.4, but you can do the following:

  1. Install Java1.4 on your computer
  2. Edit miadmin.lax and miserver.lax so it has the line
    lax.nl.current.vm=C:\\Program Files\\Java\\j2re1.4.0\\bin\\java.exe
    or wherever you have placed your Java 1.4
  3. Run Integrator as you are used to

 Usually the  above description works, but there have been issues under Windows where you will get the message "Could not load jvm.dll" when trying to start miserver or miadmin.  If this happens to you, try installing 4.6 (not 4.6.4), and then patch 4.6 with the (cumulative) 4.6.7 patch. 

Contact support.europe@metamerge.com if you still cannot use Java 1.4 and still are really keen on using Java 1.4.

Java 1.4 is not supported as Integrator JVM, so you might be on your own if you run into problems.  Here are the known problems:

  • In the Admin Tool, the GUI can look strange around the attribute mapping.  You might need to use and Admin Tool with Java 1.3 to get around this.

Of course, we are interested in reports pinpointing problems with Java 1.4.

 

 

*
  Metamerge Integrator version 4.6 ©Copyright Metamerge AS 2000-2002 Last edited 2002-04-30 contact us