歡迎您光臨本站 註冊首頁

5種方法訪問GlassFish資源

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

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」 - 「屬性」.


可以看到我們所關心的連接池mypool的信息.屬性idle-timeout-in-seconds的值為777.修改777為888.
在回到管理控制台或命令行工具asadmin同樣可以看到剛才在JConsole所作的修改已經生效.
以上說明三種工具對GlassFish資源的修改是等效的.

接下來通過編程的方式來訪問資料庫連接池mypool.


方法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;    


/** * 此類為演示使用AMX方式訪問伺服器端的MBean的演示代碼. */
運行結果如下:
Using DCP, jdbc pool idle timeout: 888
注意,採用AMX的方式時,在項目的庫路徑上要加入appserv-ext.jar和javaee.jar.


[火星人 ] 5種方法訪問GlassFish資源已經有674次圍觀

http://coctec.com/docs/java/show-post-60484.html