Desenvolvedor Java, C# .Net

Anderson Damasio - Seja bem vindo!

Ordenar List em Asp.Net 2.0 - 3.5

clock June 20, 2009 11:35 by author Anderson

Segue exemplo prático 

            List<ProdutoBean> testeList = new  List<ProdutoBean>();
           
            ProdutoBean produtoBean = new ProdutoBean();
            produtoBean.proNome = "c";
            testeList.Add(produtoBean);

            produtoBean = new ProdutoBean();
            produtoBean.proNome = "b";
            testeList.Add(produtoBean);


             produtoBean = new ProdutoBean();
             produtoBean.proNome = "a";
             testeList.Add(produtoBean);

            System.Collections.Generic.IEnumerable<ProdutoBean> teste = testeList;
            teste = teste.OrderBy(i => i.proNome);

 

//Para repassar para a lista novamente use o método toList()
             
            testeList = teste.ToList();

 



Método IsNullOrEmpty - Qual sua utilidade?

clock April 30, 2009 20:37 by author Anderson

Essa é uma das funcionalidade imbutidas .NET, interessante pela razão de não termos a nescessidade de utilizar duas consultas para efetuar a mesma funcionalidade, como por exemplo:

ao invés de:

if ((variavel != "") && (variavel != null)){
...
}

Você faz:
if (!String.IsNullOrEmpty(s)){
...
}


Indica se o objeto String especificado é uma referência nula (Nothing no Visual Basic) ou uma seqüência vazia (Empty string).


Qualquer dúvida mais detalhes aqui:
http://msdn.microsoft.com/pt-br/library/system.string.isnullorempty.aspx



Herança de configurações no Web.Config

clock April 30, 2009 17:51 by author Anderson

O nosso dia a dia é sempre cheio de novidades e isso que deixa os nossos projetos cada vez mais divertidos. Hoje eu tive que fazer alguns ajustes em uma aplicação que está rodando no root do servidor web e possui outras aplicações rodando em baixo dessa mesma pasta.

A grande questão envolvida é que as configurações que inserimos no Web.Config da aplicação principal são propagadas para a aplicação que está em baixo da mesma estrutura de diretório conforme o modelo:

APP00 (Root) (Web.config)
+-----App01 (Web.config)
+-----App02 (Web.config)

Então de uma forma natural você acaba injetando dependências nas outras aplicações que está em baixo dessa mesma estrutura de diretório. Para resolver isso você precisa agir no Web.Config da aplicação principal e adicionar o atributo location com o parâmetro inheritInChildApplications="false" para impedir que configurações sejam propagadas para as outras aplicações. Essa necessidade se torna muito visível principalmente quando você adiciona referencias para módulos http em <system.Web>

<location path="." inheritInChildApplications="false">
    <system.web>
   </system.web>  
</location>


- How to disable web.config Inheritance for Child Applications in Subfolders in ASP.NET
- Bloqueando herança do web.config

 

Fonte:http://www.ramonduraes.net/post/Heranca-de-configuracoes-no-WebConfig.aspx
[],
Ramon Durães
MVP, Especialista em Visual Studio Team System



Exemplo de projeto Silverlight no Visual Studio 2008

clock April 29, 2009 03:24 by author Anderson

 

Download completo do exemplo

1- Para construirmos nosso exemplo vamos precisar ter instalado em nosso computador:- Microsoft Visual Studio 2008
- Microsoft Silverlight Tools
- E claro o plug-in Silvelight 1.1 Alpha

2- Abra o Visual Studio 2008 beta 2 vá no menu
File -> New -> Project -> Visual Basic -> Silverlight -> SilverLight Project e dê o nome testsilverlight para o projeto.

tutorial4_1.jpg
Figura: Criando um projeto Silverlight no Visual Studio 2008

3- Quando um novo projeto Silverlight é criado no Visual Studio 2008 ele cria automaticamente os seguintes arquivos:

3.a- Arquivo HTML: O Visual Studio dá o nome TestPage.html, esse arquivo serve como ponto de partida para o browser carregar o projeto Silvelight e também pode conter outros conteúdo junto com o Silverlight. Veja que ele faz referencia aos arquivos TestPage.html.js e Silverlight.js.

3.b- Arquivo TestPage.html.js: Esse arquivo javascript contém o método createSilverlight que é um modelo para chamar os métodos createObject ou createObjectEx definidos no Silverlight.js

3.c- Arquivo Silverlight.js: Esse arquivo javascript define os métodos createObject e createObjectEx que servem para inicializar o controle Silverlight além de fornecer recursos de instalação do Silvelight para o usuário caso ele não possua o Silverlight instalado.

3.d- Arquivo Page.xaml: Esse arquivo XAML é definido como o parametro “source” nos métodos createSilverlight ou createSilverlightEx e contém o contéudo da interface do projeto Silverlight.

3.e- Arquivo Page.xaml.vb: Esse arquivo VB ou C# serve para gerenciar em tempo de execução os eventos do projeto Silverlight. O código utiliza a mesma classe que foi definida no atributo x:Class do Page.xaml.

tutorial4_2.jpg
Figura: Arquivos do projeto Silverlight

4- Abra o arquivo Page.xaml e insira o seguinte código antes de </Canvas>:

<Canvas x:Name=”Button1″ Canvas.Top=”50″ Width=”100″ Height=”30″ Background=”Gray”>
    <TextBlock>
        <Run Text=”Enter mouse”></Run>
    </TextBlock>
</Canvas>

Esse código XAML nada mais é do que um Texto criado com o TextBlock e agrupado sozinho através do Canvas com o nome Button1.

tutorial4_3.jpg
Figura: Código XAML

5- Abra o Page.xaml.vb e insira o código após o End Sub:

    Private Sub Button1_MouseEnter(ByVal sender As Object, _
    ByVal e As System.Windows.Input.MouseEventArgs) Handles Button1.MouseEnter
        Dim buttonBrush As New SolidColorBrush
        buttonBrush.Color = Colors.Red
        Me.Button1.Background = buttonBrush
        Dim tb As TextBlock = Me.Button1.Children(0)
        tb.Text = “Mouse…”
    End Sub

    Private Sub Button1_MouseLeave(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles Button1.MouseLeave
        Dim buttonBrush As New SolidColorBrush
        buttonBrush.Color = Colors.Gray
        Me.Button1.Background = buttonBrush
        Dim tb As TextBlock = Me.Button1.Children(0)
        tb.Text = “Enter mouse”
    End Sub
   
Esse código representa as ações para os eventos MouseEnter e MouseLeave do Button1 declarado no XAML. Quando o cursor do mouse entra na área do texto o texto é alterado para “Mouse…” e a cor do fundo é alterada. E quando o cursor do mouse sai da área do texto o texto volta para “Enter Mouse” e a cor de fundo volta ao que era.

tutorial4_4.jpg
Figura: Código VB

6- Teste o projeto com menu Debug -> Start Without Debugging (Ctrl + F5), passe o mouse sobre o texto e veja o resultado 

tutorial4_5.jpg
Figura: Testando o projeto


Refêrencia: http://euclideschuma.wordpress.com/2007/10/16/tutorial-3-primeiro-exemplo-de-projeto-silverlight-no-visual-studio-2008/

 



Visual C# 2008 - Primeiro Projeto, Parte 2 de 2

clock April 19, 2009 21:41 by author Anderson

Demonstração de um primeiro projeto em Visual C# 2008 Express Edition usando Console Application. Parte 2 de 2.



Introdução ao RMI

clock April 17, 2009 15:27 by author Anderson
Introdução á Computação Distribuida com RMI

A tecnologia RMI - Remote Method Invocation (Invocação de Métodos Remotos), foi primeiramente introduzida no Java, no JDK versão 1.1, elevando a programação para redes em um patamar mais elevado. Apesar do RMI ser relativamente fácil, ele põe o desenvolvedor Java frente à um novo paradigma, o mundo da computação de objetos distribuídos. Este guia prático vai lhe introduzir à esta tecnologia versátil, que melhorou muito desde sua primeira versão.

Objetivo

O principal objetivo para os criadores (designers) do RMI era permitir os programadores a desenvolverem programas distribuídos em Java com a mesma sintaxe e semântica usada em programas não-distribuídos. Para isso, eles tiveram que mapear cuidadosamente como classes Java e objetos trabalham em uma única Java Virtual Machine (JVM) para um novo modelo de como as classes e objetos trabalhariam num ambiente distribuído de computação (múltiplas JVMs). Os arquitetos do RMI tentaram fazer com que o uso dos objetos distribuídos em Java fosse similar ao uso de objetos Java locais. Esta seção introduz a arquitetura RMI da perspectiva dos objetos Java remotos distribuídos, e explora as diferenças de comportamento com objetos locais. A arquitetura RMI define como os objetos se comportam, como e quando exceções podem ocorrer, como a memória é gerenciada e como os parâmetros são passados e retornados de métodos remotos.

Arquitetura Java RMI

A arquitetura RMI estende a segurança e robustez da arquitetura Java para o mundo da computação distribuída.

Interfaces: O coração do RMI

A arquitetura RMI é baseada em um importante princípio: a definição do comportamento e a implementação do comportamento são conceitos separados. RMI permite que o código que define o comportamento e o código que implementa o comportamento permanecerem separados e rodarem em JVMs separadas. Em RMI, a definição do serviço remoto é codificada usando uma interface Java. A implementação do serviço remoto é codificada em uma classe. Logo, a chave para se entender o RMI é lembrar que as interfaces definem o comportamento e as classes definem a implementação. A classe que implementa o comportamento roda do lado do servidor RMI. A classe que roda no cliente atua como um Proxy para o serviço remoto. Veja o seguinte diagrama: O programa cliente faz chamadas de métodos pelo objeto Proxy, o RMI envia a requisição para a JVM remota e redireciona para a implementação. Qualquer valor retornado pela implementação é devolvido ao Proxy e então ao programa cliente.

Arquitetura de Camadas do RMI

Com o entendimento da arquitetura RMI num alto nível, vamos dar uma breve olhada na sua implementação. A implementação do RMI é essencialmente feita de três camadas de abstração. A camada Stub e Skeleton está abaixo dos olhos do desenvolvedor. Esta camada intercepta as chamadas de métodos feitas pelo cliente para que a variável de referência da interface redirecione essas chamadas para o serviço RMI remoto. A próxima camada é a Remote Reference Layer. Esta camada sabe como interpretar e gerencias referências feitas dos clientes para os objetos do serviço remoto. A conexão do cliente ao servidor é Unicast (uma-para-um). A camada de transporte é baseada nas conexões TCP/IP entre as maquinas em uma rede. Usando essa arquitetura de camadas, cada uma das camadas poderia ser facilmente melhorada ou substituída sem afetar o resto do sistema. Por exemplo, a camada de transporte poderia ser substituída por uma camada que implemente conexões UDP/IP, sem afetar as camadas superiores.

Nomeando Objetos Remotos

Como um cliente acha o serviço remoto RMI? Os clientes acham os serviços remotos usando o serviço de nomeação ou diretório (naming or directory). Isso parece um pouco redundante, mas o serviço de nomeação ou diretório roda como um endereço bem formado (host:port). O RMI pode usar diferentes tipos de serviços de diretório, incluindo o JNDI. O próprio RMI inclue um simples serviço, chamado de RMI Registry. O RMI Registry roda em cada maquina que hospeda o serviço remoto, por definição na porta 1099. Numa máquina host, um programa servidor cria um serviço remoto, primeiramente criando o objeto que implemente aquele serviço. Em seguida ele exporta aquele objeto para o RMI. Quando o objeto é exportado o RMI cria um serviço que aguarda as conexões do cliente. O servidor registra o objeto no RMI Registry, com um nome público. No lado do cliente o RMI Registry é acessado através da classe estática Naming. Ela provém o método lookup( ), que o cliente usa para requisitar o registro. Esse método aceita a URL que especifica o nome do servidor e o nome do serviço desejado. O método retorna uma referência remota para o objeto do serviço. A URL é formada como seguinte:

rmi://<host_name>[:port_number]/<service_name>  

Usando o RMI

Agora vamos trabalhar com um sistema que realmente implementa um sistema com RMI. Vamos criar um aplicativo simples, cliente e servidor, que executa métodos do objeto remoto. Para tanto não necessitamos de duas máquinas distintas ou com IP distintos. O exemplo pode ser rodado na mesma máquina, pois o RMI sabe como trabalhar com isso, mesmo que o host e o cliente sejam na mesma localidade. Um sistema RMI é composto de várias partes:

  • Definição das interfaces para os serviços remotos
  • Implementações dos serviços remotos
  • Arquivos de Stub e Skeletons
  • Um servidor para hospedar os serviços remotos
  • Um serviço de RMI Naming que permite o cliente achar os serviços remotos
  • Um provedor de arquivos de classes (servidor http ou ftp)
  • Um programa cliente que necessita os serviços remotos
    Criando seu aplicativo com RMI
    Agora iremos, de fato, criar um sistema que implemente o RMI, utilizando-se de um programa cliente e um programa servidor. Não utilizaremos um servidor FTP ou HTTP, no entanto utilizaremos os programas na mesma máquina e uma mesma estrutura de diretórios. Os passos a serem seguidos agora são:
  • Escrever e compilar o código Java da interface
  • Escrever e compilar o código Java das implementações das classes
  • Gerar as classes Stub e Skeleton das classes de implementação Crie um diretório para salvar todos os seus arquivos de projeto. Você pode fazer o download do código fonte usado nesse tutorial.
    Interfaces
    O primeiro passo, como dito, será criar a interface e compilá-la. A interface define todas as funcionalidades remotas oferecidas pelo serviço. Nomeio o arquivo como: Mensageiro.java.
    1. import java.rmi.Remote;   
    2. import java.rmi.RemoteException;   
    3.   
    4. public interface Mensageiro extends Remote {   
    5.   
    6.     public void enviarMensagem( String msg ) throws RemoteException;   
    7.     public String lerMensagem() throws RemoteException;   
    8. }  

    Perceba que esta interface estende a classe Remote, e cada assinatura de método declara as funcionalidades do serviço, e que podem gerar uma exceção RemoteException. Salve este arquivo (Mensageiro.java) no seu diretório e compile, com a seguinte linha de comando:
    1. javac Mensageiro.java  

    Implementação
    Agora, você deverá escrever a implementação para o serviço remoto, ou seja, o código a ser executado no ambiente remoto. Nomeia o arquivo como: MensageiroImpl.java.
    1. import java.rmi.RemoteException;   
    2. import java.rmi.server.UnicastRemoteObject;   
    3.   
    4. public class MensageiroImpl extends UnicastRemoteObject implements Mensageiro {   
    5.   
    6.     public MensageiroImpl() throws RemoteException {   
    7.         super();   
    8.     }   
    9.   
    10.     public void enviarMensagem( String msg ) throws RemoteException {   
    11.         System.out.println( msg );   
    12.     }   
    13.   
    14.     public String lerMensagem() throws RemoteException {   
    15.         return "This is not a Hello World! message";   
    16.     }   
    17. }  

    Salve este arquivo (MensageiroImpl.java) no seu diretório e compile, com a seguinte linha de comando:
    1. javac MensageiroImpl.java  

    Observe que a classe se utiliza (estende) da classe UnicastRemoteObject para linkar com o sistema RMI. Neste exemplo a classe estende a classe UnicastRemoteObject diretamente. Isto não é realmente necessário, mas essa discusão fica para uma próxima etapa. Quando uma classe estende a classe UnicastRemoteObject, ele deve prover um construtor que declare que ele pode lançar uma exceção RemoteException, pois quando o método super( ) é chamado, ele ativa o código em UnicastRemoteObject, que executa o link RMI e a iniciação do objeto remoto.
    Stubs e Skeletons
    Gere os arquivos Stubs e Skeletons da classe de implementação que roda no servidor. Para tanto, execute o comando rmic, compilador RMI do JDK.
    1. rmic MensageiroImpl  

    Após a execução deste comando, você deveria ver no seu diretório os arquivos Mensageiro_Stub.class, Mensageiro_Skeleton.class. Servidor O serviço remoto RMI deve ser hospedado em um processo servidor. A classe MensageiroServer é um servidor bem simples, que provê serviços essenciais. Salve o arquivo como: MensageiroServer.java.
    1. import java.rmi.Naming;   
    2.   
    3. public class MensageiroServer {   
    4.   
    5.     public MensageiroServer() {   
    6.         try {   
    7.             Mensageiro m = new MensageiroImpl();   
    8.             Naming.rebind("rmi://localhost:1099/MensageiroService", m);   
    9.         }   
    10.         catch( Exception e ) {   
    11.             System.out.println( "Trouble: " + e );   
    12.         }   
    13.     }   
    14.   
    15.     public static void main(String[] args) {   
    16.         new MensageiroServer();   
    17.     }   
    18. }  

    Salve este arquivo (MensageiroServer.java) no seu diretório e compile, com a seguinte linha de comando: > javac MensageiroServer.java
    Cliente
    O código fonte para o cliente é o seguinte. Salve o arquivo como: MensageiroClient.java.
    1. import java.rmi.Naming;   
    2. import java.rmi.RemoteException;   
    3. import java.rmi.NotBoundException;   
    4. import java.net.MalformedURLException;   
    5.   
    6. public class MensageiroClient {   
    7.   
    8.     public static void main( String args[] ) {   
    9.         try {   
    10.             Mensageiro m = (Mensageiro) Naming.lookup( "rmi://localhost/MensageiroService" );   
    11.             System.out.println( m.lerMensagem() );   
    12.             m.enviarMensagem( "Hello World!" );   
    13.         }   
    14.         catch( MalformedURLException e ) {   
    15.             System.out.println();   
    16.             System.out.println( "MalformedURLException: " + e.toString() );   
    17.         }   
    18.         catch( RemoteException e ) {   
    19.             System.out.println();   
    20.             System.out.println( "RemoteException: " + e.toString() );   
    21.         }   
    22.         catch( NotBoundException e ) {   
    23.             System.out.println();   
    24.             System.out.println( "NotBoundException: " + e.toString() );   
    25.         }   
    26.         catch( Exception e ) {   
    27.             System.out.println();   
    28.             System.out.println( "Exception: " + e.toString() );   
    29.         }   
    30.     }   
    31. }  

    Salve este arquivo (MensageiroClient.java) no seu diretório e compile, com a seguinte linha de comando:
    1. javac MensageiroClient.java  

    Rodando o sistema RMI
    Agora que todos os arquivos do projeto de exemplo foram criados e devidamente compilados, estamos prontos para rodar o sistema! Você precisará abrir três diferentes consoles do MS-DOS no seu Windows, ou outro, caso utilize um diferente sistema operacional. Em um dos consoles vai rodar o programa servidor, no outro o cliente e no terceiro o RMI Registry. Inicie com o RMI Registry. Você deve estar no mesmo diretório em que estão gravados seus arquivos para rodar o aplicativo. Execute a seguinte linha de comando:
    1. rmiregistry  

    Isso irá iniciar o RMI Registry e rodá-lo. No segundo console vamos executar o programa servidor. Você deve estar no mesmo diretório em que estão gravados seus arquivos para rodar o aplicativo. Execute o seguinte comando:
    1. java MensageiroServer  

    Isso irá iniciar, carregar a implementação na memória e esperar pela conexão cliente. No último console, rode o programa cliente. Você deve estar no mesmo diretório em que estão gravados seus arquivos para rodar o aplicativo. Excute o comando:
    1. java MensageiroClient  

    Se tudo correr bem, que é o que esperamos e o que deveria acontecer, a seguinte saída será gerada nos consoles 2 (servidor) e 3 (cliente). No console 2 (servidor):
    1. Hellow World!  

    No console 3 (cliente):
    1. This is not a Hello World! message  

    É isso aí. Você acabou de criar um sistema utilizando a tecnologia RMI. Apesar de você ter rodado os programas na mesma máquina, o RMI usa a pilha de rede TCP/IP para se comunicar entre as três diferentes instâncias da JVM. Espero que tenham gostado e aprendido com esse pequeno exemplo de como se usar o RMI.

  • Fonte:Daniel Destro



    XStream: Trabalhando com facilmente XML em Java

    clock April 17, 2009 15:15 by author Anderson
    Introdução

    Partindo do pressuposto que o leitor já conhece XML e sua importância, este artigo pretende abordar como usar XStream para realizar mapeamento de objetos Java para Documentos XML e vice-versa. Também serão citadas as vantagens e limitações desta ferramenta.

    Caminhos para trabalhar com Java e XML

    Existem diversas formas de se trabalhar com XML e Java, dentre elas, SAX, DOM, Digester. Cada uma serve ao seu propósito. Por exemplo, SAX é estremamente eficiente na leitura de arquivos. DOM, por sua vez oferece um melhor controle da estrutura hierárquica dos documentos XML, sendo mais adequado para a escrita de documentos para os quais não se tem total domínio da estrutura (esquema). Finalmente, Digester oferece uma forma interessante de mapear documentos XML para objetos Java e vice-versa. Entretanto, exige que o mapeamento seja manualmente configurado. E com vocês, XStream! XStream é uma outra forma de realiazar pontes XML-Java. Suas principais características, citadas na página oficial, são:

  • Facilidade de uso. Geralmente só se precisa conhecer uma classe.
  • Não é necessário configurar o mapeamento manualmente. XStream se baseia no mecanismo de Reflection pelo qual é possivel descobir dinamicamente quais os atributos de uma classe Java e os respectivos valores de seus objetos.
  • XML legível e mais compacto que a serialização nativa de Java.
  • Não exige que os objetos sigam alguma regra em particular.
  • Suporta referências duplicadas e circulares dos objetos.
  • Pode ser integrada com outras APIs.
  • A estratégia de conversão pode ser configurada.
  • Realiza uma avaliação prévia se o documento XML não está mal-formado, exibindo eventuais mensagens de erros. A próxima seção abordará um exemplo de como XStream pode ser usado.
    Exemplo passo a passo
    Inicialmente é necessário baixar o arquivo xstream*.jar e o xpp3*.jar em aqui. Na época que este artigo foi escrito, a versões mais novas eram a xstream-1.01 e xpp3-1.1.3.3_min respectivamente. Já mandou baixar? Ótimo. Enquanto você espera o download, pode dar uma expiadinha do problema a ser ilustrado. Suponha que se queira construir uma Agenda Eletrônica Pessoal. Imagine uma agenda para celular. Deseja-se facilidade, eficiência, portabilidade, integração com outros sistemas, e tal. Decide-se então guardar os contatos em XML. Esses contatos são lista de pessoas, que possuem nome, email e um telefone comercial. Esse telefone comercial contém um número para o DDD e o número local. Passa isso, constrói-se as seguintes classes Java:
    1. public class Pessoa {   
    2.     private String nome;   
    3.     private String email;   
    4.     private Telefone foneComercial;   
    5.            
    6.         // métodos Setters e Getters   
    7. }   
    8.   
    9. public class Telefone {   
    10.     int ddd;   
    11.     String numero;          
    12.         // métodos Setters e Getters    
    13. }  

    Ok, até aqui tudo bem. Mas e aí, como uso XStream? Tá saltando uma resposta quentinha na próxima seção. A essas horas, mesmo usando modem, é provável que já tenha terminado de baixar os arquivos. Coloque-os em seu classpath e volte aqui.
    Exemplo passo a passo

    1. import java.util.ArrayList;   
    2. import java.util.List;   
    3.   
    4. import com.thoughtworks.xstream.XStream;   
    5.   
    6. public class TesteXStream {   
    7.     public static void main(String[] args) {   
    8.         // Criando um objeto XStream           
    9.         XStream xstream = new XStream();   
    10.   
    11.         // Criando alguns dados   
    12.         Pessoa vinci = new Pessoa();   
    13.         vinci.setNome("Vinci Pegoretti Amorim");   
    14.         vinci.setEmail("vinci_amorim@yahoo.com.br");   
    15.   
    16.         Telefone foneDoVinci = new Telefone();   
    17.         foneDoVinci.setDdd(55);   
    18.         foneDoVinci.setNumero("5555 5555");   
    19.   
    20.         vinci.setFoneComercial(foneDoVinci);   
    21.         List contatos = new ArrayList(1);   
    22.         contatos.add(vinci);   
    23.   
    24.         // Passando os dados de Objetos Java para XML   
    25.         String contatosEmXML = xstream.toXML(contatos);   
    26.   
    27.         System.out.println("\nContatos em XML:");   
    28.         System.out.println(contatosEmXML);   
    29.   
    30.         // Passando os dados de XML para Objetos Java   
    31.         List amigos = (List) xstream.fromXML(contatosEmXML);   
    32.         Pessoa amigo = (Pessoa) amigos.get(0);   
    33.         Telefone foneDoAmigo = amigo.getFoneComercial();   
    34.   
    35.         System.out.println("\nAmigo como Objeto Java:");   
    36.         System.out.println("Nome: " + amigo.getNome());   
    37.         System.out.println(   
    38.             "Fone Comercial: ("  
    39.                 + foneDoAmigo.getDdd()   
    40.                 + ") "  
    41.                 + foneDoAmigo.getNumero());   
    42.     }   
    43. }  

    Primeiro é necessário importar a classe com.thoughtworks.xstream.XStream e criar um objeto para ela. Depois, deve-se implementar um código como o seguinte:
    1. String mensagemEmXML = xstream.toXML(objetoRaiz);  

    Feito isso, seus dados são passados para XML. Rodando o testeXStream espera-se obter a saída abaixo:
    1. Contatos em XML:   
    2. <list>   
    3.   <Pessoa>   
    4.     <email>vinci_amorim@yahoo.com.br</email>   
    5.     <foneComercial class="Telefone">   
    6.       <ddd>55</ddd>   
    7.       <numero>5555 5555</numero>   
    8.     </foneComercial>   
    9.     <nome>Vinci Pegoretti Amorim</nome>   
    10.   </Pessoa>   
    11. </list>   
    12.   
    13. Amigo como Objeto Java:   
    14. Nome: Vinci Pegoretti Amorim   
    15. Fone Comercial: (555555 5555  

    Se você já conhece outras formas de mapeamento Java-XML certamente estará impressionado com a facilidade de XStream. Mas algumas vezes você pode querer mapear nomes para as tags diferentes do nome da classe. Para fazer isso com XStream basta, após a criação do seu objeto da classe XStream, escrever:
    1. xstream.alias("nomeDoObjetoEmXML", NomeDoObjetoEmJava);  

    Para este caso podería-se fazer algo como:
    1. xstream.alias("contato", Pessoa.class);   
    2. xstream.alias("telefone", Telefone.class);   
    3. xstream.alias("lista", ArrayList.class);  

    A nova saída seria:
    1. Contatos em XML:   
    2. <lista>   
    3.   <contato>   
    4.     <email>vinci_amorim@yahoo.com.br</email>   
    5.     <foneComercial>   
    6.       <ddd>55</ddd>   
    7.       <numero>5555 5555</numero>   
    8.     </foneComercial>   
    9.     <nome>Vinci Pegoretti Amorim</nome>   
    10.   </contato>   
    11. </lista>   
    12.   
    13. Amigo como Objeto Java:   
    14. Nome: Vinci Pegoretti Amorim   
    15. Fone Comercial: (555555 5555  

    Para a maioria dos casos, este conhecimento já é o suficiente. Mas uma visita ao site oficial sempre é recomendado.
    Conclusões
    Como nem tudo são flores, XStream possui algumas limitações. Por exemplo, o texto "Blá" e os atributos do XML abaixo são simplesmente igorados.
    1. <pessoa id="5" sexo="masculino"> Blá   
    2.   <email>vinci_amorim@yahoo.com.br</email>   
    3.   <foneComercial>   
    4.     <ddd>31</ddd>   
    5.     <numero>3899 1994</numero>   
    6.   </foneComercial>   
    7.   <nome>Vinci Pegoretti Amorim</nome>   
    8. </pessoa>  

    Entretando, em situações onde se tem domínio sobre a estrutura a ser usada, isso não representa grandes problemas. Vai trabalhar com XML? A sugestão é: tente usar XStream. Se não for possível, tente outra. Se você entendeu como usar XStream e onde é recomendado o seu uso, a missão foi cumprida. Abraços e até a próxima.
  •  


    Fonte:www.guj.com.br - Vinci Pegoretti Amorim



    Vazamento de memória no Java

    clock April 17, 2009 14:57 by author Anderson
    Introdução

    Garbage Collector == adeus vazamento de memória? Neste pequenino artigo, vamos mostrar como o Garbage Collector não tem como perceber sempre que você não está usando alguma coisa! Isto é, vai ocorrer um "pseudo" vazamento de memória, ou como conhecemos, memory leak. Claro que esse memory leak pode ser evitado. Aqui você vai aprender a ter um poquinho mais de cautela!

    Código

    Vou direto para o exemplo mais clássico! Simulando uma pilha com array de Objects!

    Sutil. não? Imagine que você populou a sua pilha com 1000 objetos. Depois você começou a dar pop, até esvaziar! Tudo ok? Como você viu, não! Você NÃO está mais utilizando aqueles elementos da pilha, e quem esta utilizando a sua classe provavelmente também não está mais, mas mesmo assim você tem referência para aqueles 1000 objetos, enforcando a memória da sua virtual machine, e fazendo o garbage collector de bobo! Para corrigir isso, é mais que óbvio:

    Com este null, o objeto pode ser coletado! Você acha que isto só acontece com arrays, e que você esta a salvo já que usa a poderosa collections framework? Doce ilusão!

    Ok, ok, sei que você poderia usar aqui o java.util.Stack, mas o que eu queria era ilustrar que você não está salvo disto acontecer, especialmente quando mexe com coleções e arrays! Sei que este exemplo que acabo de dar, o cara teria de ser beeeem descuidado, já que o push dele não sobreescreve um elemento que já existir, ele faz pior, ele adiciona no meio!!!!! Quem conhece a ArrayList sabe disso! Portanto, muito cuidado! Se você está mexendo em uma coleção, e utilizando algo para apontar um dos objetos, pense se você precisa manter os outros na coleção!

    Conclusão

    O Garbage Collector é o seu melhor amigo, mas pode deixar você com alguns vícios. Este tipo de problema aparece em inúmeras situações. Você já pode ter implementado algo que "vazasse" memória assim, e nunca percebeu, já que era pequeno. Em uma aplicação grande, isso pode matar a sua JVM! Em um futuro próximo, estamos lançando o tutorial sobre o Garbage Collector básico. E mais para frente, um sobre Weak, Soft e Phantom references do pacote java.lang.ref. É um tópico MUITO interessante para quem gosta de saber como o java realmente funciona!


    Fonte: www.guj.com.br - Paulo Silveira



    Programação Orientada a Objetos usando Java

    clock April 14, 2009 11:41 by author Anderson

    Pessoal segue o Link

    http://www.argonavis.com.br/cursos/java/j100/index.html

    Tem muita coisa boa para quem tem interesse.



    Curso Básico de C# - parte 1

    clock April 14, 2009 10:51 by author Anderson

    Introdução

    Este curso destina-se aqueles que desejam iniciar o aprendizado na linguagem C# desenvolvida especialmente para a plataforma .NET. Ao acompanhar este artigo você aprenderá a criar pequenos aplicativos para desktop. Veremos aqui os conceitos básicos da linguagem C# e a IDE Visual Studio, para um melhor aproveitamento do .NET Framework. Para um melhor entendimento dos artigos que se seguem, é importante conhecimento em lógica de programação.

    A linguagem

    A linguagem de programação C# (lê-se C Sharp) surge como uma evolução da linguagem "C" e destina-se a aplicações utilizando o .NET Framework, utilizando os novos conceitos de Orientação a Objetos (OO).

    O .NET Framework

    Basicamente definido como um componente integral do Windows responsável por fornecer os serviços necessários, para construção e carregamento de aplicações para Windows e Web.

    O . NET Framework utiliza o CLR (Common Language Run Time) sendo uma base para o .NET Framework, disponibilizando:

    • Interoperabilidade de linguagem;
    • Suporte de versões aprimorado;
    • Segurança aprimorada;
    • Garbage Colection.



    Também utiliza o Framework Class Library (Biblioteca de Classes) e tem como agente um serviço de Run Time que gerencia o código durante a execução do aplicativo.

    Definição de variáveis

    Veremos aqui os tipos de variáveis mais utilizadas no desenvolvimento de softwares. Variáveis são definidas como locais de armazenamento temporário de diferentes tipos como: números, palavras, datas e outros, que podem receber resultados de cálculos ou entrada de dados pelo usuário.

    As variáveis devem receber um nome único (dentro de um escopo), para que seja usado como referência ao decorrer do desenvolvimento e deve ter um nome curto e de fácil memorização, não sendo recomendado utilizar variáveis com o mesmo nome diferenciando-as somente por maiúsculas e minúsculas.

    Exemplo:
    nomecliente
    nomeCliente

        
    Isso pode causar confusão para o desenvolvedor, ou seja, usualmente as variáveis são escritas com a primeira letra minúscula e se tiver mais de uma palavra a segunda palavra com a primeira letra maiúscula.

    Exemplo:
    nomeCliente
    sobrenomeCliente
    idadeCliente

        
    Outra prática muito utilizada hoje pelas empresas para um melhor entendimento das variáveis e também para facilitar a manutenção do seu código é no início de cada variável inserir letras minúsculas indicando o tipo da variável que você declarou no inicio do código.

    Exemplo:
    strNomeCliente (variável do tipo string)
    intIdadeCliente (variável do tipo int)

        
    Veja abaixo as variáveis mais utilizadas no desenvolvimento de softwares em C#:

    Descrição dos tipos de dados:
    int = Números inteiros (32 bits por padrão)
    long = Números inteiros (64 bits por padrão)
    float = Números de ponto flutuante (32 bits por padrão)
    double = Números de ponto flutuante (63 bits por padrão)
    decimal = Valores monetários (128 bits por padrão)
    string = Para seqüências de caracteres (16 bits por caractere)
    char = Para somente um caractere (16 bits)
    bool = Valor booleano que pode ser (true) ou (false)

    Para atribuição de valores as variáveis citadas acima você deve utilizar o sinal de (=) que se trata de um operador lógico que veremos nas próximas aulas.

    Exemplos de uso das variáveis:
    int intIdade = 10;
    bool booFumante = false;
    decimal decPagamento = 1000;
    double dblComissão = 1.27;
    char chrSexo = M;
    string strNome = "Einstein";

        
    Ao término da declaração de cada variável deve-se usar (;) para que o Visual Studio entenda que ali se encerra a declaração da variável.

    Conclusão

    Este é o primeiro de uma série de artigos para iniciantes da linguagem C# deixando aberto a idéias e dúvidas através do e-mail: carlos.andrade@fcamara.com.br.
    No próximo artigo iremos aprender sobre operadores lógicos e sua utilização.
    Criado por: Carlos Andrade
    REF:http://www.oficinadanet.com.br

    Veja parte 2 em Curso Básico de C# - Parte 2 - Operadores



    Compartilhe aqui!

    .

    Anderson Damasio

    Desenvolvedor Java e .Net C# atuando na área desde 2004.

    Tags para Pesquisa

    Seja um membro

    Sign in