Creación de funciones de solo código Java
Descubra cómo empaquetar y crear funciones solo de código Java en OCI Functions.
Utilice una función de sólo código Java cuando desee desplegar el código de función Java sin crear una imagen de contenedor.
Utilice este flujo cuando la función se pueda ejecutar en un tiempo de ejecución de Java Runtime soportado.
Antes de crear una función de sólo código Java, empaquete la función Java como un archivo JAR uber/fat o como un archivo ZIP que contenga exactamente un archivo JAR uber/fat de nivel raíz. Para conocer los requisitos generales de las funciones de solo código, consulte Creación de funciones de solo código. Para conocer las versiones de tiempo de ejecución de Java y los nombres de tiempo de ejecución soportados, consulte Idiomas soportados para funciones de solo código.
Además, para empaquetar y crear funciones de solo código Java, necesita:
- Entorno de desarrollo Java.
- Maven, Gradle u otra herramienta de creación de Java.
- Una función Java empaquetada como un archivo JAR uber/fat, o como un archivo ZIP que contiene exactamente un archivo JAR uber/fat de nivel raíz.
- Un valor de manejador Java válido.
Requisitos de archivo Java
Para las funciones de solo código Java:
- Utilizar un archivo JAR para una función Java simple.
- Utilice un archivo ZIP cuando la función incluya recursos o dependencias nativas.
- Java JAR debe ser un JAR uber/fat que incluya el código de función y las dependencias Java necesarias.
- Cree el JAR uber/fat mediante un plugin Maven o Gradle adecuado, como el plugin Maven Shade o un plugin Gradle shadow JAR.
- Si proporciona un archivo ZIP, el archivo ZIP debe contener exactamente un archivo JAR uber/fat de nivel raíz en la raíz del archivo.
- La extensión
.jarno distingue entre mayúsculas y minúsculas. resources/es opcional.native/es opcional, pero si está presente debe seguir reglas específicas de la arquitectura.- Se necesita un manejador.
- El manejador indica a OCI Functions a qué método Java llamar.
Manejador Java
Utilice el formato de manejador esperado por el tiempo de ejecución de Java Runtime seleccionado.
Ejemplo:
com.example.HelloFunction::handleRequest
Archivo Java simple
Utilice un archivo JAR cuando la función no necesite recursos ni dependencias nativas.
Ejemplo de diseño antes de cargar:
main.jar
El archivo JAR contiene las clases de funciones compiladas y las dependencias Java necesarias.
Reglas:
- El archivo JAR puede tener cualquier nombre.
- El archivo JAR debe ser un JAR uber/fat.
- El archivo JAR debe incluir el código de función y las dependencias Java necesarias.
Crear un JAR de uber/fat
Un archivo JAR uber/fat es un archivo JAR que contiene las clases de funciones compiladas y las bibliotecas Java necesarias para la función. Las dependencias de empaquetado en el JAR hacen que la función sea autónoma.
Puede crear un JAR uber/fat con plugins de herramienta de compilación, como el plugin Maven Shade para Maven o un plugin Shadow para Gradle.
Para proyectos de Maven, configure el plugin de sombra de Maven para crear un JAR uber/fat y, a continuación, ejecute:
mvn clean package
Para los proyectos de Gradle, configure un plugin Shadow o un plugin equivalente para crear un JAR uber/fat y, a continuación, ejecute:
./gradlew clean build
Una vez finalizada la compilación, copie el archivo JAR uber/fat en un directorio de empaquetado limpio. Si la función es una función Java simple, puede utilizar el archivo JAR como archivo de función. Si la función incluye recursos o dependencias nativas, cree un archivo ZIP que contenga el archivo JAR en la raíz del archivo e incluya los archivos adicionales en las ubicaciones necesarias.
Archivo ZIP de Java
Utilice un archivo ZIP cuando la función incluya recursos adicionales o dependencias nativas.
Esta estructura se utiliza:
archive-root/
├── main.jar
└── resources/ # optional
Reglas:
main.jarrepresenta el único JAR uber/fat en la raíz del archivo. El JAR puede tener cualquier nombre.resources/es opcional y debe estar en la raíz del archivo si se utiliza.
Para crear un archivo ZIP que incluya el JAR y los recursos, ejecute:
zip -r function.zip main.jar resources/
Configurar opciones de Java Runtime
Para las funciones de sólo código Java, no empaquete archivos de opciones de tiempo de ejecución ni archivos de argumentos en el archivo de funciones. Configure las opciones de inicio de JVM definiendo variables de configuración de función, como JAVA_TOOL_OPTIONS.
Por ejemplo, el siguiente comando define un parámetro de configuración de función con la clave JAVA_TOOL_OPTIONS y el valor -Dapp.environment=production:
fn config function <app-name> <function-name> JAVA_TOOL_OPTIONS "-Dapp.environment=production"
En tiempo de ejecución, el tiempo de ejecución de Java lee el valor JAVA_TOOL_OPTIONS y aplica la opción JVM. En este ejemplo, la opción define la propiedad del sistema Java app.environment en production.
Para obtener más información sobre la configuración de funciones, consulte Specifying Custom Configuration Parameters to Pass to Functions.
Archivo Java con dependencias nativas
Las funciones Java suelen ser independientes de la arquitectura. Sin embargo, si la función Java utiliza bibliotecas nativas, como archivos .so cargados a través de JNI u otro mecanismo nativo, agrupe las bibliotecas nativas en el archivo de despliegue y asegúrese de que coinciden con la arquitectura de la aplicación OCI Functions.
Para una aplicación x86:
archive-root/
├── main.jar
├── resources/ # optional
└── native/
└── fn-arch-x86/
Para una aplicación de ARM:
archive-root/
├── main.jar
├── resources/ # optional
└── native/
└── fn-arch-arm/
Para una aplicación de arquitectura múltiple:
archive-root/
├── main.jar
├── resources/ # optional
└── native/
├── fn-arch-x86/
└── fn-arch-arm/
Reglas:
native/es opcional.- Si existe
native/, no coloque los archivos directamente ennative/. - Para las aplicaciones x86,
native/solo debe contenerfn-arch-x86/. - Para las aplicaciones de ARM,
native/solo debe contenerfn-arch-arm/. - Para aplicaciones de arquitectura múltiple,
native/debe contenerfn-arch-x86/yfn-arch-arm/. - Los binarios nativos se deben compilar para Linux y la arquitectura correcta.
Comportamiento de Java Runtime
Para las funciones de solo código Java, OCI Functions utiliza el valor de manejador que especifique para llamar al método Java en el archivo de funciones.
Vd. es responsable de empaquetar el código de función y las dependencias Java necesarias en un archivo JAR uber/fat.
Creación de una función de solo código Java
Para crear una función de solo código Java, siga las instrucciones de Creación de funciones de solo código. Por ejemplo, para crear una función de solo código Java mediante la consola:
- En la página de lista Aplicaciones, seleccione la aplicación en la que desea crear la función de solo código Java. Si necesita ayuda para buscar la página de lista o la aplicación, consulte Listado de aplicaciones.
-
Seleccione el separador Funciones.
Se abre la página de lista Funciones. Todas las funciones de la aplicación seleccionada se muestran en una tabla.
- Seleccione Crear desde Archivo y especifique detalles para la función de solo código Java, incluido el origen de archivo, el archivo Java, un tiempo de ejecución Java soportado y un manejador Java.
Para las funciones de sólo código Java, debe especificar un manejador al crear la función.
- Especifique otros detalles para la función según sea necesario (consulte Creación de Funciones de Sólo Código).
- Seleccione Crear para crear la función.
La función de sólo código Java se crea y se puede llamar como cualquier otra función.
Solución de problemas
| Código de error | Problema | Causa probable | Corrección recomendada |
|---|---|---|---|
400 |
La validación del archivo falla porque no existe ningún JAR raíz | El JAR está anidado en una carpeta como target/ en lugar de en la raíz del archivo |
Coloque exactamente un archivo JAR en la raíz del archivo. |
400 |
La validación del archivo falla porque existen varios JAR raíz | Hay más de un archivo .jar en la raíz del archivo |
Envase una sola grasa o uber JAR. |
400 |
La función falla porque faltan dependencias | El JAR no incluye las dependencias necesarias | Crear un JAR de grasa o uber que incluya dependencias. |
400 |
Error de manejador | Falta el manejador, está mal escrito o apunta a una clase o método incorrectos | Confirme el valor del manejador y la firma de clase/método. |
400 |
Error de dependencia nativa | La biblioteca nativa se ha creado para la arquitectura o el sistema operativo incorrectos | Vuelva a crear la biblioteca nativa para Linux y la arquitectura correcta. |
400 |
Fallo de validación de archivo nativo | Los archivos se colocaron directamente en native/ |
Mueva los archivos en native/fn-arch-x86/ o native/fn-arch-arm/. |
400 |
Fallo de validación del archivo nativo de varias arquitecturas | Falta un directorio de arquitectura nativo | Incluya native/fn-arch-x86/ y native/fn-arch-arm/. |