<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hengheng123456789

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks

    ???這幾天實現(xiàn)了一個向遠(yuǎn)程Jboss服務(wù)器中部署文件的程序,是采用Jboss 的 JMX 遠(yuǎn)程調(diào)用方法來實現(xiàn)的,方法比較簡單,略微修改就可以把文件傳送到遠(yuǎn)程啟動了Jboss服務(wù)器的機(jī)器上,希望與大家分享,此處貼上了全部實例代碼,配置好后即可運行。

    ???實現(xiàn)步驟如下:

    1、下載安裝Jboss服務(wù)器

    2、新建立java項目,引入jboss安裝目錄 server\default\lib 中的 jboss.jar 和 jmx-adaptor-plugin.jar 包到classpath中

    3、建立 RMIAdaptorHelper.java 類,用于處理遠(yuǎn)程調(diào)用,代碼如下:

    package com.sample.jmxagent.jboss;

    import java.io.Serializable;
    import java.util.Properties;

    import javax.management.ObjectName;
    import javax.naming.CommunicationException;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;

    import org.jboss.jmx.adaptor.rmi.RMIAdaptor;

    public class RMIAdaptorHelper
    {
    ?private String??_rmiHost?= "127.0.0.1";
    ?private int???_rmiPort?= 1099;
    ?private int???_timeout?= 2000;??// ms
    ?private RMIAdaptor?_server;

    ?public RMIAdaptorHelper(String rmiHost, int rmiPort, int timeout)
    ???throws CommunicationException, NamingException
    ?{
    ??this._rmiHost = rmiHost;
    ??this._rmiPort = rmiPort;
    ??this._timeout = timeout;
    ?}

    ?/**
    ? * 遠(yuǎn)程調(diào)用 MBEAN
    ? */
    ?public Object invoke(RmiInvokeObject rmido) throws Exception
    ?{
    ??ObjectName name = new ObjectName(rmido.getJndiname());
    ??return _server.invoke(name, rmido.getMethodname(), rmido
    ????.getMethodArgs(), rmido.getMethodArgsType());
    ?}

    ?/**
    ? * 連接 Jboss rmi 服務(wù)器
    ? */
    ?public void connect() throws NamingException, CommunicationException
    ?{
    ??Properties prop = System.getProperties();
    ??prop.put(Context.INITIAL_CONTEXT_FACTORY,
    ????"org.jnp.interfaces.NamingContextFactory");
    ??prop.put(Context.URL_PKG_PREFIXES,
    ????"org.jboss.naming:org.jnp.interfaces");
    ??prop.put(Context.PROVIDER_URL, "jnp://" + _rmiHost + ":" + _rmiPort);

    ??prop.put("jnp.discoveryTimeout", String.valueOf(_timeout));

    ??InitialContext ic = new InitialContext(prop);
    ??if (_server != null)
    ??{
    ???System.out.println("RMIAdaptorHelper not null");
    ???_server = null;
    ??}
    ??Object o = ic.lookup("jmx/rmi/RMIAdaptor");
    ??_server = (RMIAdaptor) o;

    ?}

    ?/**
    ? * 遠(yuǎn)程調(diào)用的對象類
    ? */
    ?public class RmiInvokeObject implements Serializable
    ?{
    ??private String??jndiname;
    ??private String??methodname;
    ??private Object[]?methodArgs;
    ??private String[]?methodArgsType;

    ??public String getJndiname()
    ??{
    ???return jndiname;
    ??}

    ??public void setJndiname(String mbeanName)
    ??{
    ???this.jndiname = mbeanName;
    ??}

    ??public Object[] getMethodArgs()
    ??{
    ???return methodArgs;
    ??}

    ??public void setMethodArgs(Object[] methodArgs)
    ??{
    ???this.methodArgs = methodArgs;
    ??}

    ??public String[] getMethodArgsType()
    ??{
    ???return methodArgsType;
    ??}

    ??public void setMethodArgsType(String[] methodArgsType)
    ??{
    ???this.methodArgsType = methodArgsType;
    ??}

    ??public String getMethodname()
    ??{
    ???return methodname;
    ??}

    ??public void setMethodname(String methodname)
    ??{
    ???this.methodname = methodname;
    ??}
    ?}
    }

    4、建立 FileObject.java 類,用于存儲所要傳輸?shù)奈募?nèi)容,代碼如下:

    package com.sample.upload.mbean;

    import java.io.Serializable;

    public class FileObject implements Serializable
    {
    ?public byte[]?fileContent;
    }

    5、建立 FileUploadMBean.java 接口,用于 Jboss 調(diào)用,代碼如下:
    package com.sample.upload.mbean;

    public interface FileUploadMBean
    {
    ?public boolean uploadFile(String fileName, FileObject fo) throws Exception;
    }


    6、建立 FileUpload.java 類,用于實現(xiàn)FileUploadMBean 接口,代碼如下:

    package com.sample.upload.mbean;

    import java.io.File;
    import java.io.FileOutputStream;
    import java.net.URI;

    public class FileUpload implements FileUploadMBean
    {
    ??? public static final String JBOSS_SERVER_BASE_URL = "jboss.server.base.url";
    ??? public static final String JBOSS_SERVER_NAME = "jboss.server.name";
    ??? public static final String JBOSS_SERVER_PATH = System.getProperty(JBOSS_SERVER_BASE_URL)+ System.getProperty(JBOSS_SERVER_NAME);
    ??? public static final String NODE_ADAPTOR_PATH = JBOSS_SERVER_PATH + "/";
    ???
    ?private FileOutputStream?fos?= null;
    ?private File????f?= null;

    ?public boolean uploadFile(String fileName, FileObject fo) throws Exception
    ?{
    ??boolean returnValue = false;
    ??try
    ??{
    ???// 在 Jboss 的 server\default 目錄下新建立文件
    ???f = new File(new URI( NODE_ADAPTOR_PATH + fileName));
    ???f.createNewFile();
    ???fos = new FileOutputStream(f);
    ???fos.write(fo.fileContent);
    ???returnValue = true;
    ??}
    ??catch (Exception ex)
    ??{
    ???ex.printStackTrace();
    ???throw ex;
    ??}
    ??finally
    ??{
    ???if (fos != null)
    ???{
    ????try
    ????{
    ?????fos.close();
    ????}
    ????catch (Exception ee)
    ????{
    ?????ee.printStackTrace();
    ????}
    ???}
    ??}
    ??return returnValue;
    ?}
    }

    7、建立 TestFileUpload.java 類,用于測試文件上傳,代碼如下:

    package com.sample.upload.test;

    import java.io.File;
    import java.io.FileInputStream;

    import com.sample.jmxagent.jboss.RMIAdaptorHelper;
    import com.sample.upload.mbean.FileObject;

    public class TestFileUpload
    {
    ?private static RMIAdaptorHelper?rah;

    ?/**
    ? * 向 Jboss 上傳指定目錄的文件
    ? */
    ?public static void uploadFile(String fileName) throws Exception
    ?{
    ??File f = new File(fileName);
    ??byte[] b = new byte[(int) f.length()];
    ??FileInputStream fis = new FileInputStream(f);
    ??try
    ??{
    ???fis.read(b);
    ???FileObject fo = new FileObject();
    ???fo.fileContent = b;

    ???RMIAdaptorHelper.RmiInvokeObject rmido = rah.new RmiInvokeObject();
    ???rmido.setJndiname("com.sample.remotedeploy.mbean.control:service=FileUpload");
    ???rmido.setMethodname("uploadFile");
    ???rmido.setMethodArgsType(new String[]{"java.lang.String",
    ?????"com.sample.upload.mbean.FileObject"});
    ???rmido.setMethodArgs(new Object[]{f.getName(), fo});
    ???rah.invoke(rmido);
    ??}
    ??catch (Exception ex)
    ??{
    ???ex.printStackTrace();
    ??}
    ??finally
    ??{
    ???if (fis != null)
    ???{
    ????try
    ????{
    ?????fis.close();
    ????}
    ????catch (Exception ee)
    ????{
    ?????ee.printStackTrace();
    ????}
    ???}
    ??}
    ?}

    ?public static void main(String[] args)
    ?{
    ??try
    ??{
    ???rah = new RMIAdaptorHelper("127.0.0.1", 1099, 5000);
    ???// 連接 Jboss rmi 服務(wù)器
    ???rah.connect();
    ???// 向 Jboss 上傳指定目錄的文件
    ???uploadFile(args[0]);
    ??}
    ??catch (Exception e)
    ??{
    ???e.printStackTrace();
    ??}
    ??System.exit(0);
    ?}
    }

    8、在Jboss的安裝目錄server\default\deploy下建立 com.sample.sar\META-INF目錄,并在其下建立兩個文件jboss-service.xml 和 MANIFEST.MF ,用于把方法部署到Jboss中,jboss-service.xml 代碼如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <server>
    ?<mbean
    ??code="com.sample.upload.mbean.FileUpload"
    ??name="com.sample.remotedeploy.mbean.control:service=FileUpload">
    ?
    ??<depends>jboss.system:service=Logging,type=Log4jService</depends>

    ??<!-- jboss.rmi -->
    ??<depends>jboss.rmi:type=RMIClassLoader</depends>

    ??<!-- jboss jmx -->
    ??<depends>jboss.jmx:name=Invoker,type=adaptor</depends>
    ??<depends>jboss.jmx:name=Invoker,protocol=jrmp,service=proxyFactory,type=adaptor</depends>
    ??<depends>jboss.jmx:alias=jmx/rmi/RMIAdaptor</depends>

    ??<!-- jboss.security -->
    ??<depends>jboss.security:service=JaasSecurityManager</depends>
    ??<depends>jboss.security:service=SecurityConfig</depends>
    ??<depends>jboss.security:service=XMLLoginConfig</depends>

    ??<!-- jboss -->
    ??<depends>jboss:service=ClientUserTransaction</depends>
    ??<depends>jboss:service=Naming</depends>
    ??<depends>jboss:service=ClientUserTransaction</depends>
    ??<depends>jboss:service=TransactionManager</depends>
    ??<depends>jboss:service=UUIDKeyGeneratorFactory</depends>
    ??<depends>jboss:service=invoker,type=jrmp</depends>
    ??<depends>jboss:service=proxyFactory,target=ClientUserTransaction</depends>
    ??<depends>jboss:service=proxyFactory,target=ClientUserTransactionFactory</depends>

    ?</mbean>
    </server>


    9、MANIFEST.MF 代碼如下:

    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.6.2
    Created-By: 1.4.2_05-b04 (Sun Microsystems Inc.)

    10、此時把所有Java編譯后的class文件打包成 com.sample.jar 并拷貝到Jboss安裝目錄 server\default\lib 下,啟動Jboss(即運行bin目錄下的run.bat),再運行 TestFileUpload.java 程序進(jìn)行測試(帶入?yún)?shù)為要上傳文件及完整目錄名,如 java com.sample.upload.test.TestFileUpload E:\test.txt 注意引入-Classpath變量),則文件會上傳到Jboss的server\default目錄中。

    ???希望大家有所收獲。

    posted on 2007-01-27 15:46 哼哼 閱讀(4943) 評論(4)  編輯  收藏 所屬分類: JAVA-Server

    Feedback

    # re: Jboss之JMX實例:上傳文件到Jboss目錄中[未登錄] 2007-01-29 08:14 壞男孩
    樓主辛苦了!  回復(fù)  更多評論
      

    # re: Jboss之JMX實例:上傳文件到Jboss目錄中 2007-06-20 16:06 cx
    樓主有沒有qq,我在試驗?zāi)愕拇a時有問題,怎么聯(lián)系你  回復(fù)  更多評論
      

    # re: Jboss之JMX實例:上傳文件到Jboss目錄中[未登錄] 2012-03-31 15:59 good
    文件不能太在吧?  回復(fù)  更多評論
      

    # re: Jboss之JMX實例:上傳文件到Jboss目錄中 2013-09-09 14:44 開發(fā)吧
    我想單純的進(jìn)行jmx之間的配置文件傳輸怎么實現(xiàn)呢?  回復(fù)  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: www.av在线免费观看| 国产禁女女网站免费看| 亚洲国产成人手机在线电影bd| 毛片免费在线视频| 亚洲va无码手机在线电影| 在线免费观看国产| 日日摸日日碰夜夜爽亚洲| 国产精品无码一二区免费| 久久亚洲免费视频| 国产综合成人亚洲区| 亚洲天堂视频在线观看| 曰皮全部过程视频免费国产30分钟 | 亚洲国产精品婷婷久久| 性做久久久久免费看| a视频免费在线观看| 亚洲av无码乱码国产精品fc2| 成熟女人特级毛片www免费| 两个人日本WWW免费版| 亚洲精品无码中文久久字幕| 日本高清免费不卡视频| a在线观看免费网址大全| 久久精品亚洲综合专区| 国产精品深夜福利免费观看| 亚洲美女免费视频| 亚洲另类自拍丝袜第五页 | 亚洲www在线观看| 亚洲午夜久久久影院| 99精品热线在线观看免费视频| 国产成人综合亚洲一区| 精品久久久久久亚洲精品| 国产国产人免费视频成69大陆| 18未年禁止免费观看| 国产精品一区二区三区免费| 亚洲国产精品自在自线观看| 中文字幕亚洲精品| 日本免费网站观看| 1区2区3区产品乱码免费| 成人爽a毛片免费| 五月天婷婷免费视频| 国产精品亚洲精品日韩电影| 亚洲色中文字幕在线播放|