Skip to content

Commit f8a78eb

Browse files
Better positioning of beans in monitoring console
1 parent 1ed48e9 commit f8a78eb

File tree

4 files changed

+53
-89
lines changed

4 files changed

+53
-89
lines changed

java/src/main/java/com/genexus/internet/CustomPoolingHttpClientConnectionManager.java

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@
44
import org.apache.http.config.Registry;
55
import org.apache.http.conn.ConnectionPoolTimeoutException;
66
import org.apache.http.conn.ConnectionRequest;
7-
import org.apache.http.conn.ManagedHttpClientConnection;
87
import org.apache.http.conn.routing.HttpRoute;
98
import org.apache.http.conn.socket.ConnectionSocketFactory;
109
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
11-
import org.apache.http.pool.PoolEntry;
12-
import org.apache.http.pool.PoolEntryCallback;
1310

1411
import java.util.ArrayList;
1512
import java.util.HashSet;
@@ -43,9 +40,8 @@ public boolean cancel() {
4340
public HttpClientConnection get(long timeout, TimeUnit tunit) throws InterruptedException, ExecutionException, ConnectionPoolTimeoutException {
4441
HttpClientConnection connection = originalRequest.get(timeout, tunit);
4542

46-
if (connection != null && !connection.isOpen()) {
43+
if (connection != null && !connection.isOpen())
4744
notifyConnectionCreated(route);
48-
}
4945

5046
return connection;
5147
}
@@ -54,62 +50,49 @@ public HttpClientConnection get(long timeout, TimeUnit tunit) throws Interrupted
5450

5551
@Override
5652
public void closeExpiredConnections() {
57-
Set<HttpRoute> closedRoutes = new HashSet<>();
53+
Set<HttpRoute> beforeClosing = new HashSet<>();
54+
Set<HttpRoute> afterClosing = new HashSet<>();
5855

59-
// Enumerate over all connections and collect routes of the expired ones
60-
super.enumAvailable(new PoolEntryCallback<HttpRoute, ManagedHttpClientConnection>() {
61-
@Override
62-
public void process(PoolEntry<HttpRoute, ManagedHttpClientConnection> entry) {
63-
if (entry.isExpired(System.currentTimeMillis())) {
64-
closedRoutes.add(entry.getRoute());
65-
}
56+
super.enumAvailable(entry -> {
57+
if (entry.isExpired(System.currentTimeMillis())) {
58+
beforeClosing.add(entry.getRoute());
6659
}
6760
});
68-
69-
// Close the expired connections
7061
super.closeExpiredConnections();
62+
super.enumAvailable(entry -> afterClosing.add(entry.getRoute()));
63+
beforeClosing.removeAll(afterClosing);
7164

72-
// Notify for each closed connection
73-
for (HttpRoute route : closedRoutes) {
65+
for (HttpRoute route : beforeClosing)
7466
notifyConnectionDestroyed(route);
75-
}
7667
}
7768

7869
@Override
7970
public void closeIdleConnections(long idletime, TimeUnit tunit) {
80-
Set<HttpRoute> closedRoutes = new HashSet<>();
71+
Set<HttpRoute> beforeClosing = new HashSet<>();
72+
Set<HttpRoute> afterClosing = new HashSet<>();
8173
long idleTimeoutMillis = tunit.toMillis(idletime);
8274

83-
// Enumerate over all connections and collect routes of the idle ones
84-
super.enumAvailable(new PoolEntryCallback<HttpRoute, ManagedHttpClientConnection>() {
85-
@Override
86-
public void process(PoolEntry<HttpRoute, ManagedHttpClientConnection> entry) {
87-
if (entry.getUpdated() + idleTimeoutMillis < System.currentTimeMillis()) {
88-
closedRoutes.add(entry.getRoute());
89-
}
75+
super.enumAvailable(entry -> {
76+
if (entry.getUpdated() + idleTimeoutMillis < System.currentTimeMillis()) {
77+
beforeClosing.add(entry.getRoute());
9078
}
9179
});
92-
93-
// Close the idle connections
9480
super.closeIdleConnections(idletime, tunit);
81+
super.enumAvailable(entry -> afterClosing.add(entry.getRoute()));
82+
beforeClosing.removeAll(afterClosing);
9583

96-
// Notify for each closed connection
97-
for (HttpRoute route : closedRoutes) {
84+
for (HttpRoute route : beforeClosing)
9885
notifyConnectionDestroyed(route);
99-
}
10086
}
10187

102-
10388
private void notifyConnectionCreated(HttpRoute route) {
104-
for (IConnectionObserver observer : observers) {
89+
for (IConnectionObserver observer : observers)
10590
observer.onConnectionCreated(route);
106-
}
10791
}
10892

10993
private void notifyConnectionDestroyed(HttpRoute route) {
110-
for (IConnectionObserver observer : observers) {
94+
for (IConnectionObserver observer : observers)
11195
observer.onConnectionDestroyed(route);
112-
}
11396
}
11497
}
11598

java/src/main/java/com/genexus/internet/HttpClientJavaLib.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,9 @@
1111
import java.security.UnrecoverableKeyException;
1212
import java.security.cert.CertificateException;
1313
import java.util.*;
14-
import com.genexus.ModelContext;
15-
import com.genexus.management.HTTPConnectionJMX;
16-
import com.genexus.management.HTTPPoolJMX;
17-
import com.genexus.management.MBeanUtils;
18-
import com.genexus.util.IniFile;
19-
import com.genexus.Application;
14+
import java.net.URI;
15+
import javax.net.ssl.SSLContext;
2016
import org.apache.http.*;
21-
import com.genexus.CommonUtil;
22-
import com.genexus.specific.java.*;
2317
import org.apache.http.HttpResponse;
2418
import org.apache.http.client.config.CookieSpecs;
2519
import org.apache.http.conn.routing.HttpRoute;
@@ -55,9 +49,13 @@
5549
import org.apache.http.util.EntityUtils;
5650
import org.apache.logging.log4j.Logger;
5751
import com.genexus.webpanels.HttpContextWeb;
58-
import java.net.URI;
59-
60-
import javax.net.ssl.SSLContext;
52+
import com.genexus.ModelContext;
53+
import com.genexus.management.HTTPConnectionJMX;
54+
import com.genexus.management.HTTPPoolJMX;
55+
import com.genexus.util.IniFile;
56+
import com.genexus.Application;
57+
import com.genexus.CommonUtil;
58+
import com.genexus.specific.java.*;
6159

6260
public class HttpClientJavaLib extends GXHttpClient implements IConnectionObserver {
6361

java/src/main/java/com/genexus/management/HTTPConnectionJMX.java

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,35 @@ public class HTTPConnectionJMX implements HTTPConnectionJMXBean{
77

88
private static Logger log = org.apache.logging.log4j.LogManager.getLogger(HTTPConnectionJMX.class);
99

10-
HttpRoute connection;
10+
HttpRoute httpRoute;
1111

12-
public HTTPConnectionJMX(HttpRoute connection)
13-
{
14-
this.connection = connection;
12+
public HTTPConnectionJMX(HttpRoute httpRoute) {
13+
this.httpRoute = httpRoute;
1514
}
1615

17-
static public void CreateHTTPConnectionJMX(HttpRoute connection)
18-
{
19-
try
20-
{
16+
static public void CreateHTTPConnectionJMX(HttpRoute connection) {
17+
try {
2118
MBeanUtils.createMBean(connection);
2219
}
23-
catch(Exception e)
24-
{
25-
log.error("Cannot register HTTP connection MBean.", e);
20+
catch(Exception e) {
21+
log.error("Failed to register HTTP connection MBean.", e);
2622
}
2723
}
2824

29-
static public void DestroyHTTPConnectionJMX(HttpRoute connection)
30-
{
31-
try
32-
{
25+
static public void DestroyHTTPConnectionJMX(HttpRoute connection) {
26+
try {
3327
MBeanUtils.destroyMBean(connection);
3428
}
35-
catch(Exception e)
36-
{
37-
log.error("Cannot destroy connection MBean.", e);
29+
catch(Exception e) {
30+
log.error("Failed to destroy HTTP connection MBean.", e);
3831
}
3932
}
4033

41-
public int getPort()
42-
{
43-
return connection.getTargetHost().getPort();
34+
public int getPort() {
35+
return httpRoute.getTargetHost().getPort();
4436
}
4537

46-
public String getHost()
47-
{
48-
return connection.getTargetHost().getHostName();
38+
public String getHost() {
39+
return httpRoute.getTargetHost().getHostName();
4940
}
5041
}

java/src/main/java/com/genexus/management/MBeanUtils.java

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import com.genexus.db.driver.ConnectionPool;
1818
import com.genexus.db.driver.DataSource;
1919
import com.genexus.db.driver.GXConnection;
20-
import json.org.json.HTTP;
2120
import org.apache.http.conn.routing.HttpRoute;
2221
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
2322

@@ -134,22 +133,20 @@ public static void createMBean(ConnectionPool connectionPool)
134133
registerBean(mbean, "com.genexus.management:type=GeneXusApplicationServer.ApplicationName.DataStore.ConnectionPool,ApplicationName=" + connectionPool.getDataSource().getNamespace() + ",DataStore=" + connectionPool.getDataSource().name + ",name=R/W pool");
135134
}
136135

137-
public static void createMBean(PoolingHttpClientConnectionManager connectionPool)
138-
{
136+
public static void createMBean(PoolingHttpClientConnectionManager connectionPool) {
139137
MBeanServer mbs = getMBeanServer();
140138
if (mbs == null)
141139
return;
142140
HTTPPoolJMX mbean = new HTTPPoolJMX(connectionPool);
143-
registerBean(mbean, "com.genexus.management:type=GeneXusApplicationServer.ApplicationName.HTTPPool,ApplicationName=" + connectionPool.hashCode() + ",HttpPool=" + connectionPool.toString() + ",name=Http Connection pool");
141+
registerBean(mbean, "com.genexus.management:type=GeneXusApplicationServer.HTTPPool,ApplicationName=Http connection pool");
144142
}
145143

146-
public static void createMBean(HttpRoute httpRoute)
147-
{
144+
public static void createMBean(HttpRoute httpRoute) {
148145
MBeanServer mbs = getMBeanServer();
149146
if (mbs == null)
150147
return;
151148
HTTPConnectionJMX mbean = new HTTPConnectionJMX(httpRoute);
152-
registerBean(mbean, "com.genexus.management:type=GeneXusApplicationServer.ApplicationName.HTTPPool.HTTPConnection,ApplicationName=" + httpRoute.getTargetHost().getHostName() + ",Port=" + httpRoute.getTargetHost().getPort()+ ",name=http connection");
149+
registerBean(mbean, "com.genexus.management:type=GeneXusApplicationServer.HTTPPool.HTTPConnection,ApplicationName=" + httpRoute.getTargetHost().getHostName() + ",Port=" + httpRoute.getTargetHost().getPort() + ",name=http connection");
153150
}
154151

155152
public static void createMBean(GXConnection connection)
@@ -263,29 +260,24 @@ public static void destroyMBean(GXConnection connection)
263260
}
264261
}
265262

266-
public static void destroyMBean(HttpRoute httpRoute)
267-
{
263+
public static void destroyMBean(HttpRoute httpRoute) {
268264
MBeanServer mbs = getMBeanServer();
269265
if (mbs == null)
270266
return;
271267

272-
try
273-
{
274-
ObjectName name = new ObjectName("com.genexus.management:type=GeneXusApplicationServer.ApplicationName.HTTPPool.HTTPConnection,ApplicationName=" + httpRoute.getTargetHost().getHostName() + ",Port=" + httpRoute.getTargetHost().getPort() + ",name=http connection");
268+
try {
269+
ObjectName name = new ObjectName("com.genexus.management:type=GeneXusApplicationServer.HTTPPool.HTTPConnection,ApplicationName=" + httpRoute.getTargetHost().getHostName() + ",Port=" + httpRoute.getTargetHost().getPort() + ",name=http connection");
275270
registeredObjects.removeElement(name);
276271

277272
mbs.unregisterMBean(name);
278273
}
279-
catch(javax.management.MalformedObjectNameException e)
280-
{
274+
catch(javax.management.MalformedObjectNameException e) {
281275
System.out.println(e);
282276
}
283-
catch(javax.management.InstanceNotFoundException e)
284-
{
277+
catch(javax.management.InstanceNotFoundException e) {
285278
System.out.println(e);
286279
}
287-
catch(javax.management.MBeanRegistrationException e)
288-
{
280+
catch(javax.management.MBeanRegistrationException e) {
289281
System.out.println(e);
290282
}
291283
}

0 commit comments

Comments
 (0)