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

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

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

    hengheng123456789

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks

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

    ???實現步驟如下:

    1、下載安裝Jboss服務器

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

    3、建立 RMIAdaptorHelper.java 類,用于處理遠程調用,代碼如下:

    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;
    ?}

    ?/**
    ? * 遠程調用 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 服務器
    ? */
    ?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;

    ?}

    ?/**
    ? * 遠程調用的對象類
    ? */
    ?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 類,用于存儲所要傳輸的文件內容,代碼如下:

    package com.sample.upload.mbean;

    import java.io.Serializable;

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

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

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


    6、建立 FileUpload.java 類,用于實現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 服務器
    ???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 程序進行測試(帶入參數為要上傳文件及完整目錄名,如 java com.sample.upload.test.TestFileUpload E:\test.txt 注意引入-Classpath變量),則文件會上傳到Jboss的server\default目錄中。

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

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

    Feedback

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

    # re: Jboss之JMX實例:上傳文件到Jboss目錄中 2007-06-20 16:06 cx
    樓主有沒有qq,我在試驗你的代碼時有問題,怎么聯系你  回復  更多評論
      

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

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


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


    網站導航:
     
    主站蜘蛛池模板: 免费无码A片一区二三区| 久久久久久av无码免费看大片| 24小时日本电影免费看| 亚洲第一区香蕉_国产a| 好久久免费视频高清| 亚洲精品成人片在线观看精品字幕 | 亚洲综合校园春色| 色se01短视频永久免费| 久久精品国产亚洲AV忘忧草18| 中字幕视频在线永久在线观看免费| 国产成+人+综合+亚洲专| 男男AV纯肉无码免费播放无码 | 亚洲国产精品无码av| 日本高清高色视频免费| 噜噜噜亚洲色成人网站∨| 成人女人A级毛片免费软件| 亚洲色精品VR一区区三区| 日韩在线免费看网站| 亚洲免费在线观看| 亚洲资源在线观看| 女人被男人躁的女爽免费视频 | 91九色老熟女免费资源站| 亚洲黄色激情视频| 亚洲精品国产日韩无码AV永久免费网 | 337p欧洲亚洲大胆艺术| 在线观看av永久免费| 女人裸身j部免费视频无遮挡| 伊人久久大香线蕉亚洲| 日韩精品免费一级视频| 男性gay黄免费网站| 国产精品亚洲A∨天堂不卡| 91网站免费观看| 美女被暴羞羞免费视频| 亚洲成在人天堂在线| 免费毛片在线播放| 中文字幕无码免费久久9一区9 | 91亚洲视频在线观看| 亚洲精品和日本精品| 最近在线2018视频免费观看| 亚洲av无码专区在线观看亚| 亚洲欧洲∨国产一区二区三区|