Use CommandExecutor to run asadmin commands in Embedded GlassFish

CommandExecutor is a general API to programmatically run asadmin commands in Embedded GlassFish.
See javadocs. I'll show how you can use it.

You will need the glassfish-embedded-all-v3-prelude-\*.jar. You can download the latest nightly build and use latest.jar.

Before you use CommandExecutor, you must first start Server:

EmbeddedInfo ei = new EmbeddedInfo();
Server server = new Server(ei);
server.start();
CommandExecutor ce = server.getCommandExecutor();

Look-up a command you want to try from the Administration Commands section of the Sun GlassFish Enterprise Server v3 Prelude Reference Manual

Let's try create-system-properties.
The command name is create-system-properties.
The default operand is one or more name-value pairs.

If you are familiar with asadmin commands, it would like this if you were running from the asadmin command line.

asadmin create-system-properties HTTP_LISTENER_PORT=38080:HTTP_SSL_LISTENER_PORT=38181

Using the CommandExecutor, the above would translate to

Properties options = new Properties();
options.setProperty("DEFAULT", "HTTP_LISTENER_PORT=38080:HTTP_SSL_LISTENER_PORT=38181");
ce.execute("create-system-properties", options);

Always use "DEFAULT" as the property name of the default operand. In addition to the default operand, other commands may have additional required options. For example, create-jdbc-connection-pool has datasourceclassname as a required option and connectionpoolid as the default operand.

asadmin create-jdbc-connection-pool --datasourceclassname myDataSourceClass myConnPool

becomes

options.setProperty("datasourceclassname", "myDataSourceClass");
options.setProperty("DEFAULT", "myConnPool");
ce.execute("create-jdbc-connection-pool", options);

Use options.clear() between different command executions.

You can also deploy a war.

asadmin deploy c:\\samples\\hello.war

becomes

options.setProperty("DEFAULT", "c:\\\\samples\\\\hello.war");
ce.execute("deploy", options);

Run your test class that deploys your war. The default port is 8888.

java -cp latest.jar;TestCommandExecutor.jar testcommandexecutor.Main

Check your web application. http://localhost:8888/hello/

I haven't tested all the commands that are supported in GlassFish v3 Prelude, but most should work. I do know that start-database and stop-database will not work because Embedded GlassFish does not bundle JavaDB.

Comments:

Nice blog.
Does the CommandExecutor will support the offline asadmin command, like 'help'?
Could you show some sample code to use getReport method of CommandExecutor? I always got null. Thanks!

Posted by Jim Jiang on February 08, 2009 at 12:55 AM EST #

I don't think it will support offline commands like 'help' right now. If you think there's a use case you can file an RFE.

I use the getReport method in my unit tests to check the exit code of the command. I'll show an example of how I do that. I use the getMessage as well but for some I'm not seeing any messages right now. So that may be a bug.

Posted by Jennifer Chou on February 10, 2009 at 06:07 AM EST #

Nada a declarar

Posted by guest on February 13, 2009 at 04:36 AM EST #

Post a Comment:
  • HTML Syntax: NOT allowed
About

Jennifer Chou

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today