Hi Nirmal,

Thanks - this was helpful,
actually the ServiceCreatedMessageProcessor.process method does seem to  set 
the properties when it creates the Service class, not sure if it was on purpose 
or a bug.
Another thing I noticed is that after unsubscribing and undeploying a cartridge 
the complete topology event still shows the unsubscribed / undeployed 
cartridges ( although not the cli tool / list-cartridges), even after 
restarting all stratos processes, seems like the db still references it ?

Thanks

Martin

ServiceCreatedMessageProcessor

   public boolean process(String type, String message, Object object) {
                ...
Service service = new Service(event.getServiceName(), event.getServiceType());
                service.addPorts(event.getPorts());
                topology.addService(service);
                if (log.isInfoEnabled()) {
                log.info(String.format("Service created: [service] %s", 
event.getServiceName()));
                }
                notifyEventListeners(event);
                return true;
       ...
}

From: Nirmal Fernando [mailto:[email protected]]
Sent: Monday, March 17, 2014 9:10 PM
To: [email protected]
Subject: Re: Question: Setting a property on a service instance (adding a 
property to a cartridge)

Hi Martin,

On Mon, Mar 17, 2014 at 7:30 PM, Martin Eppel (meppel) 
<[email protected]<mailto:[email protected]>> wrote:
Hi,

I am experimenting with some stratos code to add a property to a cartridge (or 
service) which I can later retrieve from a service instance.

Service.java (in org.apache.stratos.messaging.domain.topology) has 
getter/setter for properties but I have a hard time to figure out the flow / 
code where properties are actually retrieved from the cartridge definition 
(json) and set at the service instance (e.g. when subscribing to a cartridge).

The idea is to add a new property to a cartridge json definition  (see example 
below), assign it to a service instance and retrieve it in the context of 
autoscaler rules. Is there a better way to define properties at the service 
level ?

Cartridge's properties should be available under 
org.apache.stratos.messaging.domain.topology.Service's properties. If not it's 
a bug :-)

Also, another question is: I can see in the code that there is 
ServiceCreatedEvent which I would assume would be generated and handled when 
subscribing a cartridge (= service ?) but it seems that no such event is being 
processed ? (- however I do see the ClusterCreatedEvent being created and 
processed). When is ServiceCreatedEvent generated ?

ServiceCreatedEvent generated when you deploy a new Cartridge.

org.apache.stratos.messaging.event.topology.ServiceCreatedEvent.ServiceCreatedEvent(String,
 ServiceType)
 
|_org.apache.stratos.cloud.controller.topology.TopologyEventPublisher.sendServiceCreateEvent(List<Cartridge>)
    
|_org.apache.stratos.cloud.controller.topology.TopologyBuilder.handleServiceCreated(List<Cartridge>)
      
|_org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl.deployCartridgeDefinition(CartridgeConfig)

Any pointers are highly appreciated

Thanks

Martin


....
"property": [
            {
                "name": "dependencies",
                "value": "service_name"
            }
...
]



--
Best Regards,
Nirmal

Nirmal Fernando.
PPMC Member & Committer of Apache Stratos,
Senior Software Engineer, WSO2 Inc.

Blog: http://nirmalfdo.blogspot.com/

Reply via email to