O documento discute o projeto Mono, que permite rodar aplicações .NET em sistemas não-Windows. Aborda a interoperabilidade entre Java e .NET através do IKVM, e apresenta casos de uso do Mono e do IKVM.
Usando c# para desenvolver app iphone e ipad!!! sim é possível!!!
Interop itcare: Interoperabilidade Java e .NET
1. Alessandro de Oliveira Binhara
Projeto MONO BRASIL
binhara@monobrasil.org
Interoperabilidade
Java e .NET
2. 2
Agenda
Sun (Oracle) X Microsoft
A Plataforma Java A Plataforma Mono
O Projeto Mono
Histórico, Motivações, Rodmap, Features,,
Interoperabilidade de Aplicativos .Net e Java
IKVM
Exemplo Prático
Cases
3. 3
Sun X Microsoft
Sun (Oracle)
Uma Linguagem
Padrão, Manutenção, Comunicação
Foco na Empresa
Microsoft
Muitas Linguagens
Facilidade, Aprendizado, Preferência
Foco no Desenvolvedor
5. 5
Plataforma Java
Linha do Tempo
Green Oak (1991)
*7 (1992)
Internet!!!!
HotJava (1995)
Netscape 2.0 Java enabled (1996)
Primeiro Release Java 1.02 (1996)
7. 7
Padrões X Implementações
Padrões
Especificação da linguagem Java - java.sun.com/docs/books/jls
Especificação da JVM - java.sun.com/docs/books/vmspec
Especificações da plataforma J2EE - java.sun.com/j2ee
Implementações
www.java.sun.com- implementação dos padrões Java
www.ibm.com - implementação dos padrões Java
www.gnu.org/software/classpath - implementação livre do JavaCore
www.ikvm.net/ - implementação da JVM e suas classes em .NET e
também ferramentas que permitem interoperabilidade entre Java e .NET
9. 9
Plataforma .NET nasce em 2001
Microsoft Lança a plataroma .Net
Coloca o C# como um padrão
O Core do .Net é colocado como padrão
Plataforma Microsoft .Net
Mult-linguagem
Coletor de Lixo
C# tem mais recursos que o java
10. 10
O Padrão é ECMA/ISO
As especificações do Framework .Net
padronizadas pelo ECMA abordam o compilador
e a runtime
O compilador C# é o ECMA 334
O CLI (Common Language Infrastructure) é o
ECMA 335
Permite que as aplicações rodem independentes
de plataforma de hardware e de software básico
14. 14
Common Language Runtime CLR
Motivos:
Diminuir a combinação Linguagens x CPUs
Operações simplificadas e unificadas entre plataformas
Portabilidade e Segurança
História:
~ 1970: P-Code (Pascal), D-Code (Gardens):
1 byte por instrução
~ 1990: Bytecode Java
Informação simbólica embutida
Offsets resolvidos na hora do “deployment”
17. 17
Plataforma Mono
Muitas Linguagem e Muitas Plataformas
Aproveita todas as características do mundo
OpenSource
Grande acesso a documentação JAVA e .NET
Diversos Centros de capacitação já constituídos
Comercialmente já aceito
“Existe alguma grande empresa que de
suporte?”
18. 18
Microsoft lança o .NET
Projeto MONO
Miguel busca uma nova plataforma
para melhorar seus projetos.
Microsoft Lança a plataforma .Net
Coloca o C# como um padrão
O Core do .Net é colocado como padrão
Padrões ECMA 334 , ECMA 335
Plataforma Microsoft .Net
Multi-linguagem
Coletor de Lixo
19. 19
O que é ?
Projeto MONO
Mono é uma implementação OpenSource do
.NET Permite a execução e desenvolvimento de
software .Net em ambiente Não Windows.
Suporte a C# 4.0 como padrão
Parallel Framework
Performance
Large performance improvements
LLVM support has graduated to stable
Preview of the Generational Garbage Collector
Version 2.0 of the embedding API
WCF Routing
25. 25
O que é O IKVM?
O IKVM é uma VM JAVA escrita em C# que
possibilita executar byte code Java no Mono
além de um conjunto de ferramentas para
conversão bytecode (java) -> IL (mono) e
IL (mono)-> bytecode (java)
http://www.ikvm.net
30. 30
Como posso usar o IKVM?
Rodando uma Classe Java (dinamicamente)
Complilando um ByteCode para CLI (.jar->.dll)
Compilando um CLI para ByteCode (.dll -> .jar)
Usar uma classe Java no C#
Usar uma classe C# no Java
31. 31
Rodando uma aplicação java no Mono
-> javac *.java
-> jar cfm hello.jar manifest.mf Hello.class
-> ikvmc -reference:/usr/lib/ikvm/IKVM.GNU.Classpath.dll
hello.jar
-> mono hello.exe
32. 32
Usando uma Classe Java dentro do C#
(jar -> dll)
-> mcs -reference:IKVM.GNU.ClassPath hodgepodg.cs
-> mono hodgepodge.exe
Classe Java
Código Java
33. 33
Usando as bibliotecas do Mono dentro do
Java (dll -> jar)
PASSOS:
1) Gerar os stubs de .NET para Java, isto irá resultar em um
arquivo mscorlib.jar
2) Quando compilar as classes java irão fazer uso das bilbiotecas .NET
bastando incluir o mscorlib.jar no classpath
3) Podemos ter 2 resultados:
- criação dos binários Java para executá-los no IKVM
- ou a conversão desses binários Java para . NET
COMANDOS
-> ikvmstub mscorlib.dll
-> javac -classpath mscorlib.jar *.java
-> ikvmc -reference:IKVM.GNU.Classpath.dll CreateFile.class
-> ikvmc -reference:IKVM.GNU.Classpath.dll ShowDir.class
36. 36
Estendendo uma classe Java em C#
1) Criar a classe Java : “Subject.java”
2) Extender essa classe dentro do C#: “Exntesion.cs”
3) Compilar a classe java e gerar o .JAR
4) Converter o .JAR para um .DLL com o IKVM
5) Compilar a classe extension.cs com mono
COMANDOS
-> javac *.java
-> jar cvf subject.jar *.class
-> ikvmc -reference:IKVM.GNU.Classpath.dll subject.jar
-> mcs -reference:IKVM.GNU.Classpath.dll -reference:subject.dll
extension.cs -out:extension.exe
39. 39
Mono Movies Flash
Aplicação Multi-linguagem
Criar classe MyClass.java (desenha um gráfico na tela)
A classe java usa as bibliotecas Mono (GTK#) para desenhar
na tela
Criar uma aplicação Boo para executar a classe Java
Passos: compilar o Java -> converte para DLL -> compilar a
aplicação Boo
42. 42
Ellipse.boo
import system
class Ellipse (Figure)
protected w
protected h
def construct (x,y,rw,rh)
super(x,y)
w = rw
h = rh
override def print ():
Console.Write("Ellipse [w:" + w + " h:" + h "] ")
super()
Herança
Chamada a super
Classe
44. 44
CASE Kidux
Sistema para controle parental em uma distribuição linux para
crianças
Softwares em suma maioria escritos em java
Mudança de requisito: Rodar no Windows
Tem que ser simples de instalar
Alta integração com windows
Problemas :
Necessidade da VM java
Instalador grande(+10MB) difícil de fazer donwload
Com IKVM
Não precisa mais do java
Caiu para menos de 2MB o tamanho
Fácil integração com windpw
45. 45
Case Projeto Rhodes
Projeto Militar
Requisitos:
Desenvolvimento Rápido
Prototipagem rápida
Baixo consumo de Banda
Várias interfaces com usuário
Redundância de Plataforma (Java, Mono e .NET)
47. 47
CASE : Arquitetura Jsenna
Regras de Negócio em XML
Framework Jsenna
Abstração servidor de aplicação
Implementação
Em Aspx Mono
Implementação
J2EE
Refactoring JSenna,
JBanana, Jolt
Frameworks Portados
JBanana
Jolt
Venus
Log4J
Jasper
JDBC
PostgreSQL
MySQL
É possível hoje
conectar no MySQL
usando JDBC no
Mono!!