1 Reply Latest reply on Nov 30, 2010 10:11 AM by 805507

    Undeploy composites using Java API


      My requirement is to undeploy(delete) unused composite revisions (not the composite instances) using Java api. I searched through the oracle.soa.management APIs but could not find required class/methods.

      Please let me know how it can be done.

        • 1. Re: Undeploy composites using Java API
          I found out the answer.

          First get the list of composites using Locator object. Use CompositeLifeCycleMbean to undeploy the composites as below.

          package be.telenet.bpel.main;

          import java.util.Hashtable;
          import java.util.Iterator;
          import java.util.List;
          import javax.naming.Context;
          import oracle.soa.management.facade.Composite;
          import oracle.soa.management.facade.CompositeInstance;
          import oracle.soa.management.facade.Locator;
          import oracle.soa.management.facade.LocatorFactory;
          import oracle.soa.management.util.CompositeFilter;
          import oracle.soa.management.util.CompositeInstanceFilter;

          public class TestComposite
               public static void main(String[] args)
                    List<Composite> composites = null;          
                    String contextFactory = "weblogic.jndi.WLInitialContextFactory";
                    String hostName = "myHost";
                    String port = "7000";
                    String user = "weblogic";          
                    String password = "my-password";          
                    String mbeanRuntime = "weblogic.management.mbeanservers.runtime";
                    String jmxProtoProviderPackages = "weblogic.management.remote";          
                    String mBeanName = "oracle.soa.config:Application=my-infra,j2eeType=CompositeLifecycleConfig,name=my-infra";
                    Locator locator = TestComposite.getLocator(hostName, port, user, password, contextFactory);
          //Get all composites based on the filter(empty). Here filter is //empty which means, list all
                         CompositeFilter filter = new CompositeFilter();
                         //Get locator object
                         composites = locator.getComposites(filter);

                         Iterator<Composite> itr = composites.iterator();               
                         //Get mbean server connection
                         MBeanServerConnection mbsc = TestComposite.getMbeanServerConnection(hostName, port, user, password,mbeanRuntime,jmxProtoProviderPackages);
                         //Get mbean object
                         ObjectName mbean = new ObjectName(mBeanName);
                         //Get all the CompositeData objects from MBean. They contain DNs
          //Note- this DN and composite.getDN()/getCompositeDN() are not same. This DN is required for undeploying
          Object compositeObjArray = mbsc.getAttribute(mbean, "DeployedComposites");
                         CompositeData[] compositeData = (CompositeData[]) compositeObjArray;
                         while (itr.hasNext())
                              Composite tmpCmp = itr.next();                    
                              //Print composite details
                              System.out.println("Composite Name " + tmpCmp.getDN());
                              dnString = getDNToUndeploy(compositeData, cmp.getCompositeDN().toString());
               logger.debug("Composite DN: " + dnString);      
                              //Undeploys composite by calling mbean method
                              mbsc.invoke(mbean, "removeCompositeForLabel", new Object[]{dnString},new String[]{"java.lang.String"});                    
                    } catch (Exception e)
                         // TODO Auto-generated catch block

               //Get locator object using network details. This object is used for working on //composites
               public static Locator getLocator(String hostName, String port, String user, String password,
                    String contextFactory)
               Hashtable<String,String> jndiProps = new Hashtable<String,String>();
               String url = "t3://" + hostName + ":" + port + "/my-infra";
          jndiProps.put(Context.PROVIDER_URL, url);
          jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, contextFactory);
          jndiProps.put(Context.SECURITY_CREDENTIALS, password);
          jndiProps.put("dedicated.connection", "true");

          Locator locator = null;
                         locator = LocatorFactory.createLocator(jndiProps);
                    } catch (Exception e)
          return locator;
               public static MBeanServerConnection getMbeanServerConnection(String hostName, String port, String user, String password
                    , String mbeanRuntime, String jmxProtoProviderPackages)
                    throws IOException
          String url = "service:jmx:t3://" + hostName + ":" + port + "/jndi/" + mbeanRuntime;      
                    serviceURL = new JMXServiceURL(url);
          Hashtable<String,String> ht = new Hashtable<String,String>();
          ht.put("java.naming.security.principal", user);
          ht.put("java.naming.security.credentials", password);
          ht.put("jmx.remote.protocol.provider.pkgs", jmxProtoProviderPackages);

               jmxConnector = JMXConnectorFactory.newJMXConnector(serviceURL, ht);
          mbsc = jmxConnector.getMBeanServerConnection();

                    } catch (IOException e)
                         logger.error("Exception: Exception occurred while connectiong to server...");
                         throw e;
                    return mbsc;
               private String getDNToUndeploy(CompositeData[] compositeData, String compositeToBeUndeployed) throws Exception
               String dnString = null;      
          for (CompositeData tmpCData : compositeData)
               String tempDN = (String) tmpCData.get("DN");
               if ( tempDN.contains(compositeToBeUndeployed) )
                    dnString = tempDN;
               return dnString;