an acid test for method sanity

So, I just looked at a method call in an online tutorial and found this fairly simple code.

// Initialize the hasher without portable hashes (this is more secure)
$hasher = new PasswordHash(8, false);

What’s wrong with this? Not much maybe. Or maybe a lot. I have an acid test for method signatures: can I determine what the arguments are from the method name and parameter type(s)?

First things first, the first parameter ‘8’ may be given a name in production code, as might the ‘false’. That’s ok – I’m not interested in the quality of the calling code, just the signature of the method.

The crux of the problem – what is this method / constructor asking for? I read aloud the method with parameter types in place and try to determine the purpose of them. In this case I read out the following:

new Password Hash int boolean

What does this mean? No idea.

At first glance this seems like an ‘out there’ naive view of code, along the lines of ‘never use the String class’ but I feel this is a fundamental part of writing better code. Here I would prefer to create a ‘default hasher’ using a factory method maybe, assuming that I need an int and boolean to create a Password Hash. Now let me override the int and boolean with appropriate setters, e.g.

$hasher->setFluidOunce(8);
$hasher->setFrothy(false);

And there you have it, my acid test for method sanity.

jolokia queue monitoring html script (uses jquery)

Just alter the location of jquery to suit:

 

<!doctype html>
<html>
<head>
<script type=”text/javascript” src=”jquery-1.11.1.js“></script>
<style type=”text/css”>
td { border: 1px solid #666; padding:5px; }
table { border-collapse:collapse}
</style>
</head>
<body onload=”javascript:fetch()”>
<h1>Monitoring Queues on Admin Server</h1>
<script type=”text/javascript”>
var index_url = “http://localhost:7001/jolokia-war-1.2.1/read/com.bea:JMSServerRuntime=jms-server-1,Name=jms-module-1!!indexQueue,ServerRuntime=AdminServer,Type=JMSDestinationRuntime/MessagesCurrentCount,MessagesHighCount,MessagesReceivedCount”;
var luc_index_url = “http://localhost:7001/jolokia-war-1.2.1/read/com.bea:JMSServerRuntime=jms-server-1,Name=jms-module-1!!luceneIndexQueue,ServerRuntime=AdminServer,Type=JMSDestinationRuntime/MessagesCurrentCount,MessagesHighCount,MessagesReceivedCount”;
var mine_url = “http://localhost:7001/jolokia-war-1.2.1/read/com.bea:JMSServerRuntime=jms-server-1,Name=jms-module-1!!mineQueue,ServerRuntime=AdminServer,Type=JMSDestinationRuntime/MessagesCurrentCount,MessagesHighCount,MessagesReceivedCount”;

function updateDiv(url, divName) {
$.getJSON( url,
function( data ) {
var mhc = data.value.MessagesCurrentCount;
$(divName).html(mhc);
}
);
}

function fetch() {
updateDiv(index_url, “#indexQueueCount”);
updateDiv(luc_index_url,”#luceneQueueCount”);
updateDiv(mine_url, “#mineQueueCount”);
$(“#lastDate”).html(new Date());
setTimeout(fetch, 2000)
}
</script>
<table>
<tr>
<td>Index Queue Current Message Count</td>
<td id=”indexQueueCount”></td>
</tr>
<tr>
<td>Lucene Queue Current Message Count</td>
<td id=”luceneQueueCount”></td>
</tr>
<tr>
<td>Link Mining Queue Current Message Count</td>
<td id=”mineQueueCount”></td>
</tr>
</table>
<p>
Last fetched: <span id=”lastDate”></span>
</p>
</body>
</html>

WebLogic 12c JMS queue monitoring with jolokia

Credit where it is due:
This and other helpful WebLogic administration / monitoring tips can be found in
the great WebLogic Server 12c Distinctive Recipes book by Frank Munz.

jolokia
Jolokia is a great open source tool that provides, amongst other things, a RESTful interface to MBeans in JEE Containers. My specific need is WebLogic queue monitoring and jolokia is great for this. I have the following:

JMS Server: jms-server-1
JMS Module: jms-module-1
WebLogic Server: AdminServer (not recommended for production)
JMS Queue: indexQueue

By installing jolokia as a war (dropping the war file in autodeploy directory if running in development mode) I can get information about my queue by navigating to the following url:

http://localhost:7001/jolokia-war-1.2.1/read/com.bea:JMSServerRuntime=jms-server-1,Name=jms-module-1!!indexQueue,ServerRuntime=AdminServer,Type=JMSDestinationRuntime/MessagesCurrentCount,MessagesHighCount,MessagesReceivedCount

Sample JSON Output:

{
   "timestamp":1399478460,
   "status":200,
   "request":{
      "mbean":"com.bea:JMSServerRuntime=jms-server-1,Name=jms-module-1!indexQueue,ServerRuntime=AdminServer,Type=JMSDestinationRuntime",
      "attribute":[
         "MessagesCurrentCount",
         "MessagesHighCount",
         "MessagesReceivedCount"
      ],
      "type":"read"
   },
   "value":{
      "MessagesHighCount":0,
      "MessagesCurrentCount":0,
      "MessagesReceivedCount":0
   }
}