• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
AS7 and CLI
 

AS7 and CLI

on

  • 1,917 views

AS and CLI

AS and CLI
JBug Milano - September 2012
Stefano Maestri

Statistics

Views

Total Views
1,917
Views on SlideShare
1,917
Embed Views
0

Actions

Likes
1
Downloads
14
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    AS7 and CLI AS7 and CLI Presentation Transcript

    • 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
    • AS7 in a nutshell●Blazingly fast (<3s startup)●Lightweight●Modular core●Hot, parallel deployment●Elegant administration●Domain management●Easy testable
    • 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)
    • Dynamic Model Representation (DMR)
    • 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
    • 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
    • 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 components 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;
    • 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.
    • connect to the specific controller or serverinstance by specifying the host and the port; DEMO (execute cli an connect)
    • send operation requests● Address (node path) node_type=node_name (, node_type=node_name)* /subsystem=datasources /subsystem=datasources/data-source=ExampleDS● Operations :operation-name [( [name=value [, name=value]*] )] :shutdown :shutdown() :shutdown(restart=true) /subsystem=datasources/data-source=ExampleDS:write- attribute(name=min-pool-size,value=5)
    • 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;
    • 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
    • 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
    • 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)
    • 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
    • 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...)
    • 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
    • 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(); }
    • try-catch-finally control flowTry /subsystem=datasources/data-source=myds:add(connection-url=xxx,jndi-name=java:/myds,driver-name=h2)catch /subsystem=datasources/data-source=myds:remove /subsystem=datasources/data-source=myds:add(connection-url=xxx,jndi-name=java:/myds,driver-name=h2)finally /subsystem=datasources/data-source=myds:enableend-try
    • if-else control flow if (outcome != success) of /system-property=test:read-resource     /system-property=test:add(value=true) end-if[standalone@localhost:9999 /] /system-property=test:read-resource{    "outcome" => "failed",    "failure-description" => "JBAS014807: Management resource[("system-property" => "test")] not found",    "rolled-back" => true} [standalone@localhost:9999 /] /system-property=test:read-resource {     "outcome" => "success",     "result" => {"value" => "true"} }
    • 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()
    • 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
    • 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