[jbosstools-dev] JBT/AS Server info

Max Rydahl Andersen max.andersen at redhat.com
Fri Aug 31 05:55:25 EDT 2012


> FWIW
> 
> The contribution of the teiid server aspects is a nice-to-have feature
> at the moment in Designer 8.0. I have added them at the moment on
> account of it being trivial to add the provider extensions to the
> Servers view.
> 
> However, the changes to the Teiid Server view in Designer are such that
> the teiid server is being derived from an eclipse-defined jboss instance
> hence the TeiidServer POJO being aware of its parent IServer (jboss 7).
> 

got some screenshots ? not sure i completely understand ;)

I read it as there will still be two different server views ?

/max

> Regards
> 
> PGR
> 
> -- 
> Paul Richardson
> 
>  * p.g.richardson at phantomjinx.co.uk
>  * p.g.richardson at redhat.com
>  * pgrichardson at linux.com
> 
> 
> On 08/31/2012 10:15 AM, Rob Stryker wrote:
>> I didn't get any updates Max.
>> 
>> On 08/31/2012 05:14 PM, Max Rydahl Andersen wrote:
>>> Since I saw Phantom work on this I was wondering if there were any
>>> follow up on this:
>>> 
>>> On 14 Aug 2012, at 09:45, Max Rydahl Andersen
>>> <max.andersen at redhat.com> wrote:
>>> 
>>>> im late on this, but if i'm reading this right Rob is outlining how
>>>> to communicate with the AS7 server API's which is all fine and dandy;
>>>> but
>>>> as  far as I understand Teiid aren't there more to this than just api
>>>> calls ?
>>>> 
>>>> i.e. decide if Teiid servers is a part/extension of an AS/EAP server
>>>> type or a server type on its own ?
>>>> wether Teiid actions are contributed to the server view menu or
>>>> somewhere else ?
>>>> How datasource setup is done ? (today its scattered everywhere
>>>> (hibernate, wtp, dtp, teiid, etc.) - time to make it less scattered imo)
>>>> 
>>>> ...any other server dependent features teiid needs to do ?
>>>> 
>>>> 
>>>> On 06 Aug 2012, at 06:57, Rob Stryker <rstryker at redhat.com> wrote:
>>>> 
>>>>> Hey Barry:
>>>>> 
>>>>> You'll probably really want to investigate using JBossTools if you
>>>>> want some ready-made APIs to really help send management commands. 
>>>>> Also, discovering the management port will require you either
>>>>> parsing xml yourself or accessing some string constants in our server.
>>>>> 
>>>>> Let's start with host.  All IServer objects in WTP can get the host
>>>>> simply by server.getHost(), so that's easy.
>>>>> 
>>>>> For getting the management port, there are a few ways to do it. The
>>>>> first is with raw xml, searching the proper file. The xpath you'll
>>>>> need and file data is:
>>>>> 
>>>>> as7.0 xpath: 
>>>>> //*[local-name()="management-interfaces"]/*[local-name()="native-interface"]
>>>>> 
>>>>> as7.1 xpath: 
>>>>> //*[local-name()="socket-binding-group"]/*[local-name()="socket-binding"][@name="management-native"]
>>>>> 
>>>>> xpath attribute:  port
>>>>> file to search:  standalone/configuration/${jboss_config_file}  
>>>>> (probably standalone.xml)
>>>>> 
>>>>> Obviously here the xpaths differ based on jboss version. AS7.0 has
>>>>> one xpath. AS7.1 has a different.  However, none of these allow the
>>>>> 'overrides' available in the UI.  In the JBossTools UI, you can
>>>>> double-click the server to see the editor. There's a port section
>>>>> there, and there's the opportunity to ignore the xml value and
>>>>> override it via UI.  So if the default xpath has 9999 but somehow
>>>>> you're using more complicated features in the standalone.xml such
>>>>> that the actual value is 9998, you'll need to override this in the UI.
>>>>> 
>>>>> So how to get this value that respects the user's UI choices? Well,
>>>>> two ways. One is by using hard-coded strings (if you want to avoid
>>>>> dependency on jbosstools).  The code for that would look like this:
>>>>> 
>>>>> public static final String AS7_MANAGEMENT_PORT_DETECT=
>>>>> "org.jboss.ide.eclipse.as.core.server.as7.managementPortAutoDetect";
>>>>> //$NON-NLS-1$
>>>>> 
>>>>> public static final String AS7_MANAGEMENT_PORT =
>>>>> "org.jboss.ide.eclipse.as.core.server.as7.managementPort";
>>>>> //$NON-NLS-1$
>>>>> 
>>>>>        boolean detect = getAttribute(detectKey, true);
>>>>>        String result = null;
>>>>>        if( !detect ) {
>>>>>            result = getAttribute(attributeKey, (String)null);
>>>>>        } else {
>>>>>             // Load it from the xml xpaths listed above
>>>>>        }
>>>>> 
>>>>> This is if you're trying to avoid any dependencies on jbosstools of
>>>>> course. If you don't mind having dependencies on jbosstools, the
>>>>> best way to get this port is as follows:
>>>>> 
>>>>>     JBoss7Server jb7 = server.loadAdapter(JBoss7Server.class, null);
>>>>>     if( jb7 != null ) {
>>>>>            return jb7.getManagementPort();
>>>>>     }
>>>>> 
>>>>> So what other benefits can JBT provide other than just helping to
>>>>> find the port? Well, we can also run your remote commands for you.
>>>>> JBoss7 servers have a remote management service registered in
>>>>> eclipse, which can run your remote commands and return the results.
>>>>> 
>>>>> The first is our management service. The service interface is
>>>>> IJBoss7ManagerService.  You can see a lot of methods there for
>>>>> deploying or stopping a server. But there's also a method to run
>>>>> arbitrary commands:  public String execute(IAS7ManagementDetails
>>>>> details, String request) throws Exception;
>>>>> 
>>>>> The way to access this service is via the following command:
>>>>> JBoss7ManagerUtil.getService(iserverObject);
>>>>> 
>>>>> This API ensures that if for example the protocol changes slightly
>>>>> (either intentionally or as a bug) between as7.1 and as7.2 / as8.0, 
>>>>> the proper service is returned for the proper AS version. Using
>>>>> these APIs ensure that all the management jars are of the proper
>>>>> version, talking to the proper remote version. It's possible to do
>>>>> all of this on your own, but I'm pretty sure you'll find it a LOT
>>>>> more trouble and you'll simply be replicating our work.
>>>>> 
>>>>> And worse yet, how you intend to get the jboss-as jars on the
>>>>> classpath is a point of interest. We currently will be bundling the
>>>>> management jars for each version (or more specifically for any set
>>>>> of jars that cannot talk to each other. We also work hard to ensure
>>>>> that regressions upstream (ie a new version unable to talk to older
>>>>> ones) is fixed promptly).   If you intend to bundle these jars,
>>>>> it'll be inflating the size of your product substantially. And
>>>>> you'll most likely be re-engineering our solution for separation of
>>>>> version jars.
>>>>> 
>>>>> So we've already discussed how to get the port via xml, and how to
>>>>> get a port that respects user settings. We've discussed how to get
>>>>> the management service regardless of app-server version. From there,
>>>>> running the default commands is simple. For example:
>>>>> 
>>>>> JBoss7ManagerUtil.getService(iserverObject).stop(new
>>>>> AS7ManagementDetails(iserverObject));
>>>>> 
>>>>> So the last thing that remains is how to run an arbitrary command.
>>>>> Due to classpath and classloading concerns, we can't have the
>>>>> management service api and interfaces include references to jboss-as
>>>>> jars or classes like ModelNode, so the method for executing
>>>>> arbitrary commands is:
>>>>> 
>>>>> JBoss7ManagerUtil.getService(iserverObject).execute(IAS7ManagementDetails
>>>>> details, String request) throws Exception;
>>>>> 
>>>>> The "String request" is a JBoss-dmr string. And to generate that
>>>>> string, we have yet another plugin called
>>>>> org.jboss.ide.eclipse.as.dmr.  By depending on this plugin you can
>>>>> write code as follows:
>>>>> 
>>>>>        ModelNode request = new ModelNode();
>>>>>        request.get(OP).set(READ_CHILDREN_NAMES_OPERATION);
>>>>>        request.get(CHILD_TYPE).set(getName());
>>>>>        request.get(OP_ADDR).set(getManagementAddress(getParent()));
>>>>>        String requestString = request.toJSONString(true);
>>>>>        String resultString =
>>>>> JBoss7ManagerUtil.getService(iserverObject).execute(new
>>>>> AS7ManagementDetails(iserverObject), requestString);
>>>>>        ModelNode resultNode = ModelNode.fromJSONString(resultString);
>>>>> 
>>>>> Another way to do this is via the following:
>>>>> 
>>>>>    protected ModelNode executeWithResult(final IServer server,
>>>>> final String request) throws Exception {
>>>>>        String resultJSON = JBoss7ManagerUtil.executeWithService(new
>>>>> JBoss7ManagerUtil.IServiceAware<String>() {
>>>>>            public String execute(IJBoss7ManagerService service)
>>>>> throws Exception {
>>>>>                return service.execute(new
>>>>> AS7ManagementDetails(server), request);
>>>>>            }
>>>>>        }, server);
>>>>>        ModelNode result = ModelNode.fromJSONString(resultJSON);
>>>>>        return result;
>>>>>    }
>>>>> 
>>>>> 
>>>>> Hopefully this gives you a good starting point to discovering ports
>>>>> and running management commands against AS7, as well as what
>>>>> concerns there are.  I'm sure Max or the build team can assist /
>>>>> advise if you start addign dependencies on jbt plugins.
>>>>> 
>>>>> Good luck!!
>>>>> 
>>>>> - Rob
>>>>> 
>>>>> On 08/03/2012 10:19 PM, Barry Lafond wrote:
>>>>>> Rob,
>>>>>> 
>>>>>> Over here in SOA-land the Teiid server//runtime team has changed
>>>>>> their integration in AS to adapt to the AS 7 changes.
>>>>>> 
>>>>>> One change in particular, dropping Teiid's custom PORT number, has
>>>>>> required Teiid Designer to programmatically discover the JBoss
>>>>>> Management HOST/PORT info.
>>>>>> 
>>>>>> Currently my code-base does not depend on JBT code of any kind
>>>>>> except for our swt.bot tests.  I've looked at the structure of your
>>>>>> contributions to WTP's ServerTools framework, so I understand that
>>>>>> at a high level.
>>>>>> 
>>>>>> Can you point me in the right direction? maybe another project that
>>>>>> already does this?
>>>>>> 
>>>>>> Thx
>>>>>> 
>>>>>> Barry LaFond
>>>>>> Teiid Designer Project
>>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> jbosstools-dev mailing list
>>>>> jbosstools-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>>> 
>>>> _______________________________________________
>>>> jbosstools-dev mailing list
>>>> jbosstools-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>> 
>> 
> 
> 
> -- 
> Paul Richardson
> 
>  * p.g.richardson at phantomjinx.co.uk
>  * pgrichardson at linux.com
>  * mob: +44 (0)9780 869490
>  * home: +44 (0)1633 892850
> 
> "I know exactly who reads the papers ...
> 
>  * The Daily Mirror is read by people who think they run the country.
>  * The Guardian is read by people who think they ought to run the country.
>  * The Times is read by people who do actually run the country.
>  * The Daily Mail is read by the wives of the people who run the country.
>  * The Financial Times is read by the people who own the country.
>  * The Morning Star is read by the people who think the country ought
>    to be run by another country.
>  * The Daily Telegraph is read by the people who think it is."
> 
> Jim Hacker, Yes Minister
> 




More information about the jbosstools-dev mailing list