Version 3 of Tcl/Java Examples

Updated 2005-10-31 19:57:37

This page contains examples of using the java package to interact with a Java virtual machine from Tcl. The Java package is available in both Jacl and TclBlend. Using the java package, a Tcl script can create Java objects, invoke Java methods, and inspect results.

Allocating a Java object from Tcl

 In this example, a Java object of type java.lang.String is allocated using the java::new command and the Java object handle java0x1 is saved in a variable. The String object's charAt method is then invoked on the object using the saved handle. Note that the char primitive type returned by the charAt method is implicitly converted to a Tcl string value. The unset command is called on the variable that holds the handle to indicate that we are finished with the object so that it can be garage collected.

  % package require java
  1.3.2
  % set jstr [java::new String "A Java String"]
  java0x1
  % $jstr charAt 2
  J
  % $jstr toString
  A Java String
  % unset jstr

 # Connect to MQ listener and put message on the queue.

 ###########################################################

Use of JDBC API with Jacl or Tcl Blend.

A comp.lang.tcl poster reports satisfying light-duty use of JDBC with TclBlend.


Use of TclBlend to put a JMS message on a remote IBM MQ Windows queue using MQ JMS classes.

 ###########################################################

 # Connect to MQ listener and put message on the queue.

 ###########################################################

 puts "\n executing [info script]\n"

 # make script drive independent.

 set drive [lindex [file split [info nameofexecutable]] 0 ] 

 puts "\n proclib = $drive/scripts/TCL/proclib"


 ########################################################  

 # Source packages. 

 ########################################################  

 package require java

 ######################################

 # Proc - put message. 

 ######################################

 proc putMSG { QManager CCSID channel hostname queueName port traceFile msg } {

    puts "\n putMSG \n"

    # import required classes 
    java::import com.ibm.mq.jms.MQQueueConnectionFactory
    java::import com.ibm.mq.jms.services.ConfigEnvironment
    java::import com.ibm.mq.jms.JMSC
    java::import com.ibm.mq.jms.MQQueueSession
    java::import com.ibm.mq.jms.MQQueueSender

    # instanciate MQQueueConnectionFactoryI object.

    set MQQueueConnectionFactoryI [ java::new MQQueueConnectionFactory ]

    # set MQQueueConnectionFactory instance methods.

    $MQQueueConnectionFactoryI setQueueManager         $QManager
    $MQQueueConnectionFactoryI setPort                 $port
    $MQQueueConnectionFactoryI setHostName             $hostname
    $MQQueueConnectionFactoryI setChannel              $channel
    $MQQueueConnectionFactoryI setCCSID                $CCSID
    $MQQueueConnectionFactoryI setUseConnectionPooling true
    $MQQueueConnectionFactoryI setTransportType        [ java::field JMSC MQJMS_TP_CLIENT_MQ_TCPIP ]    

    # set tracing on.

    java::call ConfigEnvironment start

    puts "Creating a Connection...................\n"

    set connectionI [ $MQQueueConnectionFactoryI createQueueConnection ]

    puts "Starting the Connection.................\n"

    $connectionI start

    puts "Creating a Session......................\n"

    set transacted      false 
    set autoAcknowledge [ java::field MQQueueSession AUTO_ACKNOWLEDGE ]
    set sessionI        [ $connectionI createQueueSession $transacted $autoAcknowledge ]

    puts "Creating a queue......................\n"

    set queueI         [ $sessionI createQueue $queueName ]

    puts "Creating a queue sender ......................\n"

    set queueSenderI  [ $sessionI createSender $queueI ] 

    puts "Sending the message to..[ $queueI getQueueName ]\n" 

    puts "Creating a TextMessage........................\n"

    set outMsgI [ $sessionI createTextMessage ]

    $outMsgI    setText $msg

    puts "Sending TextMessage \"$msg\" \n"

    $queueSenderI send $outMsgI

    puts "Closing QueueSender........................\n"

    $queueSenderI close 

    puts "Closing Session............................\n"

    $sessionI close 

    puts "Closing Connection.........................\n"

    $connectionI close 

 }

 ######################################

 # Main Control.

 ######################################

 # build tcl classpath

 append x $drive/IBM/WebSphereMQ/Java/lib/com.ibm.mq.jar\;

 append x $drive/IBM/WebSphereMQ/Tools/Java/base\;

 append x $drive/IBM/WebSphereMQ/Java/lib/com.ibm.mqjms.jar\;

 append x $drive/IBM/WebSphereMQ/Tools/Java/jms\;

 append x $drive/IBM/WebSphereMQ/Java/lib/com.ibm.mqbind.jar\;

 set env(TCL_CLASSPATH) $x

 puts "\nTCL_CLASSPATH = [ array get env TCL_CLASSPATH ]\n"

 set traceFile    $drive/IBM/WebSphereMQ/Errors/mqTrace.txt

 set reportFile   $drive/reports/notify/mqConnect.txt

 set reportFileId [ open $reportFile w ] 

 set QManager  QM1

 set CCSID     819

 set channel   AAAAAAA.BBB.CCCCCC

 set hostname  moonbase1

 set queueName ABC.DD.EEEE.1234.FFFFFFFF

 set port      1414

 set msg       "Watson, please come here. I want you."

 putMSG $QManager $CCSID $channel $hostname $queueName $port $traceFile $msg