1 package cz.cuni.amis.pogamut.base.utils.logging.jmx;
2
3 import javax.management.AttributeNotFoundException;
4 import javax.management.MBeanException;
5 import javax.management.MBeanServer;
6 import javax.management.MBeanServerConnection;
7 import javax.management.ObjectName;
8 import javax.management.ReflectionException;
9
10 import cz.cuni.amis.introspection.jmx.DynamicProxy;
11 import cz.cuni.amis.pogamut.base.agent.IAgentId;
12 import cz.cuni.amis.pogamut.base.agent.exceptions.CantStartJMXException;
13 import cz.cuni.amis.pogamut.base.agent.exceptions.JMXAlreadyEnabledException;
14 import cz.cuni.amis.pogamut.base.utils.logging.AbstractAgentLogger;
15 import cz.cuni.amis.pogamut.base.utils.logging.AgentLogger;
16 import cz.cuni.amis.pogamut.base.utils.logging.IAgentLogger;
17 import cz.cuni.amis.pogamut.base.utils.logging.IJMXAgentLogger;
18 import cz.cuni.amis.pogamut.base.utils.logging.ILogCategories;
19 import cz.cuni.amis.utils.Lazy;
20 import cz.cuni.amis.utils.exception.PogamutException;
21
22
23
24
25
26
27
28
29
30 public class AgentLoggerJMXProxy extends AbstractAgentLogger {
31
32 Lazy<ILogCategories> logCategories = new Lazy<ILogCategories>() {
33 @Override
34 protected ILogCategories create() {
35 return new LogCategoriesJMXProxy(mbsc, parentName);
36 }
37 };
38 MBeanServerConnection mbsc = null;
39 ObjectName parentName = null;
40
41 DynamicProxy agentLoggerProxy;
42
43 public AgentLoggerJMXProxy(IAgentId agentName, MBeanServerConnection mbsc, ObjectName parentName) {
44 super(agentName);
45 this.mbsc = mbsc;
46 this.parentName = parentName;
47 ObjectName objectName = AgentLogger.getJMXAgentLoggerName(parentName);
48 this.agentLoggerProxy = new DynamicProxy(objectName, mbsc);
49 }
50 ILogCategories cats = null;
51
52 @Override
53 protected ILogCategories getLogCategories() {
54 return logCategories.getVal();
55 }
56
57 @Override
58 public void enableJMX(MBeanServer mBeanServer, ObjectName parent) throws JMXAlreadyEnabledException, CantStartJMXException {
59 throw new UnsupportedOperationException(
60 "This logger is already a proxy to some remote logger. Making two proxies isn't the best practice, however it can be done, "
61 + "just implement this method based on DefaultAgentLogger's implementation of JMX.");
62 }
63
64
65
66
67
68
69 @Override
70 public String getNetworkLoggerHost() {
71 try {
72 return (String) agentLoggerProxy.getAttribute("NetworkLoggerHost");
73 } catch (Exception e) {
74
75 throw new PogamutException("Could not invoke agentLoggerProxy.getAttribute(\"NetworkLoggerHost\").", e, this);
76 }
77 }
78
79
80
81
82
83
84 @Override
85 public Integer getNetworkLoggerPort() {
86 try {
87 return (Integer) agentLoggerProxy.getAttribute("NetworkLoggerPort");
88 } catch (Exception e) {
89
90 throw new PogamutException("Could not invoke agentLoggerProxy.getAttribute(\"NetworkLoggerPort\").", e, this);
91 }
92 }
93
94
95
96
97
98
99 @Override
100 public synchronized void addDefaultNetworkHandler() {
101 try {
102 agentLoggerProxy.invoke("addDefaultNetworkHandler", null, null);
103 } catch (Exception e) {
104
105 throw new PogamutException("Could not invoke agentLoggerProxy.invoke(\"addDefaultNetworkHandler\").", e, this);
106 }
107 }
108
109
110
111
112
113
114 public synchronized void removeDefaultNetworkHandler() {
115 try {
116 agentLoggerProxy.invoke("removeDefaultNetworkHandler", null, null);
117 } catch (Exception e) {
118
119 throw new PogamutException("Could not invoke agentLoggerProxy.invoke(\"removeDefaultNetworkHandler\").", e, this);
120 }
121 }
122
123
124
125
126
127
128 @Override
129 public boolean isDefaultNetworkHandler() {
130 try {
131 return (Boolean) agentLoggerProxy.getAttribute("DefaultNetworkHandler");
132 } catch (Exception e) {
133
134 throw new PogamutException("Could not invoke agentLoggerProxy.getAttribute(\"DefaultNetworkHandler\").", e, this);
135 }
136 }
137
138 }