JNI no Glassfish

2 respostas
A

Olás!

Preciso acessar bibliotecas nativas em minha implementação de um web service no Glassfish 3.1 (no Linux).

Estou carregando a biblioteca através da chamada:

Mas ao chamar o serviço web, recebo a mensagem de erro:

Buscando nos foruns, descobri que eu devo setar o java library path no Glassfish e que isso pode ser feito via console de admin, adicionando

em JVM Settings -> JVM Options

Isso não mudou nada, então tentei colocar /home/eu/libs no Native Library Path Sufix em JVM Settings -> Path Settings , mas também não adiantou.

Onde foi que eu errei???

Obrigada!

2 Respostas

L

Se você colocar seu .so (ou .dll) junto com a aplicação, você pode (tentar) fazer uma mágica para ele carregar o arquivo que veio de dentro do seu pacote. Mas, carregue só uma vez, hein!

(Isso usa Commons-IO para fazer as operações de IO).
public static File dumpResource(String pacote, String nome)
			throws IOException {
		String nomeReal = pacote.replaceAll("\\.", "/") + "/" + nome;
		InputStream lib = Thread.currentThread().getContextClassLoader()
				.getResourceAsStream(nomeReal);
		File liblocation = File.createTempFile("dynlib", nome);
		liblocation.deleteOnExit();
		FileOutputStream libwriter = new FileOutputStream(liblocation);
		IOUtils.copy(lib, libwriter);
		libwriter.flush();
		IOUtils.closeQuietly(libwriter);
		IOUtils.closeQuietly(lib);
		return liblocation;

	}

	public static void loadDynamicLibrary(String pacote, String nome)
			throws IOException {
		String libname = System.mapLibraryName(nome);

		System.load(dumpResource(pacote, libname).getCanonicalPath());

	}
Aí você coloca sua lib linda em um pacote junto com seu código (por exemplo, com.amattiuz) e carrega como:
loadDynamicLibrary("com.amattiuz", "MinhaLibLinda");

Experimenta! (nunca fiz rodar de dentro de AppServer, só de JavaSE)

Rodrigo_Vieira_Pinto

Solução porca, mas que funciona:

Dá uma lida no artigo aqui mesmo no GUJ que fala da javax.comm e veja como se faz pra instalar essa biblioteca na sua JVM.

Veja bem, você não vai instalar essa biblioteca mas lá indica as pastas da JVM onde você pode copiar sua dll (ou .so, se você estiver no linux). O grande problema disso é que provavelmente você vai ter que reinicializar seu servidor :roll:

Criado 27 de maio de 2011
Ultima resposta 27 de mai. de 2011
Respostas 2
Participantes 3