Alessandro de Oliveira Binhara
Projeto MONO BRASIL
binhara@monobrasil.org
Interoperabilidade
Java e .NET
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
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
Plataforma JAVA
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)
6
Mire no elefante e acerte na mosca!
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
Plataforma .NET
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
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
11
Interoperabilidade entre Linguagens
12
Linguagens Disponíveis
Ada for .NET – A# (http://www.usafa.af.mil/df/dfcs/bios/mcc_html/a_sharp.cfm)
VisualBasic.NET – mbas e bmcs (http://www.mono-project.com)
ANSI C
CSCC - http://www.gnu.org/projects/dotgnu/pnet.html
ICC - http://www.cs.princeton.edu/software/lcc/
C# - mcs (mono-project) e cscc (DotGNU)
Eiffel - Eiffel ENViSioN! (Eiffel Software)
Fortran - Lahey/Fujitsu Fortran for .NET (Lahey Computer Systems, Inc.)
Cobol
NetCOBOL - COBOL for .NET (Fujitsu -)
Net Express (Micro Focus)
KICKS for .NET™ (Intensity Software)
Hasquel - Hugs98 for .NET http://galois.com/~sof/hugs98.net/
Lisp
RDNZL - http://www.weitz.de/rdnzl/
Foil - http://foil.sourceforge.net/
L Sharp .NET - http://www.lsharp.org/
13
Linguagens Disponíveis
Python
IronPython - http://www.ironpython.com/
Python for .NET compiler - http://starship.python.net/crew/mhammond/dotnet/
Python for .NET - http://www.zope.org/Members/Brian/PythonNet/index_html
Boo
Liguagem Boo - http://boo.codehaus.org/
Ruby
Ruby/.NET - http://www.saltypickle.com/rubydotnet/
NETRuby - http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/nrb.html
Smalltalk
SmallScripts - http://www.smallscript.org/
#Smalltalk
LSWVST.Net - http://www.lesser-software.com/en/content/products/lswvst/lswvst-net.htm
Prolog
P # - http://www.dcs.ed.ac.uk/home/jjc/psharp/psharp-1.1.3/dlpsharp.html
TCL/TK
Mailframe - http://www.mailframe.net/Products/TCL/
TickleSharp - http://forge.novell.com/modules/xfmod/project/?ticklesharp
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”
Plataforma Mono
16
Motivações
Projeto MONO
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
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
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
20
Multi-Linguagem e Multi-plataforma
21
O que é ?
Projeto MONO
22
Contribuições Microsoft
MS-PL or Apache Licensed Libraries
Ajax.NET, ASP.NET MVC1, MVC2,
Silverligth ToolKit, Silverligth Tests
Managed Extensibility Framework (MEF)
System.Data.Services.Client (OData)
Dynamic Language Runtime
23
Suporte C# 3.0 e 4.0
mcs: compilador para rutime 1.1.
gmcs: compilador para runtime the 2.0 runtime.
smcs: compiledor para rutime 2.1para compilar
aplicações Moonlight.
dmcs: iniciado com Mono 2.6 para C# 4.0
Características já suportadas:
anonymous methods , iterators,partial classes , Generics , Nullable Types,
friend assemblies , static classes, property accessor accessibility, fixed
buffers, external assembly alias, namespace alias qualifier , inline warning
control , Extension Methods, LINQ syntax, Expression trees, Automatic
properties, Lambda expressions, Anonymous types.
IKVM
Interoperabilidade JAVA e
.NET
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
26
Java Virtual Machine
27
JAVA na IKVM
28
JAVA na IKVM
29
Instalação da IKVM
apt-get install IKVM
SUSE use o YAST
No redhat tem pacotes prontos
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
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
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
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
34
CreateFile.java
Biblioteca Mono
35
ShowFile.java
Biblioteca Mono
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
37
Herança!!!!! Subject.java
38
Herança !! Extencion.cs
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
40
Exemplo
41
Figure.java
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
43
Circle.cs
Herança
Chamada a super
Classe
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
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)
46
CASE Jsenna
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!!
48
Alessandro de Oliveira Binhara
Projeto MONO BRASIL
binhara@monobrasil.org
O Projeto Mono: Aplicações
.NET para sistemas não
Windows

Interop itcare: Interoperabilidade Java e .NET

  • 1.
    Alessandro de OliveiraBinhara Projeto MONO BRASIL binhara@monobrasil.org Interoperabilidade Java e .NET
  • 2.
    2 Agenda Sun (Oracle) XMicrosoft 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
  • 4.
  • 5.
    5 Plataforma Java Linha doTempo Green Oak (1991) *7 (1992) Internet!!!! HotJava (1995) Netscape 2.0 Java enabled (1996) Primeiro Release Java 1.02 (1996)
  • 6.
    6 Mire no elefantee acerte na mosca!
  • 7.
    7 Padrões X Implementações Padrões Especificaçãoda 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
  • 8.
  • 9.
    9 Plataforma .NET nasceem 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
  • 11.
  • 12.
    12 Linguagens Disponíveis Ada for.NET – A# (http://www.usafa.af.mil/df/dfcs/bios/mcc_html/a_sharp.cfm) VisualBasic.NET – mbas e bmcs (http://www.mono-project.com) ANSI C CSCC - http://www.gnu.org/projects/dotgnu/pnet.html ICC - http://www.cs.princeton.edu/software/lcc/ C# - mcs (mono-project) e cscc (DotGNU) Eiffel - Eiffel ENViSioN! (Eiffel Software) Fortran - Lahey/Fujitsu Fortran for .NET (Lahey Computer Systems, Inc.) Cobol NetCOBOL - COBOL for .NET (Fujitsu -) Net Express (Micro Focus) KICKS for .NET™ (Intensity Software) Hasquel - Hugs98 for .NET http://galois.com/~sof/hugs98.net/ Lisp RDNZL - http://www.weitz.de/rdnzl/ Foil - http://foil.sourceforge.net/ L Sharp .NET - http://www.lsharp.org/
  • 13.
    13 Linguagens Disponíveis Python IronPython -http://www.ironpython.com/ Python for .NET compiler - http://starship.python.net/crew/mhammond/dotnet/ Python for .NET - http://www.zope.org/Members/Brian/PythonNet/index_html Boo Liguagem Boo - http://boo.codehaus.org/ Ruby Ruby/.NET - http://www.saltypickle.com/rubydotnet/ NETRuby - http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/nrb.html Smalltalk SmallScripts - http://www.smallscript.org/ #Smalltalk LSWVST.Net - http://www.lesser-software.com/en/content/products/lswvst/lswvst-net.htm Prolog P # - http://www.dcs.ed.ac.uk/home/jjc/psharp/psharp-1.1.3/dlpsharp.html TCL/TK Mailframe - http://www.mailframe.net/Products/TCL/ TickleSharp - http://forge.novell.com/modules/xfmod/project/?ticklesharp
  • 14.
    14 Common Language RuntimeCLR 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”
  • 15.
  • 16.
  • 17.
    17 Plataforma Mono Muitas Linguageme 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
  • 20.
  • 21.
    21 O que é? Projeto MONO
  • 22.
    22 Contribuições Microsoft MS-PL orApache Licensed Libraries Ajax.NET, ASP.NET MVC1, MVC2, Silverligth ToolKit, Silverligth Tests Managed Extensibility Framework (MEF) System.Data.Services.Client (OData) Dynamic Language Runtime
  • 23.
    23 Suporte C# 3.0e 4.0 mcs: compilador para rutime 1.1. gmcs: compilador para runtime the 2.0 runtime. smcs: compiledor para rutime 2.1para compilar aplicações Moonlight. dmcs: iniciado com Mono 2.6 para C# 4.0 Características já suportadas: anonymous methods , iterators,partial classes , Generics , Nullable Types, friend assemblies , static classes, property accessor accessibility, fixed buffers, external assembly alias, namespace alias qualifier , inline warning control , Extension Methods, LINQ syntax, Expression trees, Automatic properties, Lambda expressions, Anonymous types.
  • 24.
  • 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
  • 26.
  • 27.
  • 28.
  • 29.
    29 Instalação da IKVM apt-getinstall IKVM SUSE use o YAST No redhat tem pacotes prontos
  • 30.
    30 Como posso usaro 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çãojava 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 ClasseJava dentro do C# (jar -> dll) -> mcs -reference:IKVM.GNU.ClassPath hodgepodg.cs -> mono hodgepodge.exe Classe Java Código Java
  • 33.
    33 Usando as bibliotecasdo 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
  • 34.
  • 35.
  • 36.
    36 Estendendo uma classeJava 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
  • 37.
  • 38.
  • 39.
    39 Mono Movies Flash AplicaçãoMulti-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
  • 40.
  • 41.
  • 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
  • 43.
  • 44.
    44 CASE Kidux Sistema paracontrole 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 ProjetoMilitar 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)
  • 46.
  • 47.
    47 CASE : ArquiteturaJsenna 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!!
  • 48.
  • 49.
    Alessandro de OliveiraBinhara Projeto MONO BRASIL binhara@monobrasil.org O Projeto Mono: Aplicações .NET para sistemas não Windows