1
Dependencias (Maven/Gradle)
La JVM (Java Virtual Machine) es un cajón cerrado. Para poder usar el C-ABI rapidísimo de Rust, Java usa una navaja suiza llamada JNA (Java Native Access).
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.14.0</version>
</dependency>
💡 Para que lo entiendas súper fácil: La JVM es como una guardería segura llena de cosas colchonadas. Rust es una fábrica industrial afuera. JNA es la ventana mágica por donde Java le manda paquetitos a la fábrica para que haga el trabajo duro del túnel criptográfico.
2
Mapear y Disparar
Usamos una interface para mapear el DLL y simplemente enviamos arrays de `byte[]`.
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
public class DemoJava {
public interface PoNative extends Library {
PoNative INSTANCE = Native.load("po_c", PoNative.class);
Pointer po_client_new(String bind, String remote);
int po_client_send(Pointer client, byte[] data, long len);
void po_client_free(Pointer client);
}
public static void main(String[] args) {
Pointer client = PoNative.INSTANCE.po_client_new("0", "127.0.0.1:4433");
byte[] payload = "E2EE desde Spring Boot".getBytes();
PoNative.INSTANCE.po_client_send(client, payload, payload.length);
PoNative.INSTANCE.po_client_free(client);
}
}