[wildfly-dev] trying to run subsystem extension in host controller

Kabir Khan kabir.khan at jboss.com
Mon Apr 25 13:56:47 EDT 2016


> On 25 Apr 2016, at 18:39, Kabir Khan <kabir.khan at jboss.com> wrote:
> 
> Seems you have hit some of the tweaks needed that I mentioned :) 
> 
> I'll try to explain a bit below. Other things to look out for are that all the paths relating to data, configuration paths etc. have a different name in the HC to on a server (see the constants in ServerEnvironment vs HostControllerEnvironment).
>> On 25 Apr 2016, at 17:15, John Mazzitelli <mazz at redhat.com> wrote:
>> 
>> 
>> <TL;DR>
>> Trying to run a subsystem extension in host controller and it fails because some of its service dependencies are missing. Am I doing something wrong (it would not be a shocker if I was) or are these services really not deployed inside the Host Controller?
>> </TL;DR>
>> 
>> 
>> I'm trying to get a subsystem extension to run inside of the Host Controller. This is a subsystem extension that runs fine in a standalone WildFly container - just trying to get it to run in a host controller (and maybe later in a domain controller as well).
>> 
>> In domain/configuration/host.xml, I add my own <subsystem> in the <profile> - and that seems to run OK (well, not OK, but I know it is getting its initialization method invoked by the container).
>> 
>> Because I need an outbound socket binding defined, I put add a socket-binding-groups in the host.xml (there are no socket-binding-groups in here by default):
>> 
>>  <socket-binding-groups>
>>    <socket-binding-group default-interface="public" name="standard-sockets">
>>        <outbound-socket-binding name="hawkular">
>>            <remote-destination host="127.0.0.1" port="8080"/>
>>        </outbound-socket-binding>
>>    </socket-binding-group>
>>  </socket-binding-groups>
>> 
>> That causes the container to abort with "WFLYCTL0198: Unexpected element '{urn:jboss:domain:4.0}socket-binding-groups' encountered" So I remove <socket-binding-groups> so that <socket-binding-group> is a direct child of the top-level <host>. The container starts OK when I do this.
> Correct. According to the xsd, only one socket-binding-group is allowed in host.xml
> 
>> 
>> But now the problems - my subsystem registers itself with a few service dependencies that do not exist at the time my service is initialized - specifically:
>> 
>> jboss.naming.context.java (o.j.a.naming.deployment.ContextNames.JAVA_CONTEXT_SERVICE_NAME)
> This would be installed by the naming subsystem, which is not a host capable subsystem. So there cannot be any jndi on a HC at the moment.
>> 
>> jboss.outbound-socket-binding (o.j.a.network.OutboundSocketBinding.OUTBOUND_SOCKET_BINDING_BASE_SERVICE_NAME)
> I see the same thing https://issues.jboss.org/browse/WFCORE-1505. 
> 
>> 
>> jboss.server.environment (o.j.a.server.ServerEnvironmentService.SERVICE_NAME)
> This would only be available in a server. However, there is no corresponding service in a host controller to get the HostControllerEnvironment. Perhaps we should add one https://issues.jboss.org/browse/WFCORE-1506.
>> 
>> jboss.as.server-controller (o.j.a.server.Services.JBOSS_SERVER_CONTROLLER)
> 
> In a HC you need to depend on the DomainModelControllerService instead, it's name is in DomainModelControllerService.SERVICE_NAME.
> Both services contain a ModelController, you will need to choose the name to depend on according to the process type.
> 
>> 
>> When the host controller runs, I get this startup error:
>> 
>> ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
>>   ("host" => "master"),
>>   ("subsystem" => "hawkular-wildfly-agent")
>> ]) - failure description: {"WFLYCTL0180: Services with missing/unavailable dependencies" => [
>>   "\"org.hawkular.agent.\".hawkular-wildfly-agent is missing [jboss.outbound-socket-binding.hawkular, jboss.server.environment, jboss.as.server-controller]",
>>   "jboss.naming.context.java.abc is missing [jboss.naming.context.java]"
>> ]}
>> 
>> Sooo..... my question is - what happens if a subsystem needs these things? Do I need to do something special to make them available or are they really not deployed in the host controller?
>> 
>> What I need these for is:
>> 
>> jboss.naming.context.java - so I can store something in JNDI (actually, for my use case, I can probably skip this dependency - I don't think I will need it when running in the host controller)
> I don't think this is anything we can do at the moment, so hopefully you can do without.
>> 
>> jboss.outbound-socket-binding - my subsystem needs to talk to an external server and this defines what host/port that server is on
> I'll look at adding this to WildFly. If this needs backporting to EAP 7.0.x, please let us know so we can put it into the process.
>> 
>> jboss.server.environment - I need this to find out where the host controller's data directory is (e.g. domain/data). Is there another way to get this?
> I believe you should be able to get this by reading the following system property (taken from HostControllerEnvironment):
> 
> <code>
> /**
> * Constant that holds the name of the system property
> * for specifying {@link #getDomainDataDir()} the domain data directory}.
> *
> * <p>Defaults to <tt><em>DOMAIN_BASE_DIR</em>/data</tt>.
> */
> public static final String DOMAIN_DATA_DIR = "jboss.domain.data.dir";
> </code
>> 
>> jboss.as.server-controller - I need this to obtain information from the management model such as "/:uuid" (which it looks like HCs do not have), the "/:launch-type" attribute and others.
> You will need to use the HC one as mentioned above
> 
> 
> I think that of the bugs/missing things you mention https://issues.jboss.org/browse/WFCORE-1505 (missing outbound socket binding service) is the one that looks like it blocks you the most, so I will see if that is fixable first.
https://github.com/wildfly/wildfly-core/pull/1520
>> 
>> 
>> _______________________________________________
>> wildfly-dev mailing list
>> wildfly-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/wildfly-dev
> 
> 
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/wildfly-dev




More information about the wildfly-dev mailing list