JMX是GlassFish管理架構的基礎, GlassFish的設計和實現都遵循了JMX規範,因此也完全支持JMX.
這種支持體現在它的命令行管理工具asadmin和管理控制台的功能上,體現在第三方管理工具比如JConsole的對其訪問的支持上,也體現在通過標準的或GlassFish特有的編程介面AMX對其資源的訪問方式上.下面通過實例,來看看GlassFish是如何支持這幾種方式對其資源進行訪問的.
方法1,通過管理控制台
首先,先通過管理控制台來創建一個資料庫連接池mypool.在瀏覽器的輸入管理控制台地址:localhost:4848.採用預設的用戶名「admin」及其密碼「adminadmin」登錄.成功登錄后,在左邊的樹型菜單中,展開「資源」-「JDBC」-「連接池」.
在主面板中,點擊「新建」.在面板「新建 JDBC 連接池(步驟 1,共 2 步)」中,輸入「名稱」為mypool,「資源類型」選為「javax.sql.DataSource」,「資料庫供應商」選為「JavaDB」.在接下來的「新建 JDBC 連接池(步驟 2,共 2 步)」中,可以看到資料庫連接池的各項預設設置.將在「池設置」一欄中的「空閑超時」值由預設的300改為777. 點擊「完成」.至此,我們通過管理控制台完成了對資料庫連接池mypook的創建,並修改了其空閑超時的值.
方法2,通過命令行工具asadmin
接下來,我們通過命令行的asadmin來查看這一資源.
asadmin list server.resource*
運行結果如下:
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ server.resource-ref.jdbc/__CallFlowPool server.resource-ref.jdbc/__TimerPool server.resource-ref.jdbc/__default server.resources server.resources.jdbc -connection-pool.DerbyPool server.resources.jdbc-connection-pool.__CallFlowPool server.resources.jdbc-connection-pool.__TimerPool server.resources.jdbc-connection-pool.mypool server.resources.jdbc-resource.jdbc/__CallFlowPool server.resources.jdbc-resource.jdbc/__TimerPool server.resources.jdbc-resource.jdbc/__default
這裡列出的MBean是用GlassFish自己的DottedName來標識的.接著通過asadmin的子命令get來查看對象mypool的屬性:
asadmin get server.resources.jdbc-connection-pool.mypool.*
或者進一步查看空閑超時(idle-timeout-in-seconds)的屬性值.
asadmin get server.resources.jdbc-connection-pool.mypool.idle-timeout-in-seconds
結果如下:
server.resources.jdbc-connection-pool.mypool.idle-timeout-in-seconds = 777
至此,我們完成了使用命令行的管理工具asadmin對mypool的訪問.這裡asadmin通過GlassFish擴展的Dotted Name命名方式來訪問MBean的.Dotted Name是GlassFish命令行工具asadmin定義的一套約定.在這套約定的支持下,asadmin的三個子命令(list、set和get )可以通過一個由「.」分隔的字串定址到GlassFish中的MBean.
方法3,通過第三方工具JConsole
接下來,我們要通過JConsole來訪問對象mypool.
在JConsole的登錄面板中,選擇遠處進程:localhost:8686(8686是GlassFish預設的管理埠),用戶名同樣為admin,密碼adminadmin.登錄進來后所看到的是關於GlassFish應用伺服器運行時的信息,點擊「MBean」.展開樹型結構「com.sun.appserv」 - 「jdbc-connection-pool」 - 「my pool」 - 「config」 - 「屬性」.
方法4,通過標準的JMX編程方式
標準的JMX方式的代碼如下:(以下為演示代碼.為突出重點,未作異常處理.)
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ import javax.management.*; import javax.management.remote.*; public class JMX_demo { public JMX_demo() throws Exception { //創建JMX 的URL JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:8686/jmxrmi"); java.util.Map env = new java.util.Hashtable(); //預設用戶名和其口令 String[] creds = { "admin","adminadmin"}; env.put(JMXConnector.CREDENTIALS,creds); //建立連接 JMXConnector connector = JMXConnectorFactory.connect(url,env); MBeanServerConnection mbsc = connector.getMBeanServerConnection(); //要訪問的MBean的Object Name ObjectName mbeanName = new ObjectName("com.sun.appserv:type=jdbc-connection-pool,name=mypool,category=config"); //所要訪問的屬性idle-timeout-in-seconds System.out.println("Using JMX, jdbc pool idle timeout:" mbsc.getAttribute(mbeanName,"idle-timeout-in-seconds")); } public static void main( final String[] args ) throws Exception{ new JMX_demo(); } }
運行結果如下: Using JMX, jdbc pool idle timeout:888
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ public class AMX_demo { public AMX_demo() throws Exception { //Domain Admin Server的機器名或IP地址 final String host = "localhost"; //JMX管理埠,預設8686. final int port =8686; //管理員名 final String user = "admin"; // 管理員密碼 final String password = "adminadmin"; TLSParams tlsParams=null; //連接到JMX server AppserverConnectionSource conn = new AppserverConnectionSource( AppserverConnectionSource.PROTOCOL_RMI, host, port, user, password, tlsParams, null); conn.getJMXConnector( true ); //DomainRoot和JDBCConnectionPoolConfig就是所說的DCP組件 DomainRoot mDomainRoot = conn.getDomainRoot(); //獲取JDBCConnectionPool的列表 Map pools = mDomainRoot.getDomainConfig().getJDBCConnectionPoolConfigMap(); JDBCConnectionPoolConfig mypool = (JDBCConnectionPoolConfig)pools.get("mypool"); System.out.println("Using DCP, jdbc pool idle timeout: " mypool.getIdleTimeoutInSeconds()); } public static void main( final String[] args ) throws Exception{ new AMX_demo(); } }
方法5,通過AMX編程方式
AMX方式的代碼如下:
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ import com.sun.appserv.management.DomainRoot; import com.sun.appserv.management.client.AppserverConnectionSource; import com.sun.appserv.management.client.TLSParams; import com.sun.appserv.management.util.misc.ExceptionUtil; import com.sun.appserv.management.config.*; import java.net.ConnectException; import java.util.Map;
[火星人 ] 5種方法訪問GlassFish資源已經有674次圍觀