Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Двоичные файлы Java для Service Fabric теперь размещаются на платформе Maven, а не в SDK для Java. Вы можете использовать mavencentral для получения последних зависимостей Java Service Fabric. Это руководство поможет вам обновить существующие приложения Java, созданные для пакета SDK для Java Service Fabric, с помощью шаблона Yeoman или Eclipse, совместимых с сборкой на основе Maven.
Необходимые условия
Сначала удалите существующий пакет SDK для Java.
sudo dpkg -r servicefabricsdkjavaУстановите последнюю версию интерфейса командной строки Service Fabric, выполнив описанные здесь действия.
Чтобы создать и работать с приложениями Java Service Fabric, убедитесь, что установлен JDK 1.8 и Gradle. Если еще не установлено, можно выполнить следующее, чтобы установить JDK 1.8 (openjdk-8-jdk) и Gradle —
sudo apt-get install openjdk-8-jdk-headless sudo apt-get install gradleОбновите скрипты установки и удаления приложения, чтобы использовать новый интерфейс командной строки Service Fabric, выполнив описанные здесь действия. Вы можете ознакомиться с нашими примерами начала работы.
Подсказка
После удаления пакета SDK Java для Service Fabric Yeoman не будет работать. Следуйте предварительным требованиям, указанным здесь, чтобы генератор шаблонов Yeoman для Service Fabric работал корректно.
Библиотеки Java Service Fabric в Maven
Библиотеки Java Service Fabric размещены в Maven. Вы можете добавить зависимости в pom.xml или build.gradle вашего проекта, чтобы использовать библиотеки Java Service Fabric из mavenCentral.
Actors
Поддержка надежных субъектов Service Fabric для приложения.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-actors</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-actors:1.0.0'
}
Services
Поддержка службы без отслеживания состояния Service Fabric для приложения.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-services</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-services:1.0.0'
}
Прочее
Транспорт
Поддержка уровня транспорта для приложения Java Service Fabric. Не нужно явно добавлять эту зависимость в приложения Надежного Актора или службы, если вы не программируете на уровне транспорта.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-transport</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-transport:1.0.0'
}
Поддержка Fabric
Поддержка системного уровня для Service Fabric, которая взаимодействует с родной средой выполнения Service Fabric. Вам не нужно явно добавлять эту зависимость в приложения Reliable Actor или Service. Эта зависимость автоматически загружается из Maven при включении других зависимостей, приведенных выше.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf:1.0.0'
}
Миграция стейтлесс-службы Service Fabric
Чтобы иметь возможность создать существующую бессостояточную Java-службу Service Fabric с использованием зависимостей Service Fabric, загруженных из Maven, необходимо обновить файл build.gradle в этой службе. Ранее он использовался, как показано ниже -
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
compile project(':Interface')
}
.
.
.
jar {
manifest {
attributes(
'Main-Class': 'statelessservice.MyStatelessServiceHost',
"Class-Path": configurations.compile.collect { 'lib/' + it.getName() }.join(' '))
baseName "MyStateless"
destinationDir = file('./../MyStatelessApplication/MyStatelessPkg/Code')
}
.
.
.
task copyDeps <<{
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../MyStatelessApplication/MyStatelessPkg/Code/lib")
include('*.jar')
}
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../MyStatelessApplication/MyStatelessPkg/Code/lib")
include('libj*.so')
}
}
Теперь, чтобы получить зависимости от Maven, обновлениеbuild.gradle будет содержать соответствующие части следующим образом.
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
compile project(':Interface')
azuresf ('com.microsoft.servicefabric:sf-services:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
.
jar {
manifest {
def mpath = configurations.compile.collect {'lib/'+it.getName()}.join (' ')
mpath = mpath + ' ' + configurations.azuresf.collect {'lib/'+it.getName()}.join (' ')
attributes(
'Main-Class': 'statelessservice.MyStatelessServiceHost',
"Class-Path": mpath)
baseName "MyStateless"
destinationDir = file('./../MyStatelessApplication/MyStatelessPkg/Code')
}
}
.
.
.
task copyDeps <<{
copy {
from("lib/")
into("./../MyStatelessApplication/MyStatelessPkg/Code/lib")
include('*')
}
}
Как правило, чтобы получить общее представление о том, как скрипт сборки будет выглядеть для службы Java без отслеживания состояния Service Fabric, можно обратиться к любому примеру из наших примеров начала работы. Ниже приведен пример build.gradle для примера EchoServer.
Перенос актёрной службы Service Fabric
Чтобы можно было создать ваше существующее приложение Java Actor Service Fabric, используя зависимости Service Fabric, загруженные из Maven, необходимо обновить файл build.gradle внутри пакета интерфейса и в пакете службы. Если у вас есть пакет TestClient, необходимо также обновить его. Таким образом, для вашего актера Myactor необходимо обновить следующие компоненты -
./Myactor/build.gradle
./MyactorInterface/build.gradle
./MyactorTestClient/build.gradle
Обновление скрипта сборки для проекта интерфейса
Ранее он использовался, как показано ниже -
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
}
.
.
Теперь, чтобы получить зависимости от Maven, обновленоbuild.gradle будет иметь соответствующие части, как показано ниже.
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
azuresf ('com.microsoft.servicefabric:sf-actors:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
Обновление скрипта сборки для проекта актора
Ранее он использовался, как показано ниже -
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
compile project(':MyactorInterface')
}
.
.
.
jar {
manifest {
attributes(
'Main-Class': 'reliableactor.MyactorHost',
"Class-Path": configurations.compile.collect { 'lib/' + it.getName() }.join(' '))
baseName "myactor"
destinationDir = file('./../myjavaapp/MyactorPkg/Code')
}
}
.
.
.
task copyDeps<< {
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../myjavaapp/MyactorPkg/Code/lib")
include('*.jar')
}
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../myjavaapp/MyactorPkg/Code/lib")
include('libj*.so')
}
copy {
from("../MyactorInterface/out/lib")
into("./../myjavaapp/MyactorPkg/Code/lib")
include('*.jar')
}
}
Теперь, чтобы получить зависимости от Maven, обновлениеbuild.gradle будет содержать следующие соответствующие части.
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
compile project(':MyactorInterface')
azuresf ('com.microsoft.servicefabric:sf-actors:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
.
jar {
manifest {
def mpath = configurations.compile.collect {'lib/'+it.getName()}.join (' ')
mpath = mpath + ' ' + configurations.azuresf.collect {'lib/'+it.getName()}.join (' ')
attributes(
'Main-Class': 'reliableactor.MyactorHost',
"Class-Path": mpath)
baseName "myactor"
destinationDir = file('../myjavaapp/MyactorPkg/Code')}
}
.
.
.
task copyDeps<< {
copy {
from("lib/")
into("../myjavaapp/MyactorPkg/Code/lib")
include('*')
}
copy {
from("../MyactorInterface/out/lib")
into("../myjavaapp/MyactorPkg/Code/lib")
include('*.jar')
}
}
Обновление скрипта сборки для тестового клиентского проекта
Здесь изменения похожи на изменения, обсуждаемые в предыдущем разделе, то есть проект актера. Ранее скрипт Gradle использовался следующим образом:
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
compile project(':MyactorInterface')
}
.
.
.
jar
{
manifest {
attributes(
'Main-Class': 'reliableactor.test.MyactorTestClient',
"Class-Path": configurations.compile.collect { 'lib/' + it.getName() }.join(' '))
}
baseName "myactor-test"
destinationDir = file('out/lib')
}
.
.
.
task copyDeps<< {
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./out/lib/lib")
include('*.jar')
}
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./out/lib/lib")
include('libj*.so')
}
copy {
from("../MyactorInterface/out/lib")
into("./out/lib/lib")
include('*.jar')
}
}
Теперь, чтобы получить зависимости от Maven, обновлениеbuild.gradle включает соответствующие части, как показано ниже.
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
compile project(':MyactorInterface')
azuresf ('com.microsoft.servicefabric:sf-actors:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
.
jar
{
manifest {
def mpath = configurations.compile.collect {'lib/'+it.getName()}.join (' ')
mpath = mpath + ' ' + configurations.azuresf.collect {'lib/'+it.getName()}.join (' ')
attributes(
'Main-Class': 'reliableactor.test.MyactorTestClient',
"Class-Path": mpath)
baseName "myactor-test"
destinationDir = file('./out/lib')
}
}
.
.
.
task copyDeps<< {
copy {
from("lib/")
into("./out/lib/lib")
include('*')
}
copy {
from("../MyactorInterface/out/lib")
into("./out/lib/lib")
include('*.jar')
}
}
Дальнейшие действия
- Создание и развертывание первого приложения Java Service Fabric в Linux с помощью Yeoman
- Создание и развертывание первого приложения Java Service Fabric в Linux с помощью подключаемого модуля Service Fabric для Eclipse
- Взаимодействие с кластерами Service Fabric с помощью интерфейса командной строки Service Fabric