001 /* 002 @license.text@ 003 */ 004 package biz.hammurapi.metrics.j2ee; 005 006 import java.rmi.RemoteException; 007 import java.util.Properties; 008 009 import javax.naming.InitialContext; 010 import javax.rmi.PortableRemoteObject; 011 012 import org.w3c.dom.Element; 013 import org.w3c.dom.Node; 014 import org.w3c.dom.NodeList; 015 016 import biz.hammurapi.config.Component; 017 import biz.hammurapi.config.ConfigurationException; 018 import biz.hammurapi.config.Context; 019 import biz.hammurapi.config.DomConfigurable; 020 import biz.hammurapi.metrics.RemoteSliceConsumer; 021 import biz.hammurapi.metrics.Slice; 022 import biz.hammurapi.metrics.SliceConsumer; 023 import biz.hammurapi.xml.dom.AbstractDomObject; 024 import biz.hammurapi.xml.dom.DOMUtils; 025 026 027 /** 028 * @author Pavel Vlasov 029 */ 030 public class JndiSliceConsumer implements SliceConsumer, DomConfigurable, Component { 031 032 private RemoteSliceConsumer remoteConsumer; 033 private String root; 034 035 public void start() throws ConfigurationException { 036 try { 037 Properties ctxProps=new Properties(); 038 NodeList nl = DOMUtils.selectNodeList(configElement, "environment-property"); 039 for (int i=0, l=nl.getLength(); i<l; ++i) { 040 Element e = (Element) nl.item(i); 041 ctxProps.setProperty(e.getAttribute("name"), DOMUtils.getNonBlankElementText(e)); 042 } 043 044 InitialContext jndiContext = new InitialContext(ctxProps); 045 046 remoteConsumer=(RemoteSliceConsumer) PortableRemoteObject.narrow(jndiContext.lookup(AbstractDomObject.getElementText(configElement, "slice-consumer")), RemoteSliceConsumer.class); 047 root=AbstractDomObject.getElementText(configElement, "root-category"); 048 } catch (Exception e) { 049 throw new ConfigurationException(e); 050 } 051 } 052 053 public void stop() throws ConfigurationException { 054 } 055 056 private Element configElement; 057 058 public void configure(Node configNode, Context context) throws ConfigurationException { 059 configElement=(Element) configNode; 060 } 061 062 public boolean consumeSlice(String category, Slice slice) { 063 try { 064 return remoteConsumer.consumeSlice(root+"."+category, slice); 065 } catch (RemoteException e) { 066 return false; 067 } 068 } 069 070 public void setOwner(Object owner) { 071 // Ignore 072 } 073 }