Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JACL HOWTO - loading tcl procedures dynamically from jar files under java.

91 views
Skip to first unread message

Patrick Finnegan

unread,
Jul 17, 2007, 11:19:16 AM7/17/07
to
"Package require" is not supported under Jacl but it is still possible
to dynamically load procedures from jar files.

1. Create the tclIndex file using auto_mkindex.

auto_mkindex C:/yourdirectory/proclib

2. jar up the directory.

jar -cvf proclib.jar C:/yourdirectory/proclib

3. Set the classpath and call jacl.

Eg send an email with javamail.tcl using java mail class libraries

Top level bat file.
********************
setlocal

set tclScript= C:\yourdirectory\sendJavaMail.tcl
set javaCmd="C:\yourdirectory\Java\j2re1.4.2_05\bin\java"

:: ### jacl jars ###.
set CLASSPATH=%CLASSPATH%;C:/downloads/TCL/jacl/tcljava.jar
set CLASSPATH=%CLASSPATH%;C:/downloads/TCL/jacl/jacl.jar
:: ### proclib jar holds scripts ###.
set CLASSPATH=%CLASSPATH%;C:/home/patrick/eclipse/WASAdminSBV/WSAdmin/
WAS5.1/JACL/proclib.jar
:: ### java mail jars ###.
set CLASSPATH=%CLASSPATH%;C:/downloads/java/javamail-1_4/javamail-1.4/
lib/smtp.jar
set CLASSPATH=%CLASSPATH%;C:/downloads/java/javamail-1_4/javamail-1.4/
lib/mailapi.jar
set CLASSPATH=%CLASSPATH%;C:/downloads/java/activation.jar

%javaCmd% -classpath %CLASSPATH% tcl.lang.Shell %tclScript%

endlocal


Called tcl script.
*******************
#=============================================================
#
# send mail using java mail library.

package require java

# use the resource feature to load the jar file directory system

lappend auto_path resource:/proclib

puts "auto_path is [ set auto_path ]"

# putsLog proc
putsLog "test message"

# javaMail namespace.
javaMail::javaMail your...@yoursite.com "test email" " body text"

==============================================================

Both the putslog proc and javaMail::javaMail namespace in proclib.jar
are dynamically loaded.

For those of you who are interested the javamail proc looks like
this: Tcl's mail package is not supported under jacl.

namespace eval javaMail {

proc javaMail { emailAddress subject body } {

java::import java.util.Properties
java::import javax.mail.Message
java::import javax.mail.Session
java::import javax.mail.Transport
java::import javax.mail.internet.InternetAddress
java::import javax.mail.internet.MimeMessage

set PropertiesI [ java::new Properties ]
set emailServer youremailserver.com

$PropertiesI put "mail.smtp.host" $emailServer

set SessionI [ java::call Session getDefaultInstance $PropertiesI
[ java::null ] ]
#$SessionI setDebug true

set MessageI [ java::new MimeMessage $SessionI ]

set InternetAddressFromI [ java::new InternetAddress [ info
host ] ]
set InternetAddressToI [ java::new InternetAddress
$emailAddress ]

$MessageI setRecipient [ java::field Message.RecipientType TO ]
$InternetAddressToI
$MessageI setSubject $subject

if { [ file isfile $body ] ==1 } {

set body [ read [ open $body r ] ]

} else {

set tx "body is text"

}

$MessageI setContent $body "text/plain"

java::call Transport send $MessageI

}

}

0 new messages