How to stop a service programatically in Sonic ESB

Posted by MichielLange on 15-Jan-2013 07:17

I'm trying to figure out how to stop a service on Sonic ESB 7.6;


In the class I defined for this, I've a status component, which I cannot seem to get running correctly, as I do keep getting either null pointers or invoke errors:

What I tried so far:

(already connected with ESBAPI esbApi, as well as a JMSConnectorClient connector)


        IContainerConfigAPI cca = esbApi.getContainerConfigAPI();

        String containernames[] = cca.listESBContainers();
        for(String containername : containernames)
        {

               String mfcontainers[] = cca.listMFContainersWithESBContainer(containername);

            for(String mfcontainer : mfcontainers)
            {
                if(mfcontainer.contains("MyName")) /* there's a specific reason why I catch this one, for now to reduce a bit of overhead */
                {
                    System.out.printf("Container: %s \n", mfcontainer);
                    try{
                        IAgentProxy iap = MFProxyFactory.createAgentProxy(connector,
                                new ObjectName(sci.domainName + "." + mfcontainer + ":ID=AGENT"));
                        System.out.printf("%s is %s\n",mfcontainer,iap.getStateString());
                   
                        //IContainerConfig icc = cca.getESBContainer(sci.domainName + "." + mfcontainer + ":ID=" + containername); /* something goes wrong here, as I keep getting null */
                        IContainerConfig icc = cca.getESBContainer(iap.getConfigID());                                                                      /* goes wrong as well, also getting null */
                       
                        if(iap.getStateString().equals("Online"))
                        {
                            ICollectionsMonitorProxy icmp = MFProxyFactory.createCollectionsMonitorProxy(connector,
                                    new ObjectName(sci.domainName + "." + mfcontainer + ":ID=" + containername));
                            System.out.printf("iap: %s; icmp: %s\n",iap.toString(),icmp.toString());
                            System.out.printf("AgentProxy: %s.%s:ID=AGENT\n",sci.domainName,mfcontainer);
                            System.out.printf("IContainerConfig: %s.%s:ID=%s\n", sci.domainName,mfcontainer,containername);
                            if(icc == null)
                            {
                                System.out.printf("ContainerConfig: <null>\n"); /* this is the output I get and do not want */
                            }
                            else
                            {
                                System.out.printf("ContainerConfig: Name: %s\n",icc.getName());
                            }
                            if(icmp == null)
                            {
                                System.out.printf("icmp is null...\n");
                            }
                            else
                            if(icmp.getStateString().equals("Online"))
                            {
                                System.out.printf("Info: mfcontainer: %s, containername %s\n",mfcontainer,containername);
                                IContainerRuntimeAPI cra = esbApi.getContainerRuntimeAPI(mfcontainer,containername);
                                System.out.printf("Info: Container Runtime API created.\n");
                                ESBArtifactInfo artifacts[] = cra.getArtifacts(); /* this one always causes a stack trace "Failed invoke" */
                                ESBArtifactInfo pi =  cra.getProcessInfo("monitorService");
                               
                                System.out.printf("Info: Obtained artifacts.\n");
                                for(ESBArtifactInfo artifact : artifacts)
                                {
                                    int ArtifactState = artifact.getCurrentState();
                                    String ArtifactName = artifact.getName();
                                    System.out.printf("%s is %d\n", ArtifactName,ArtifactState);
                                }
                            }
                        }
                        else
                        {
                            System.out.printf("Container: %s is not active.\n",mfcontainer);
                        }
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }
                else
                {
                    System.out.printf("Container \"%s\" not matched.\n",mfcontainer); /* to show that we do iterate */
                }
            }

Anyone who can tell what is wrong in my approach?

All Replies

This thread is closed