Stefano Maestri is a committer for various JBoss projects including JBoss WS and IronJacamar, and has been a JBoss/Red Hat employee since 2010. He is a member of the JBoss AS7 team and leader of the Wise project. The Dynamic Model Representation (DMR) is a central detyped management API that uses a small set of Java classes to control standalone servers or domains through various transports including Java and HTTP.
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
Cli jbug
1.
2. Who is Stefano?
● JBoss WS[1] committer since early 2007
● Committer of various Jboss projects
● JBoss / Red Hat employee since July 2010
● JBoss AS7[2] team memeber
● IronJacamar[4] team member
● Wise[3] project leader
● Follow me: www.javalinux.it, www.twitter.com/maeste
https://plus.google.com/102371438013760231375/about
https://github.com/maeste http://www.linkedin.com/in/maeste
[1] http://www.jboss.org/jbossws [2] http://www.jboss.org/jbossas
[3] http://www.jboss.org/wise [4] http://www.jboss.org/ironjcamar
3. AS7 in a nutshell
●Blazingly fast (<3s startup)
●Lightweight
●Modular core
●Hot, parallel deployment
●Elegant administration
●Domain management
●Easy testable
4. Dynamic Model Representation (DMR)
● Central detyped management API
● All management operations with/on DMR
● Backwards compatible
● Can be used to control standalone or
domain
● Detyped (i.e. string based) API uses small
set of Java classes
● Various transports (Java, remoting,
JSON/HTTP)
6. What is CLI?
● Command Line Interface
● Easy to use both for standalone and
domain mode
● Scriptable
● Low level management of DMR resource
and/or high level user friendly command
● Manage deployement and “special
deployment”
● Provide also a simple GUI
7. Why CLI instead of Web Console?
● Both have valid use cases
● CLI could be helpful in complex
management but requiring programming
skills (almost)
● Web console give an advanced interface
for complex operation and give a cooked
view of resources
8. CLI Feature includes (1/2):
● connect to the specific controller or server instance by specifying
the host and the port;
● send operation requests (providing the managed component's
address, attribute or operation name and parameters) following
the AS7 detyped management model;
● view the available managed components, their attributes and
operations;
● tab-completion for commands and operation requests;
● history of the executed commands and operation requests;
● deploy and undeploy standard packages at runtime in standalone
and domain modes;
● CLI deployment archives;
9. CLI Feature includes (2/2):
● batch mode;
● non-interactive mode;
● generic resource type commands and custom commands;
● GUI mode;
● CLI public API;
● system properties in operations and commands;
● try-catch-finally control flow;
● if-else control flow
● Single jar for remote clients
● Advanced CLI scripting with Groovy, Rhino, Jython, etc.
10. connect to the specific controller or server
instance by specifying the host and the port;
DEMO
(execute cli an connect)
12. A demo of some other features
● view the available managed components,
their attributes and operations;
● tab-completion for commands and
operation requests;
● history of the executed commands and
operation requests;
13. Deploy and Undeploy standard
packages
● Standalone mode
● Deploy/undeploy a package
● Deploy –disabled
● Undeploy --keep-content
● Domain mode
● Specify a server group (or --all-server-
groups)
● Undeploy from relevant server groups
● Deply/undeploy on specific server group
and disabled deployments
14. CLI deployment archive
● Standard Jar containing archives to
deploy
● A deploy.scr containing commands to
execute in cli when archive is deployed
● A undeploy.scr to rollback on undeploy
● Multiple deploy/undeploy script can exist
and they are addressed by --script option
in deploy/undeploy command
15. Batch mode
● The batch mode allows one to group
commands and operations and execute
them together as an atomic unit
● Build them from scratch (entering batch
mode w/ “batch” command)...demo
● Execute (eventually modify) batch stored
in file
● Batches with properties (./jboss-cli
--properties=script.properties)
16. Non interective
● ./jboss-cli.sh -c –file=test.cli
● ./jboss-cli.sh -c --commands="cd
subsystem=web,ls"
● Why? Cron for example, or in any case
you need to run scripts triggered from
operating system
17. Generic type CLI commands
● is a command that is assigned to a
specific node type
● Data-source example
● Add a new command (only in current
session...but you can create a batch for
your own commands...)
18. CLI GUI
● Browse the domain model
● To see the operations available for a
node, right-click the node.
● Context-sensitive help is available
throughout the Command Builder
● You can also edit the command line
manually and submit a command at any
time
19. Public API
(Since JBoss AS 7.1.1)
final CommandContext ctx;
try {
ctx = CommandContextFactory.getInstance().newCommandContext();
} catch(CliInitializationException e) {
throw new IllegalStateException("Failed to initialize CLI context", e);
}
try {
// connect to the server controller
ctx.connectController();
// execute commands and operations
ctx.handle(":take-snapshot");
ctx.handle("deploy myapp.ear");
} catch (CommandLineException e) {
// the operation or the command has failed
} finally {
// terminate the session and
// close the connection to the controller
ctx.terminateSession();
}
22. Scripting with Groovy
(and all Java lib enabled scripting language)
groovy -cp jboss-cli-client.jar uptime.groovy
import org.jboss.as.cli.scriptsupport.*
cli = CLI.newInstance()
cli.connect()
if (cli.getCommandContext().isDomainMode()) {
cli.cmd("cd /host=master/core-service=platform-mbean/type=runtime")
} else {
cli.cmd("cd /core-service=platform-mbean/type=runtime")
}
result = cli.cmd(":read-attribute(name=start-time)")
response = result.getResponse()
startTime = response.get("result").asLong()
result = cli.cmd(":read-attribute(name=uptime)")
response = result.getResponse()
serveruptime = response.get("result").asString()
println()
println("The server was started on " + new Date(startTime))
println("It has been running for " + serveruptime + "ms")
cli.disconnect()
23. Community
● Get involved !
● Base for JBoss Enterprise Application
Platform 6.x
● Download
● http://www.jboss.org/jbossas/downloads
● Forum
● http://community.jboss.org/en/jbossas/as7_us
ers
24. Community
● Hacking on AS 7
● http://community.jboss.org/wiki/HackingonAS
7
● Command Line Interface
● https://community.jboss.org/wiki/CommandLin
● Operations, Administration & Management
of JBoss AS7
● http://vimeo.com/25855285