Представляйте ячейку Native Java и массивы структур

Java® не имеет прямого представления в наличии для MATLAB® массивы структур и массивы ячеек. В результате, когда экземпляр MWStructArray или MWCellArray преобразован в собственный тип Java с помощью toArray() метод, выходом является многомерный Object массив, который может затруднить процесс.

Когда вы используете пакеты MATLAB Compiler SDK™ с RMI, вы управляете, как сервер передает результаты обратно вызовов функции MATLAB клиента. Сервер может собираться упорядочить выход клиенту как MWArray (com.mathworks.toolbox.javabuilder пакет) подтип, или как собственный тип данных Java. Представление собственного типа данных Java MWArray подтипы получены путем вызова toArray() метод сервером.

Можно использовать собственные представления Java массивов структур MATLAB и массивов ячеек, если оба из этих условий верны:

  • У вас есть функции MATLAB на сервере с struct MATLAB или типами данных ячейки как вводы или выводы

  • Вы не хотите устанавливать MATLAB Runtime на своих клиентских машинах

Классы в com.mathworks.extern.java пакет (в javabuilder.jar) не нужен MATLAB Runtime. Имена классов в этом пакете совпадают с теми в com.mathworks.toolbox.javabuilder — разрешение вам легко создать экземпляры com.mathworks.extern.java.MWStructArray или com.mathworks.extern.java.MWCellArray та работа то же самое как подобно названные классы в com.mathworks.toolbox.javabuilder — на машине, которая не имеет MATLAB Runtime.

Начиная с MWArray иерархия классов может использоваться только с MATLAB Runtime, если клиентская машина не имеет MATLAB Runtime в наличии, сервер возвращает выходной параметр toArray() для массивов структур или массивов ячеек как экземпляры com.mathworks.extern.java.MWStructArray или com.mathworks.extern.java.MWCellArray, соответственно.

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

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

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

  • Установите поддерживаемую версию инструментального набора JDK (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 Java в matlabroot/help/toolbox/javabuilder/MWArrayAPI.

Процедура

<listitem>

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

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

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

</listitem>
<listitem>

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

 createEmptyStruct.m

 updateField.m

</listitem>
<listitem>

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

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

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

</listitem>
<listitem>

В вашей системной командной строке перейдите к NativeCellStruct\NativeCellStructDemoJavaApp папка.

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

  • На Windows®Ввод:

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

    javac -classpath
     "matlabroot/toolbox/javabuilder/jar/javabuilder.jar:path/to/nativeCellStructComp.jar"
     NativeCellStructServer.java

Примечание

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

</listitem>
<listitem>

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

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

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

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

</listitem>
<listitem>

Подготовьтесь запускать сервер и клиентские приложения путем открытия двух командных окон — один для клиента и один для сервера.

</listitem>
<listitem>

Запустите сервер путем издания одного из следующего 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"
     NativeCellStructServer
  • На 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"
     NativeCellStructServer

</listitem>
<listitem>

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

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

    java -classpath
     .;"path/to/\dataTypesComp.jar;matlabroot\toolbox\javabuilder\jar\javabuilder.jar"
     NativeCellStructClient
  • На 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"
     NativeCellStructClient

</listitem>

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

 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:

                     1x1 struct array with fields:
                        Name
                        Address

                Updating the 'Address' field to :

                     1x1 struct array with fields:
                        Street
                        City
                        State
                        Zip

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

            EVENT 5: Final structure as received by client:

                     1x1 struct array with fields:
                        Name
                        Address

                Address field:

                     1x1 struct array with fields:
                        Street
                        City
                        State
                        Zip

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