Create TDI RMI based service with a script

What is this

This is a set of windows batch scripts that can create and modify manual adapter profiles based on a provided template. Once you've created the profile you can import it by running

"F:\Program Files\ibm\itim\bin\win\config_remote_services.cmd" -profile %1 -jar %1.jar

This code is also a useful example of how cumbersome a Windows batch processing is.

Setting up

  • Get the Template and unzip it.
  • Get the batch files one by one from below or in one zip file unzip on the same level as the template.

You'll need a windows version of SED in your path to get it all running.

How to update all app profiles

Create the file you want to replace. You can do this by copying a file from _Skeleton and modifying it with the needed mods.

_Skeleton_mods\ITIM$1UserProfile

Attn: Due to the way batch files are structured interrupting them with Ctrl-C or Ctrl-Break is not advisable and often not possible. Make sure you have correct parameters before running the scripts.

As a last step after modifying remember to move files from _mod to _Skeleton so that the changes are not reapplied (in fact the change application will fail since there will be differences between _Skeleton and all profiles) run modifySkeleton.bat

Files

Make a profile based on a given name an a profile class. Use 'User' for the profile class.

@echo off
rem Generic builder for an application profile to be imported into ITIM
rem v1 2008(c) Alex Ivkin
if "%1" == "" goto usage
if not exist "..\Deployment" goto missing
if not exist "..\ITIM%1%2Profile\%1%2*.xml" goto missing
if not exist "..\ITIM%1%2Profile\ITIM%1%2*.xml" goto missing
if not exist "..\ITIM%1%2Profile\CustomLabels.properties" goto missing
if not exist "..\ITIM%1%2Profile\schema.dsml" goto missing
if not exist "..\ITIM%1%2Profile\service.def" goto missing
echo Building ITIM%1%2Profile
if not exist "ITIM%1%2Profile\" mkdir ITIM%1%2Profile
rem cd Deployment
del /q "ITIM%1%2Profile\*.*"
del /q "ITIM%1%2Profile.jar"
copy "..\ITIM%1%2Profile\%1%2*.xml" .\ITIM%1%2Profile > nul
copy "..\ITIM%1%2Profile\ITIM%1%2*.xml" .\ITIM%1%2Profile  > nul
copy "..\ITIM%1%2Profile\CustomLabels.properties" .\ITIM%1%2Profile  > nul
copy "..\ITIM%1%2Profile\schema.dsml" .\ITIM%1%2Profile > nul
copy "..\ITIM%1%2Profile\service.def" .\ITIM%1%2Profile > nul

"f:\Program Files\IBM\TDI\V6.1.1\AppServer\java\bin\jar" -cf ITIM%1%2Profile.jar ITIM%1%2Profile
pause

goto :eof
:missing
echo missing some of the files required for an ITIM Profile
goto :eof
:usage
echo call from the app deployment folder as following:
echo %0 {AppName} {Class}

Create a new application profile, build and test harnesses based on a skeleton. [Download createApplication.bat].

@echo off
rem Create a new application profile, build and test harnesses based on a skeleton.
rem Replaces "$1" and "$2" in file names and file contents of the skeleton with the app name and profile type, respectively.
rem v1 2008(c) Alex Ivkin
rem GNU sed must be in the same folder as the batch file. The batch must be executed from the folder that it is in.
if .%1.==.. goto usage
if .%2.==.-f. goto run
if .%3.==.-f. goto run
if .%2.==.-np. set passwordless=true
if .%3.==.-np. set passwordless=true
if exist ..\%1 goto exists
:run
rem ---- Create deployment structure ----
mkdir ..\%1
mkdir ..\%1\Logs
mkdir ..\%1\Deployment

rem ---- Create development structure ----
rem Rob Boime 5/13/09  Do not create a custom Staff profile.
rem call createApplicationSubProfile.bat %1 Staff

call createApplicationSubProfile.bat %1 User %passwordless%

goto :eof
:exists
echo ..\%1 exists. Will not overwrite existing profile, unless run with -f
goto :eof
:usage
echo Run as %0 [AppName] [-np] [-f]
echo -f will force an existing profile overwrite. No files are deleted from the old profile
echo -np indicates a passwordless service

Creates an actual profile by mass search and replace of $1 in file names and contents. [Download createApplicationSubProfile.bat].

@echo off
rem Creates actual profile by mass search and replace of $1 in file names and contents
rem Replaces "$1" in file names and file contents of the skeleton with the app name.
rem v1 2008(c) Alex Ivkin
rem GNU sed must be in the same folder as the batch file. The batch must be executed from the folder that it is in.
if .%1.==.. goto usage
if .%2.==.. goto usage
<nul (set/p z=Creating %1 %2 profile.)
rem ---- Create deployment structure ----
mkdir ..\%1\Deployment\ITIM%1%2Profile
sed -rT s/\$1/%1/g "..\_Skeleton\Deployment\build$1%2Profile.bat" > ..\%1\Deployment\build%1%2Profile.bat
<nul (set/p z=.)
rem ---- Create development structure ----
mkdir ..\%1\ITIM%1%2Profile
pushd ..\_Skeleton\ITIM$1%2Profile
for %%a in (*) do (
    rem Do search and replace in both file name and file contents
    rem Do not even dare to understand how it works. Its magic. Microsoft sort of way.
    <nul (set/p z=..\..\_AppToolkit\sed -rT s/\$1/%1/g "%%a" ^> ) > tmp$.bat
    echo ..\..\%1\ITIM%1%2Profile\%%a | ..\..\_AppToolkit\sed -r s/\$1/%1/g >> tmp$.bat
    call tmp$.bat
    <nul (set/p z=.)
)
del tmp$.bat
if not .%2. == .User. goto ignorepassword
if not .%3. == .true. goto ignorepassword
rem Remove erPassword attribute from the user account class
..\..\_AppToolkit\sed -T "/ITIM%1UserAccount/,/\/class/ {/erPassword/d}" ../../%1/ITIM%1%2Profile/schema.dsml > ../../%1/ITIM%1%2Profile/schema.dsml.fixed
move ../../%1/ITIM%1%2Profile/schema.dsml.fixed ../../%1/ITIM%1%2Profile/schema.dsml 
rem add password commands to the end on service.def
..\..\_AppToolkit\sed -T "/<\/properties>/i\        <property name=\"com.ibm.itim.remoteservices.ResourceProperties.PASSWORD_NOT_REQUIRED_ON_RESTORE\"><value>true</value></property>\n     <property name=\"com.ibm.itim.remoteservices.ResourceProperties.PASSWORD_NOT_ALLOWED_ON_RESTORE\"><value>true</value></property>" ../../%1/ITIM%1%2Profile/service.def > ../../%1/ITIM%1%2Profile/service.def.fixed
move ../../%1/ITIM%1%2Profile/service.def.fixed ../../%1/ITIM%1%2Profile/service.def
:ignorepassword
popd
echo ok
goto :eof
:usage
echo Do not call this file directly unless you know what you are doing.

Shows a list of differences in the profile compared to the skeleton. [Download diffApplication.bat].

@echo off
rem Shows a list of differences in the profile compared to the skeleton
rem Replaces "$1" in file names and file contents of the skeleton with the app name.
rem v1 2008(c) Alex Ivkin
rem GNU sed must be in the same folder as the batch file. The batch must be executed from the folder that it is in.
if .%1.==.. goto usage
set leavefile=false
set passwordless=false
if .%2.==.-x. set leavefile=true
if .%3.==.-x. set leavefile=true
if .%2.==.-np. set passwordless=true
if .%3.==.-np. set passwordless=true
if not exist ..\%1 goto notexists
:run
call diffApplicationSubProfile.bat %1 User %leavefile% %passwordless%
goto :eof
:notexists
echo ..\%1 does not exists. 
goto :eof
:usage
echo Run as %0 [AppName] [-np][-x]
echo -x instructs the diff routine to leave the copy of the file from the skeleton in an app folder if it is different
echo -np indicates a passwordless service

Check the differences in the profile compared to the skeleton. Leaves the file generated from skeleton in the app folder. [Download diffApplicationSubProfile.bat].

Augments an existing application with changes from skeleton. [Download modifyApplication.bat].

@echo off
rem Augments an existing application with changes from skeleton
rem Replaces "$1" in file names and file contents of the skeleton with the app name.
rem v1 2008(c) Alex Ivkin
rem GNU sed must be in the same folder as the batch file. The batch must be executed from the folder that it is in.
if .%1.==.. goto usage
set leavefile=false
set passwordless=false
if .%2.==.-x. set leavefile=true
if .%3.==.-x. set leavefile=true
if .%2.==.-np. set passwordless=true
if .%3.==.-np. set passwordless=true
if not exist ..\%1 goto notexists
:run
rem ---- Create development structure ----
call modifyApplicationSubProfile.bat %1 User %leavefile% %passwordless%
goto :eof
:notexists
echo ..\%1 does not exists. 
goto :eof
:usage
echo Run as %0 [AppName] [-np]
echo -x instructs the diff routine to leave the copy of the file from the skeleton in an app folder if it is different
echo -np indicates a passwordless service

Augments an existing application with changes from skeleton. [Download modifyApplicationSubProfile.bat].

@echo off
rem Augments an existing application with changes from skeleton
rem Replaces "$1" in file names and file contents of the skeleton with the app name.
rem v1 2008(c) Alex Ivkin
rem GNU sed must be in the same folder as the batch file. The batch must be executed from the folder that it is in.
if .%1.==.. goto usage
if .%2.==.. goto usage
if not exist ..\%1\ITIM%1%2Profile goto missing
echo Checking and modifying %1 %2 profile...
rem ---- Check deployment structure ----
if exist "..\_Skeleton_mods\Deployment\build$1%2Profile.bat" (
    sed -rT s/\$1/%1/g "..\_Skeleton\Deployment\build$1%2Profile.bat" > ..\%1\Deployment\build%1%2Profile.bat.fromskeleton
    fc ..\%1\Deployment\build%1%2Profile.bat ..\%1\Deployment\build%1%2Profile.bat.fromskeleton | find "FC: no diff" > nul
    IF ERRORLEVEL 1 ( 
        echo - File Deployment\build%1%2Profile.bat has been already modified. Will not update.
        IF NOT .%dontdelete%.==.true. del ..\%1\Deployment\build%1%2Profile.bat.fromskeleton
    ) ELSE (
        echo Updating Deployment\build%1%2Profile.bat
        sed -rT s/\$1/%1/g "..\_Skeleton_mods\Deployment\build$1%2Profile.bat" > ..\%1\Deployment\build%1%2Profile.bat
        del ..\%1\Deployment\build%1%2Profile.bat.fromskeleton
    )
)
rem ---- Check development structure ----
setlocal EnableDelayedExpansion
pushd ..\_Skeleton_mods\ITIM$1%2Profile
for %%a in (*) do (
    rem Do search and replace in both file name and file contents. Then diff that.
    <nul (set/p z=set filename=) > filename$.bat
    echo %%a| ..\..\_AppToolkit\sed -r s/\$1/%1/g >> filename$.bat
    call filename$.bat
    ..\..\_AppToolkit\sed -rT s/\$1/%1/g "..\..\_Skeleton\ITIM$1%2Profile\%%a" > ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton
    if .%2. == .User. (
        if .%4. == .true. (
            if %%a == schema.dsml (
                rem Remove erPassword attribute from the user account class
                ..\..\_AppToolkit\sed -T "/ITIM%1UserAccount/,/\/class/ {/erPassword/d}" ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton > ..\..\%1\ITIM%1%2Profile\!filename!.fromskeletonfix
                move ..\..\%1\ITIM%1%2Profile\!filename!.fromskeletonfix ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton > nul
            )
            if %%a == service.def (
                rem add password commands to the end on service.def
                ..\..\_AppToolkit\sed -T "/<\/properties>/i\        <property name=\"com.ibm.itim.remoteservices.ResourceProperties.PASSWORD_NOT_REQUIRED_ON_RESTORE\"><value>true</value></property>\n     <property name=\"com.ibm.itim.remoteservices.ResourceProperties.PASSWORD_NOT_ALLOWED_ON_RESTORE\"><value>true</value></property>" ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton > ..\..\%1\ITIM%1%2Profile\!filename!.fromskeletonfix
                move ..\..\%1\ITIM%1%2Profile\!filename!.fromskeletonfix ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton > nul
            )
        )
    )
    fc ..\..\%1\ITIM%1%2Profile\!filename! ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton | find "FC: no diff" > nul 
    IF ERRORLEVEL 1 ( 
        echo - File !filename! has been already modified. Will not update.
        IF NOT .%3.==.true. del ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton
    ) ELSE (
        echo Updating !filename!
        ..\..\_AppToolkit\sed -rT s/\$1/%1/g "%%a" > ..\..\%1\ITIM%1%2Profile\!filename!
        if .%2. == .User. (
            if .%4. == .true. (
                if %%a == schema.dsml (
                    rem Remove erPassword attribute from the user account class
                    ..\..\_AppToolkit\sed -T "/ITIM%1UserAccount/,/\/class/ {/erPassword/d}" ..\..\%1\ITIM%1%2Profile\!filename! > ..\..\%1\ITIM%1%2Profile\!filename!.fix
                    move ..\..\%1\ITIM%1%2Profile\!filename!.fix ..\..\%1\ITIM%1%2Profile\!filename! > nul
                )
                if %%a == service.def (
                    rem add password commands to the end on service.def
                    ..\..\_AppToolkit\sed -T "/<\/properties>/i\        <property name=\"com.ibm.itim.remoteservices.ResourceProperties.PASSWORD_NOT_REQUIRED_ON_RESTORE\"><value>true</value></property>\n     <property name=\"com.ibm.itim.remoteservices.ResourceProperties.PASSWORD_NOT_ALLOWED_ON_RESTORE\"><value>true</value></property>" ..\..\%1\ITIM%1%2Profile\!filename! > ..\..\%1\ITIM%1%2Profile\!filename!.fix
                    move ..\..\%1\ITIM%1%2Profile\!filename!.fix ..\..\%1\ITIM%1%2Profile\!filename! > nul
                )
            )
        )
        del ..\..\%1\ITIM%1%2Profile\!filename!.fromskeleton
    )
    del filename$.bat
)
popd
goto :eof
:missing
echo Missing ..\%1\ITIM%1%2Profile
goto :eof
:usage
echo Do not call this file directly unless you know what you are doing.

Augments the skeleton with changes. Run this file ONLY after a successful completion of profile modifications for all services. Run like this:

call modifySkeletonProfile.bat User

Augments the skeleton with changes. (modifySkeletonProfile.bat)

@echo off
rem Augments the skeleton with changes
rem Run this file ONLY after a successful completion of profile modifications for all services
if .%1.==.. goto usage
pushd ..\_Skeleton_mods
echo Updating %1 Skeleton...
if exist "Deployment\build$1%1Profile.bat" move "Deployment\build$1%1Profile.bat" "..\_Skeleton\Deployment\build$1%1Profile.bat" > nul
for %%a in (ITIM$1%1Profile\*) do (
    move %%a ..\_Skeleton\%%a > nul
)
popd
goto :eof
:usage
echo Do not call this file directly unless you know what you are doing.

@Tools @ITIM




Backlinks: idmdepot.com:Tools and Scripts:Create ITIM TDI DSML Based Service with a script