Запустите клиент-сервер Используя RMI

В этом примере показано, как реализовать RMI, чтобы запустить два отдельных процесса, которые инициализируют MATLAB® массивы структур. Клиент и сервер работают на той же машине.

Чтобы реализовать RMI с клиентом на одной машине и сервере на другом, используйте процедуру в этом примере и:

  1. Изменитесь, как сервер связан с системным реестром.

  2. Переопределите, как клиент получает доступ к серверу.

Необходимые условия RMI

Чтобы запустить этот пример, ваша среда должна соответствовать следующим необходимым условиям:

  • Установите MATLAB Compiler SDK™ на машине разработки.

  • Установите поддерживаемую версию Java® Комплект разработчика (JDK™) на машине разработки. Для получения дополнительной информации смотрите, Конфигурируют Вашу Среду Java для Генерации Пакетов.

  • Установите MATLAB Runtime на веб-сервере. Для получения дополнительной информации смотрите Установку и Сконфигурируйте MATLAB Runtime.

  • Убедитесь, что ваш веб-сервер способен к выполнению принятых сред Java как J2EE.

  • Установите javabuilder.jar библиотека (matlabroot/toolbox/javabuilder/jar/javabuilder.jar) в общую папку библиотеки вашего веб-сервера.

    Если ваше использование реализации разделяет клиентские машины, им также нужен javabuilder.jar, поскольку это содержит com.mathworks.extern.java пакет.

Примечание

Вам не нужен MATLAB Runtime, установленный на клиентской стороне. Возвращаемые значения из MATLAB Runtime могут быть автоматически преобразованы с помощью boolean marshalOutputs в RemoteProxy класс. Для получения дополнительной информации см. документацию API Javadoc в matlabroot/help/toolbox/javabuilder/MWArrayAPI.

Файлы

Местоположение функции MATLABmatlabroot\toolbox\javabuilder\Examples\RMIExamples\DataTypes\DataTypesDemoComp
Участок кода Javamatlabroot\toolbox\javabuilder\Examples\RMIExamples\DataTypes\DataTypesDemoJavaApp

Процедура

  1. Скопируйте DataTypes папка от MATLAB до вашей папки работы:

    copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','RMIExamples','DataTypes'))

    В командной строке MATLAB перейдите к новому DataTypes\DataTypesDemoComp подпапка в вашей папке работы.

  2. Исследуйте функции MATLAB createEmptyStruct.m и updateField.m.

     createEmptyStruct.m

     updateField.m

  3. Сгенерируйте использование пакета Java compiler.build.javaPackage путем выдачи следующей команды в командной строке MATLAB:

    compiler.build.javaPackage({'createEmptyStruct.m','updateField.m'}, ...
        'PackageName','dataTypesComp', ...
        'ClassName','dataTypesClass', ...
        'Verbose','on');

    Для получения дополнительной информации смотрите, что инструкции в Генерируют приложение Java Пакета и Сборки Java.

  4. В вашей системной командной строке перейдите к DataTypes\DataTypesDemoJavaApp папка.

    Скомпилируйте код сервера Java путем издания одного из следующего javac команды в вашей системной командной строке.

    • На Windows®Ввод:

      javac -classpath
       "matlabroot\toolbox\javabuilder\jar\javabuilder.jar;path\to\dataTypesComp.jar"
       DataTypesServer.java 
    • На UNIX®Ввод:

      javac -classpath
       "matlabroot/toolbox/javabuilder/jar/javabuilder.jar:path/to/dataTypesComp.jar"
       DataTypesServer.java

    Примечание

    Замените matlabroot с путем к вашему MATLAB или папке установки MATLAB Runtime.

  5. Скомпилируйте клиентский код Java путем издания одного из следующего javac команды в вашей системной командной строке.

    • На Windows введите:

      javac -classpath
       "matlabroot\toolbox\javabuilder\jar\javabuilder.jar;path\to\dataTypesComp.jar
       DataTypesClient.java
    • На UNIX введите:

      javac -classpath
       "matlabroot/toolbox/javabuilder/jar/javabuilder.jar:path/to/dataTypesComp.jar"
       DataTypesClient.java

Запустите клиент-сервер

Запустите клиент-сервер можно следующим образом:

  1. Откройте два командных окна — один для сервера и один для клиента.

  2. В каждом окне перейдите к папке, которая содержит DataTypesServer.java или DataTypesClient.java, соответственно.

  3. Запустите сервер путем издания одного из следующего java команды в одной строке в системной командной строке.

    • На Windows введите:

      java -classpath
       .;"path\to\dataTypesComp.jar;matlabroot\toolbox\javabuilder\jar\javabuilder.jar"
       -Djava.rmi.server.codebase="file:///matlabroot\toolbox\javabuilder\jar\javabuilder.jar
       file:///path\to\dataTypesComp.jar" DataTypesServer
    • На UNIX введите:

      java -classpath
       .:"path/to/dataTypesComp.jar;matlabroot/toolbox/javabuilder/jar/javabuilder.jar"
       -Djava.rmi.server.codebase="file:///matlabroot/toolbox/javabuilder/jar/javabuilder.jar
       file:///path/to/dataTypesComp.jar" DataTypesServer

  4. Во втором командном окне запустите клиент путем издания одного из следующего java команды в одной строке.

    • На Windows введите:

      java -classpath
       .;"path/to/\dataTypesComp.jar;matlabroot\toolbox\javabuilder\jar\javabuilder.jar"
       DataTypesClient
    • На UNIX введите:

      java -classpath
       .:"path/to/dataTypesComp.jar;matlabroot/toolbox/javabuilder/jar/javabuilder.jar"
       -Djava.rmi.server.codebase="file:///matlabroot/toolbox/javabuilder/jar/javabuilder.jar
       file:///path/to/dataTypesComp.jar" DataTypesClient

Если команды успешны, следующий выход появляется в командном окне, запускающем сервер:

Please wait for the server registration notification.            
            Server registered and running successfully!!

            EVENT 1: Initializing the structure on server
                     and sending it to client:
                     Initialized empty structure:

                   Name: []
                Address: []

            ##################################

            EVENT 3: Partially initialized structure as received by server:

                   Name: []
                Address: [1x1 struct]

            Address field as initialized from the client:

                Street: '3, Apple Hill Drive'
                  City: 'Natick'
                 State: 'MA'
                   Zip: '01760'

            ##################################

            EVENT 4: Updating 'Name' field before 
                     sending the structure back to the client:

                  Name: 'The MathWorks'
               Address: [1x1 struct]

            ##################################
Следующий выход появляется в командном окне, запускающем клиент:
 Running the client application!!

            EVENT 2: Initialized structure as received in client applications:

                   Name: []
                Address: []

            Updating the 'Address' field to :

                Street: '3, Apple Hill Drive'
                  City: 'Natick'
                 State: 'MA'
                   Zip: '01760'

            #################################


            EVENT 5: Final structure as received by client:

                   Name: 'The MathWorks'
                Address: [1x1 struct]

            Address field:

                Street: '3, Apple Hill Drive'
                  City: 'Natick'
                 State: 'MA'
                   Zip: '01760'

            #################################

Примечание

Для большего количества примеров реализации RMI смотрите файлы в matlabroot/toolbox/javabuilder/Examples/RMIExamples.

Похожие темы