Replace webapp in deployed tomcat

This script will quickly replace the webapp dir of a deployed webapp in tomcat. It scans at your current directory tree for an appropriate artifact.
It will look for a target subdirectory, and will try to find a .war file in it (assumes you’ve build your app with maven).

The script takes two parameters, ‘webapp’ and ‘dir’:

  • The first is the name of the webapp deployed in tomcat
  • The second is the dir to move into the deployed webapp

Usage examples:
ctw myapp mydir will copy mydir into the myapp webapp sitting in tomcat

NB: all parameters are case insensitive
The script can be found on github here

Advertisements
Tagged with: , , ,
Posted in programming, scripts

Copy to apache script

This script is designed to work with OS X and will copy the specified dir into the users local sites dir.
It looks for the specified dir, and if it exists copies it into apache. If the dir already exists in apache, it first deletes it.
The script takes one parameter, ‘dir’ which is the dir name.

Usage examples:
ca mywebapp copies dir mywebapp into $HOME/sites/mywebapp

NB: all parameters are case insensitive
The script can be found on github here

Posted in programming, scripts

Copy to tomcat script

This script will quickly copy an app into tomcat by scanning at your current directory tree for an appropriate artifact.
It will look for a target subdirectory, and will try to find a .war file in it (assumes you’ve build your app with maven).

The script takes two parameters, ‘tomcat’ and ‘app’:

  • The first is asking whether to start/stop tomcat, it takes ‘Y’ or ‘N’ as options
  • The second is asking what to copy to tomcat. It has the options of ‘W’ or ‘C’. ‘W’ means copy the whole war, ‘C’ means copy just the compiled classes

Usage examples:
ct y c will stop/start tomcat and copies just compiled classes
ct n w will not stop/start tomcat and copies the war

NB: all parameters are case insensitive
This script requires the Generic tomcat script found on github here
The script can be found on github here

Posted in programming, scripts

Generic tomcat script

This script makes it easy to control your main tomcat installation.
All you need to do is set the $CATALINA_HOME environment variable to the location of your tomcat installation.

The available switches are:

  • start starts tomcat
  • stop stops tomcat
  • restart stops then starts tomcat
  • kill kill -9’s tomcat process
  • tail tails tomcat log

Usage examples:
tomcat start starts tomcat
tomcat restart restarts tomcat

NB: all parameters are case insensitive
The script can be found on github here.

Tagged with: , , , ,
Posted in programming, scripts

Introducing unix scripts

I’ve got several scripts that I use for doing useful things on unix.
They can be found on github here.
I’ll add some details about them individually in separate posts.

Tagged with: , ,
Posted in programming, scripts

More on TiddlyBlogger

Just a quick note to point out some work that’s been done “White Hat Marketer”

Check out the details here:

http://whitehat-marketer.com/blog/tiddlyblogger-with-permalinks-and-updates/

It basically includes the capability to update posts (rather than just create new ones), and also create permalinks.

Posted in programming

C# Win32 messaging with SendMessage and WM_COPYDATA

I had a real pain recently where I wanted to control one windows app from another. I found some useful stuff on the net, but nothing that gave an end to end solution. So here’s what I came up with.

Firstly I’ll explain why this is useful. SendMessage is part of the Win32 API, and is used to send messages from one application to another. There are a set of predefined properties that the message can relate to, and these can be used to send messages to existing applications to perform all sorts of useful functions such as changing the font in notepad, or bringing a window to the fore. For more information of the wider use of the SendMessage function, have a look at:

http://www.autohotkey.com/docs/commands/PostMessage.htm

http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx

The main use that I’m interested in is passing a specific instruction (via a string) from one app that I’ve written, to another one that I’ve written. This way I can effectively remote control one app from another (particularly useful if you want your main application to open a pop-up, and you don’t want to worry about the pop-up’s performance affecting the main application). Let’s now have a quick look at the SendMessage function:

SendMessage(int hWnd, int Msg, int wParam, int lParam)

hWnd – This is the window instance id of the application you want to send a message to. This id is retrieved using the FindWindow function

Msg – This is the type of message you want to send

wParam – Message specific data you pass in

wParam – Message specific data you pass in

Also used is the FindWindow function. This is to get the relevant window id:

FindWindow(String lpClassName, String lpWindowName)

lpClassName -The name of the class you want

lpWindowName – The name of the window that you want

To send a message that is a string, you need to use the WM_DATACOPY message property. The hard part is that you cannot just send the string as a parameter across. You need to send a pointer to the memory address of the string. If you just want to send an integer as a message you can use the WM_USER message property and send it as a value without a problem.

For a full example of the MessageHelper.cs class see this gist:

So now you can call the code to send a message like so:

MessageHelper msg = new MessageHelper();
int result = 0;
//First param can be null
int hWnd = msg.getWindowId(null, "My App Name");
result = msg.sendWindowsStringMessage(hWnd, 0, "Some_String_Message");
//Or for an integer message
result = msg.sendWindowsMessage(hWnd, MessageHelper.WM_USER, 123, 456);

Now all you need to do on the app that you want to receive the message is override the following function in the form class (obviously you can change what the responses are, and you’ll need to create constants for the parameters):

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_USER:
MessageBox.Show("Message recieved: " + m.WParam + " - " + m.LParam);
break;
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
this.doSomethingWithMessage(mystr.lpData);
break;
}
base.WndProc(ref m);
}
Tagged with: , , , , ,
Posted in geeky, programming
%d bloggers like this: