Professional Documents
Culture Documents
Creating Utilities To Manipulate Users in #Weblogic Using #JMX and #Mbeans
Creating Utilities To Manipulate Users in #Weblogic Using #JMX and #Mbeans
co m
THE DEFINITION
JMX(Java Management Extension) is a technology that represents a universal, open technology f or
management, and monitoring applications, system objects, devices (e. g. printers) and service oriented
networks. T hose resources are represented by objects called MBeans (f or Managed Beans)
So Enough with the def initions, lets get to work.
st at ic {
t ry {
St ring host = "127.0.0.1";
St ring port = "7101";
St ring username = "weblogic";
St ring password = "weblogic1";
Hasht able h = new Hasht able();
JMXServiceURL serviceURL;
serviceURL =
new JMXServiceURL(DEFAULT_PROTOCOL, host , Int eger.valueOf(port ).int Value(),
"/jndi/weblogic.management .mbeanservers.domainrunt ime");
h.put ("java.naming.securit y.principal", username);
h.put ("java.naming.securit y.credent ials", password);
h.put ("jmx.remot e.prot ocol.provider.pkgs",
"weblogic.management .remot e");
//Creat ing a JMXConnect or t o connect t o JMX
JMXConnect or connect or =
JMXConnect orFact ory.connect (serviceURL, h);
connect ion = connect or.get MBeanServerConnect ion();
/****
We Get Object s by creat ing Object Name wit h it 's Qualied name.
The const ruct or t ake a St ring of t he full Qualied name of t he MBean
We t hen use connect ion t o get At t ribut e out of t his Object Name but specifying a St ring of
t his At t ribut e
*****/
Object Name congurat ionMBeans=
new Object Name(DOMAIN_MBEAN_NAME);
Object Name domain =
(Object Name)connect ion.get At t ribut e(congurat ionMBeans, "DomainCongurat ion");
Object Name securit y =
(Object Name)connect ion.get At t ribut e(domain, "Securit yCongurat ion");
Object Name realm =
(Object Name)connect ion.get At t ribut e(securit y, "Default Realm");
aut hent icat ionProviders =
(Object Name[])connect ion.get At t ribut e(realm,
"Aut hent icat ionProviders");
for (int i = 0; i < aut hent icat ionProviders.lengt h; i++) {
St ring name =
(St ring)connect ion.get At t ribut e(aut hent icat ionProviders[i],
"Name");
if (name.equals(aut hent icat orName))
default Aut hent icat or = aut hent icat ionProviders[i];
}
} cat ch (Except ion e) {
t hrow new Runt imeExcept ion(e);
}
WOHOO youve done a great step, you now have a ref erence to the def aultAuthenticator MBean, now you
can make operations on users and Groups
It Takes Object Name, St ring Operat ionName, Object [] Paramet ers, and St ring[] Paramet ers
Denit ion
**/
connect ion.invoke(default Aut hent icat or, "creat eUser",
new Object [] { username, psw, desc },
new St ring[] { "java.lang.St ring",
"java.lang.St ring",
"java.lang.St ring" });
/** As of connect ion.get At t ribut e you can use connect ion.invoke t o invoke an act ion
It Takes Object Name, St ring Operat ionName, Object [] Paramet ers, and St ring[] Paramet ers
Denit ion, It ret urns an Object we cast it t o Boolean, you can know all about funct ion from
MBeans Reference
**/
public st at ic boolean isUserExist s(St ring current User) t hrows Runt imeExcept ion {
t ry {
boolean userExist s =
((Boolean)connect ion.invoke(default Aut hent icat or, "userExist s",
new Object [] { current User },
new St ring[] { "java.lang.St ring" })).booleanValue();
ret urn userExist s;
} cat ch (Except ion ex) {
t hrow new Runt imeExcept ion(ex);
}
}
public st at ic boolean isGroupExist s(St ring current Group) t hrows Runt imeExcept ion {
t ry {
boolean gourpExist s =
((Boolean)connect ion.invoke(default Aut hent icat or,
"groupExist s",
new Object [] { current Group },
new St ring[] { "java.lang.St ring" })).booleanValue();
/** This one is t ricky, You rst obt ain a St ring cursor of t he It erat or of Users, t hen you check if
It have current , while t rue we invoke anot her funct ion called "get Current Name" which ret urns
t he name
of t he user, t hen I call advance funct ion for t he cursor t o move forward, and invoke haveCurrent
again
and assign it t o t he same boolean I ent ered t he while wit h (In order t o get out of it !)
**/
public st at ic List get List OfUsers() t hrows Runt imeExcept ion {
t ry {
List allUsers = new ArrayList ();
St ring cursor =
(St ring)connect ion.invoke(default Aut hent icat or, "list Users",
new Object [] { "*",
Int eger.valueOf(9999) },
new St ring[] { "java.lang.St ring",
"java.lang.Int eger" });
boolean haveCurrent =
((Boolean)connect ion.invoke(default Aut hent icat or,
"haveCurrent ",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" })).booleanValue();
while (haveCurrent ) {
St ring current Name =
(St ring)connect ion.invoke(default Aut hent icat or,
"get Current Name",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" });
allUsers.add(current Name);
connect ion.invoke(default Aut hent icat or, "advance",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" });
haveCurrent =
((Boolean)connect ion.invoke(default Aut hent icat or, "haveCurrent ",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" })).booleanValue();
public st at ic List get UserGroups(St ring username) t hrows Runt imeExcept ion {
t ry {
List allUserGroups = new ArrayList ();
St ring cursor =
(St ring)connect ion.invoke(default Aut hent icat or, "list MemberGroups",
new Object [] { username },
new St ring[] { "java.lang.St ring"});
boolean haveCurrent =
((Boolean)connect ion.invoke(default Aut hent icat or,
"haveCurrent ",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" })).booleanValue();
while (haveCurrent ) {
St ring current Name =
(St ring)connect ion.invoke(default Aut hent icat or,
"get Current Name",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" });
allUserGroups.add(current Name);
connect ion.invoke(default Aut hent icat or, "advance",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" });
haveCurrent =
((Boolean)connect ion.invoke(default Aut hent icat or, "haveCurrent ",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" })).booleanValue();
}
public st at ic List get GroupMembers(St ring groupName) t hrows Runt imeExcept ion {
t ry {
List allGroupMembers = new ArrayList ();
St ring cursor =
(St ring)connect ion.invoke(default Aut hent icat or, "list GroupMembers",
new Object [] { groupName, "*", new java.lang.Int eger(0) },
new St ring [] { "java.lang.St ring", "java.lang.St ring", "java.lang.Int eger" });
boolean haveCurrent =
((Boolean)connect ion.invoke(default Aut hent icat or,
"haveCurrent ",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" })).booleanValue();
while (haveCurrent ) {
St ring current Name =
(St ring)connect ion.invoke(default Aut hent icat or,
"get Current Name",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" });
allGroupMembers.add(current Name);
connect ion.invoke(default Aut hent icat or, "advance",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" });
haveCurrent =
((Boolean)connect ion.invoke(default Aut hent icat or, "haveCurrent ",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" })).booleanValue();
haveCurrent =
((Boolean)connect ion.invoke(default Aut hent icat or, "haveCurrent ",
new Object [] { cursor },
new St ring[] { "java.lang.St ring" })).booleanValue();