Actualice la aplicación de Java de Service Fabric anterior para capturar las bibliotecas de Java desde Maven
Los archivos binarios de Java de Service Fabric se han movido desde el SDK de Java de Service Fabric al hospedaje de Maven. Puede usar mavencentral para capturar las dependencias de Java de Service Fabric más recientes. Esta guía le ayudará a actualizar las aplicaciones de Java existentes creadas para el SDK de Java de Service Fabric, utilizando cualquier plantilla Yeoman o Eclipse, para que sean compatibles con la compilación basada en Maven.
Requisitos previos
En primer lugar, desinstale el SDK de Java existente.
sudo dpkg -r servicefabricsdkjava
Instale la CLI de Service Fabric más reciente siguiendo los pasos mencionados aquí.
Para compilar las aplicaciones de Java de Service Fabric y trabajar con ellas, asegúrese de que tiene JDK 1.8 y Gradle instalados. Si aún no se han instalado, puede ejecutar el siguiente procedimiento para instalar JDK 1.8 (openjdk-8-jdk) y Gradle:
sudo apt-get install openjdk-8-jdk-headless sudo apt-get install gradle
Actualice los scripts de instalación o desinstalación de la aplicación para utilizar la nueva CLI de Service Fabric siguiendo los pasos mencionados aquí. Puede hacer referencia a nuestros ejemplos de introducción como referencia.
Sugerencia
Después de desinstalar el SDK de Java de Service Fabric, Yeoman no funcionará. Siga los requisitos previos mencionados aquí para que el generador de plantillas Java de Yeoman de Service Fabric funcione.
Bibliotecas de Java de Service Fabric en Maven
Las bibliotecas de Java de Service Fabric han sido hospedadas en Maven. Puede agregar las dependencias en el archivo pom.xml
o build.gradle
de sus proyectos para usar las bibliotecas de Java de Service Fabric desde mavenCentral.
Actores
Compatibilidad con Reliable Actor de Service Fabric para la aplicación.
<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'
}
Servicios
Compatibilidad con el servicio sin estado de Service Fabric para la aplicación.
<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'
}
Otros
Transporte
Compatibilidad de la capa de transporte para aplicaciones Java de Service Fabric. No es necesario agregar explícitamente esta dependencia a sus aplicaciones Reliable Actor o de servicio, a menos que programe la capa de transporte.
<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'
}
Compatibilidad con Fabric
Compatibilidad en el nivel de sistema para Service Fabric, que se comunica con el entorno de tiempo de ejecución nativo de Service Fabric. No es necesario agregar explícitamente esta dependencia a sus aplicaciones Reliable Actor o de servicio. Se recuperan automáticamente desde Maven, cuando se incluyen las dependencias anteriores.
<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'
}
Migración del servicio sin estado de Service Fabric
Para poder crear su servicio de Java sin estado de Service Fabric existente con las dependencias de Service Fabric capturadas desde Maven, debe actualizar el archivo build.gradle
dentro del servicio. Antes solían ser como las siguientes:
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')
}
}
Ahora, para capturar las dependencias desde Maven, el archivo actualizado build.gradle
tendría los elementos correspondientes como se indica a continuación:
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('*')
}
}
En general, para hacerse una idea general acerca de cómo sería el script de compilación para un servicio Java sin estado de Service Fabric, puede remitirse a cualquiera de nuestros ejemplos de introducción. Este es el archivo build.gradle del ejemplo EchoServer.
Migración del servicio Actor de Service Fabric
Para poder crear su aplicación Java Actor de Service Fabric existente con las dependencias de Service Fabric capturadas desde Maven, debe actualizar el archivo build.gradle
dentro del paquete de interfaz y en el paquete de servicio. Si tiene un paquete TestClient, debe actualizarlo también. Así, para el actor Myactor
, lo siguiente sería localizar los lugares donde necesita actualizar:
./Myactor/build.gradle
./MyactorInterface/build.gradle
./MyactorTestClient/build.gradle
Actualización del script de compilación para el proyecto de interfaz
Antes solían ser como las siguientes:
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
}
.
.
Ahora, para capturar las dependencias desde Maven, el archivo actualizado build.gradle
tendría los elementos correspondientes como se indica a continuación:
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)
.
.
Actualización del script de compilación para el proyecto de actor
Antes solían ser como las siguientes:
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')
}
}
Ahora, para capturar las dependencias desde Maven, el archivo actualizado build.gradle
tendría los elementos correspondientes como se indica a continuación:
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')
}
}
Actualización del script de compilación para el proyecto de cliente de prueba
Los cambios aquí son similares a los que se describen en la sección anterior, es decir, el proyecto de actor. Anteriormente el script Gradle solía ser como el siguiente:
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')
}
}
Ahora, para capturar las dependencias desde Maven, el archivo actualizado build.gradle
tendría los elementos correspondientes como se indica a continuación:
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')
}
}
Pasos siguientes
- Creación e implementación de la primera aplicación de Java para Service Fabric en Linux con Yeoman
- Creación e implementación de la primera aplicación de Java para Service Fabric en Linux con el complemento de Eclipse para Service Fabric
- Interacción con los clústeres de Service Fabric mediante la CLI de Service Fabric