MD COADS 2011 2 01.Pdf
Total Page:16
File Type:pdf, Size:1020Kb
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ – UTFPR CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANDRÉ RICARDO GNHOATO USO DA BIBLIOTECA DPLOT JR COM JAVA E UM COMPARATIVO ENTRE DUAS INTERFACES DE ACESSO: JAVA NATIVE INTERFACE E JAVA NATIVE ACCESS MEDIANEIRA 2011 ANDRE RICARDO GNHOATO USO DA BIBLIOTECA DPLOT JR COM JAVA E UM COMPARATIVO ENTRE DUAS INTERFACES DE ACESSO: JAVA NATIVE INTERFACE E JAVA NATIVE ACCESS Pré-Projeto apresentado à disciplina de Trabalho de Diplomação, do Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas – COADS – da Universidade Tecnológica Federal do Paraná – UTFPR, como requisito parcial para obtenção do título de Tecnólogo. Orientador: Prof. Paulo Lopes de Menezes, MSc. MEDIANEIRA 2011 Ministério da Educação Universidade Tecnológica Federal do Paraná Diretoria de Graduação e Educação Profissional Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas TERMO DE APROVAÇÃO USO DA BIBLIOTECA DPLOT JR COM JAVA E UM COMPARATIVO ENTRE DUAS INTERFACES DE ACESSO: JAVA NATIVE INTERFACE E JAVA NATIVE ACCESS Por André Ricardo Gnhoato Este Trabalho de Diplomação (TD) foi apresentado às 08:20 h do dia 29 de Novembro de 2011 como requisito parcial para a obtenção do título de Tecnólogo no Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas, da Universidade Tecnológica Federal do Paraná, Campus Medianeira. O candidato foi arguido pela Banca Examinadora composta pelos professores abaixo assinados. Após deliberação, a Banca Examinadora considerou o trabalho aprovado. Prof. MSc. Paulo Lopes de Menezes Prof. Nelson Miguel Betzek UTFPR – Campus Medianeira UTFPR – Campus Medianeira (Orientador) (Convidado) Prof. M.Eng Juliano R Lamb Prof. M.Eng. Juliano R Lamb UTFPR – Campus Medianeira UTFPR – Campus Medianeira (Convidado) (Responsável pelas atividades de TCC) A folha de aprovação assinada encontra-se na Coordenação do Curso. RESUMO GNHOATO, André Ricardo. Uso da biblioteca DPLOT Jr com Java utilizando Java Native Interface (JNI). 2011. Trabalho de Conclusão de Curso, Universidade Tecnológica Federal do Paraná. Medianeira, 2011. O presente trabalho é um estudo de duas ferramentas para acesso de bibliotecas nativas na plataforma Java. São apresentadas as características de cada uma bem como as suas funcionalidades. No final é apresentado um breve estudo de caso onde a ferramenta destacada como a mais adequada para o propósito do trabalho está aplicada em conjunto com uma biblioteca nativa do sistema operacional Windows . Palavras chave: JNA, JNI, DPLOT, aplicação nativa. RESUMO EM LINGUA ESTRANGEIRA GNHOATO, André Ricardo. Use of library DPLOT Jr with java using Java Native Interface (JNI). 2011. Work of Conclusion of Course. Federal Technological University of Paraná. Medianeira, 2011. This work is a study of two tools to access native libraries on the Java platform. Presents the characteristics of each one and features. At the end is a brief study case where the tool highlighted with better use for the purpose of the work, together with a native library Windows operating system. Keywords: JNA, JNI, DPLOT, native application. LISTA DE SIGLAS API Application Programming Interface C/C++ Programming Languages C e C plus plus CPU Central Processing Unit DLL Dynamic Language Library DPLOT JR Biblioteca Nativa para geração de gráficos HTML HyperText Markup Language JDK Java Development Kit JNA Java Native Access JNI Java Native Interface JRE Java Runtime Environment JVM Java Virtual Machine LISTA DE FIGURAS Figura 1- Papel do JNI .............................................................................................................. 12 Figura 2 - Criação de um objeto proxy Java para uma DLL .................................................... 21 Figura 3 - Passos para Escrever e Rodar o exemplo “OlaMundo” ........................................... 22 Figura 4 - Caixa de Mensagem com informações de erro de versão ........................................ 36 Figura 5 - Casos de Uso da aplicação ....................................................................................... 39 Figura 6 - Diagrama de Classe da aplicação............................................................................. 39 Figura 7 - Métodos disponíveis no objeto lib ........................................................................... 40 Figura 8 - Representação do gráfico gerado pela biblioteca nativa .......................................... 42 LISTA DE QUADROS Quadro 1 - Mapeamento ........................................................................................................... 17 Quadro 2 - Declaração do método nativo ................................................................................. 23 Quadro 3 – Comando para compilar a classe Java ................................................................... 24 Quadro 4 - Comando para gerar o cabeçalho JNI .................................................................... 24 Quadro 5 - Conteúdo do cabeçalho JNI.................................................................................... 24 Quadro 6 - Implementação C.................................................................................................... 25 Quadro 7 - Comando para construir a biblioteca nativa ........................................................... 25 Quadro 8 - Comando para executar a classe HelloWorld ......................................................... 26 Quadro 9 - Resultado da execução da classe HelloWorld ........................................................ 26 Quadro 10 - Declaração da interface de mapeamento .............................................................. 27 Quadro 11 - Interface IDplotLib ............................................................................................... 40 Quadro 12 - Carregamento dinâmico da biblioteca nativa ....................................................... 40 Quadro 13 - Método responsável por gerar o gráfico ............................................................... 41 SUMÁRIO 1 INTRODUÇÃO ............................................................................................................. 8 1.1 OBJETIVO GERAL ....................................................................................................... 8 1.2 OBJETIVOS ESPECÍFICOS ......................................................................................... 9 1.3 JUSTIFICATIVA ........................................................................................................... 9 1.4 ESTRURA DO TRABALHO ....................................................................................... 10 2 REVISÃO BIBLIOGRÁFICA .................................................................................. 11 2.1 JNI – JAVA NATIVE INTERFACE ........................................................................... 11 2.1.1 Objetivos do projeto JNI ............................................................................................... 12 2.1.2 Mapeamento de tipos .................................................................................................... 13 2.1.3 Refêrencias locais e globais .......................................................................................... 14 2.1.3.1 Referência local ............................................................................................................ 14 2.1.3.2 Referência global .......................................................................................................... 14 2.1.3.3 Referência global fraca ................................................................................................. 15 2.1.4 Suporte a reflexão ......................................................................................................... 15 2.2 JNA – JAVA NATIVE ACCESS ................................................................................. 16 2.2.1 Recursos JNA ............................................................................................................... 16 2.2.2 Mapeamento de biblioteca ............................................................................................ 17 2.2.3 Mapeamento da função ................................................................................................. 18 2.2.4 Mapeamento de tipos .................................................................................................... 18 2.2.4.1 Marshalling/Unmarshalling (Java/Native Tipos de conversão) ................................... 18 2.2.4.2 Arrays Primitivos .......................................................................................................... 19 2.2.4.3 Ponteiros ..................................................................................................................... 19 2.2.4.4 Buffer/ Memory Blocks ................................................................................................ 19 2.2.4.5 Callbacks (Function Pointers) ...................................................................................... 20 2.2.4.6 Estruturas ..................................................................................................................... 20 2.2.5 Mapeamento de Invocação ........................................................................................... 20 2.2.6 Dados da Biblioteca Global .......................................................................................... 20 2.2.7 Um Proxy para a DLL .................................................................................................