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
Скопируйте NativeCellStruct
папка от MATLAB до вашей папки работы:
copyfile(fullfile(matlabroot,'toolbox','javabuilder','Examples','RMIExamples','NativeCellStruct'))
В командной строке MATLAB перейдите к новому NativeCellStruct\NativeCellStructDemoComp
подпапка в вашей папке работы.
Исследуйте функции MATLAB createEmptyStruct.m
и updateField.m
.
Сгенерируйте использование пакета Java compiler.build.javaPackage
путем выдачи следующей команды в командной строке MATLAB:
compiler.build.javaPackage({'createEmptyStruct.m','updateField.m'}, ... 'PackageName','nativeCellStructComp', ... 'ClassName','nativeCellStructClass', ... 'Verbose','on');
Для получения дополнительной информации смотрите, что инструкции в Генерируют приложение Java Пакета и Сборки Java.
</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
Примечание
Замените
с путем к вашему MATLAB или папке установки MATLAB Runtime.matlabroot
Скомпилируйте клиентский код 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>Запустите сервер путем издания одного из следующего 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>
Во втором командном окне запустите клиент путем издания одного из следующего 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 #################################