Posts Tagged ‘jboss’

Mobicents: Arquitetura de uma plataforma de comunicações

maio 6, 2010

Como já foi dito no post inicial da série o Mobicents é um servidor de aplicação focado em aplicações de convergentes, entende-se por aplicações de convergentes aquelas que demandam de todos os recursos que um servidor de aplicações padrão (Web Container, Message Driven Beans, Enterprise JavaBeans, ORM, etc.) fornecem, e além disto, demandam de suporte a diversos protocolos de comunicação Real Time (SIP, XMPP/Jabber, MGCP, etc.), possibilitando a implementação de aplicações que integram recursos web com recursos de telecomunicações.

O Mobicents é a primeira implementação Opensource da JSR-240 JAIN SLEE (Service Logic Execution Environment) esta JSR define uma padrão para o desenvolvimento de um container para aplicações de telecomunicações que exigem um ambiente de execução de aplicações de alta capacidade de Throughput, com baixa latência, e alta escalabilidade, mais detalhes sobre o JAIN SLEE pode ser visto em: http://www.jainslee.org

Neste post iremos fornecer uma visão geral sobre a arquitetura do Mobicents, e também sobre os recursos fornecidos pelo mesmo.

O Mobicents foi desenvolvido em cima do JBoss, portanto ele desfruta de todos os recursos que o mais famoso servidor de aplicações open source fornece, tais como: console de gerenciamento Web, interface de gerenciamento JMX, SNMP, Container Web, JMS, EJB, ORM, etc.

A novidade que o Mobicents traz, fica por conta dos Resource Adapters ou simplesmente RA, pois todos os protocolos de comunicações suportados por ele são implementados como um RA, na figura abaixo temos as principais camadas da arquitetura do Mobicents:

Arquitetura Mobicents

JSLEE + J2EE Application Server

Container de aplicações, nesta camada temos o JBoss como um servidor de aplicações JavaEE, e além disto temos a implementação do JAIN SLEE, esta camada é responsável pela hospedagem das aplicações e gerenciamentos dos seus diversos recursos.

Management Interfaces

Nesta camada temos todas as interfaces de gerenciamento fornecidas pelo JBoss, Web Management Console, JMX Console, SNMP, etc. desta forma todos os recursos e aplicações disponíveis no Mobicents podem ser gerenciadas por todas as interfaces fornecidas pelo mesmo.

External Resources

Esta é a camada responsável por trazer todos os protocolos de comunicações, e/ou recursos necessários para o desenvolvimento de aplicações de telecomunicações para dentro do Application Server possibilitando as aplicações se utilizarem deste recursos externos que são chamados de RA ou Resource Adapters.

Cada Resource Adapter é responsável pela implementação de um protocolo de comunicação, ou de controle de um recurso externo, desta forma, temos RA’s para implementar protocolos como: SIP, Jabber, XMPP, MGCP, Diameter, dentre outros, e temos RA’s para controlar o Asterisk, e o próprio Mobicents MediaServer para agregar a capacidade de processamento de media (gravação, reprodução de aúdio e vídeo, reconhecimento de dígitos, transcodificação, etc.) dentro das aplicações.

Abaixo temos um exemplo, de qual componente roda em qual camada, além de exemplificar como as mesma se comunicam:

Funcionalidades fornecidas pelo Mobicents:

Protocolos de comunicações suportados

  • SIP
  • Jabber
  • XMPP/Jingle
  • Parlay
  • Diameter
  • MGCP
  • SMPP
  • SS7
  • Camel
  • XCAP
  • TCAP

Recursos de Media

  • RTP formats: G711, G729, GSM, SPEEX, PCM 16bit 8-44kHz (Mono/Stereo)
  • Audio Codecs: G711,G729,GSM, SPEEX
  • Geração e Detecção de sinais DTMF, BUSY, etc. for inband and outofband (RFC-2833) mode
  • Media files *.wav (G711, GSM, PCM), *.spx(SPEEX), *.gsm

Recursos JavaEE

  • JSP Container
  • JMS
  • MDB
  • EJB
  • LDAP
  • HTTP/HTTPS
  • JMX
  • SNMP
  • Etc.

Alta disponibilidade

  • Load Balancer
  • Multi node cluster
  • Session replication

Performance

  • Capacidade de processar até 750 Caps em um único servidor.
  • Possbilidade de montar um cluster com multiplos servidores em Load Balance

Aplicações que podem ser implementadas sob o Mobicents

  • Aplicações IVR
  • Voicemail
  • Unified Messaging
  • Plataforma de Pré pago
  • Plataforma de 0800
  • Softswitch
  • Location Based Services
  • Instant Messaging
  • Presence Server
  • Etc.

Como vocês podem ver quando se trata de aplicações para a Telecom o céu é o limite do Mobicents, pois com todos os recursos que ele já tem embutido mais as possibilidade que o próprio JBoss tem, é uma questão de criatividade, e tempo para implementar uma aplicação.

Abraços,

Antonio Anderson Souza

Anúncios

Colocando o Mobicents com SeamTelcoFramework para rodar

maio 6, 2010

Este post é um tutorial que visa guiar a instalação completa do ambiente de desenvolvimento de aplicações de telecomunicações com foco no protocolo SIP e tratamento de recursos de Media, utilizando o Mobicents e o SeamTelcoFramework o exemplo mais clássico deste tipo de aplicações são as tão famosas URA’s.

Estou utilizando um CentOS 5.4 como base para este tutorial, para quem estiver utilizando este tutorial em outro S.O. só tome cuidado com os caminhos de diretórios, pois podem ser diferentes.

Instalando o Eclipse

Efetue o Download do Eclipse Galileo Eclipse IDE for Java EE Developers para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/eclipse

Instalando o Mobicents

Efetue o Download do Mobicents 1.0 com Jboss 4.2.3 (estamos utilizando esta versão pois o SeamTelcoFramework ainda não é compatível com o Mobicents 2 e JBoss 5), para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/mss-1.0-jboss-4.2.3.GA

Instalando plugins necessários para o eclipse

  1. Adicione o Jboss tools update site através do menu “Window” > “Preference” > “Install/Update” > “Available Software”
  2. Vá no menu “Help” > “Intall Software”
  3. Selecione o site “Jboss Tools” (site que foi adicionado no passo 1)
  4. Selecione os pulgins listados abaixo que estão dentro de “All JBoss Tools” e prossiga com a instalação dos mesmos:
  • JBoss Tools RichFaces
  • JBossAS Tools
  • JBoss Seam

Instalar o Seam Runtime

Efetue o Download do JBoss Seam 2.1.1GA, para instalar o mesmo basta descompactar na pasta desejada.

Apenas para referencia o meu foi instalado em:

/home/usuario/apps/jboss-seam-2.1.1.GA

Configurando o JBoss Runtime Environment no Eclipse

Vá em “Window”> “Preferences” > “Server” > “Runtime environments” e adicione o Mobicents como um JBoss Community 4.2

Vá em “Window” > “Show view” > “Servers” Adicione um novo servidor baseado no JBoss 4.2 Runtime environment.

Configurando o Seam Runtime no Eclipse

Vá em “Window”> “Preferences” > “JBoss Tools” > “Web” > “Seam” e adicione o JBoss Seam 2.1.1

Pronto neste momento o seu ambiente de desenvolvimento está totalmente instalado, agora é começar a brincar com um projeto.

Criando o primeiro projeto

Crie um novo projeto do tipo “Seam web project”, clique em next até o formulário “Configure Seam Facts Settings”, neste formulário faca as seguintes configurações:

  • Crie um datasource
  • Renomeia os pacotes padrão para um nome apropriado
  • Desative a checkbox “create test project” (Não abordarei sobre os testes neste tutorial).
  • Feito isto clique em “Finish”

Ativar o SeamTelcoFramework em nosso projeto

Adicione os seguintes arquivos a pasta “WEB-INF/lib” do projeto:

Adicione o arquivo sip.xml ao diretório “WEB-INF” do projeto.

Pronto neste momento já temos tudo pronto para começarmos a implementar a lógica da aplicação.

Criando uma Classe para tratar as chamadas SIP

Adicione a classe FirstTelcoClass.java dentro do pacote “<seu pacote>.session”, esta classe implementa uma simples lógica de observar as requisições SIP (INVITE, BYE), quando receber um INVITE atender a chamada e anexar uma sessão de media do Mobicents a mesma, reproduzir um arquivo wav para que você possa ouvir a aplicação funcionando, e depois fazer um eco dos dígitos recebidos (a cada DTMF que você discar a aplicação reproduzirá o mesmo audio).

Inicie a o Servidor, aguarde até 0 Seam iniciar, pois as vezes ele demora algums segundos para subir, para ter certeza que o Seam iniciou verifique a seguinte mensagem no console “13:39:41,641 INFO  [SipApplicationDispatcherImpl] SipApplicationName : FirstTelcoProject/ServletName : SeamEntryPointServlet

Configurando o Mobicents para rotear as request INVITE para nossa aplicação

Após o servidor ter iniciado abra um browser com o seguinte endereço: http://127.0.0.1:8080/sip-servlets-management na coluna que tem o header INVITE adicione a nossa aplicação, apos adicionar clique em save.

Agora nossa aplicação esta pronta para atender chamadas e falar conosco.

Configurando o Ekiga para fazer chamadas

Adicione uma nova conta no Ekiga “Edit” > “Accounts”  > “New” e configure a mesma igual a imagem ao lado (senha pode colocar qualquer coisa).

Não esqueća de ativar a conta criada, deixando ativo a checkbox da mesma.

Hora de testar se tudo isto que fizemos esta funcionando

Utilizando o Ekiga digite qualquer string na caixa de texto na tela principal do mesmo, e clique no icone localizado a direita desta caixa de texto, neste momento o Ekiga enivará uma request INVITE para a nossa aplicaćão, que da forma que esta programada atendera a chamada e reproduzira um audio.

Bom pessoal é isto, agora já temos uma aplicaćão de telefonia baseada no SeamTelcoFramework rodando dentro do Mobicents, agora é hora de botar a sua cachola para funcionar e modificar esta aplicaćão adicionando novas funcionalidades, se quiser depurar a mesma é só colocar um breakpoint no eclipse e fazer a chamada no Ekiga.

Espero que este conetúdo seja util para vocês, qualquer duvida, sugestão, whatever deixa o seu comentário aqui, pois teremos prazer em responder.

Referencias:

http://groups.google.com/group/mobicents-public/web/seam-telco-framework-for-sip-servlets

http://groups.google.com/group/mobicents-public/web/user-guide

Abraços,

Antonio Anderson Souza

Palestra: Seam e Web Beans – Falando em Java 2009

maio 25, 2009

Jboss Seam e Web Beans

Palestra ministrada por Alessandro Lazarotti (Red Hat) e Ricardo Nakamura (Caelum)

Alessandro e Ricardo mostraram como o Jboss Seam e WebBeans se relacionam entre si e qual o futuro de ambos. Foi usado, como exemplo, a rotina diária do Ricardo Nakamura.

O assunto pode até não ser novo, mas fizeram a apresentação com muita competência. O Ricardo foi engraçado e apresentou o que se propôs. Fez também uma conceituação legal de inversão de dependência. O problema foi a falta do controle de tempo, que impediu que todo conteúdo previsto fosse passado.

A parte de conceituação do ricardo foi muito boa!

Ele usou como exemplo a sua rotina diária:

Processo Normal:

  • Acorda
  • Vai ao banheiro
  • Troca de Roupa
  • Vai comprar pão
  • Toma café da manhã
  • Sai para trabalhar

Sair para comprar pão, para ele, é um processo muito chato. Ao invés de comprar pão, ele queria uma solução um pouco melhor. As alternativas seriam:

  • Sair de casa e comprar o pão
  • O pão ser entregue em casa
  • Comer para quê?

Inversão de controle

Ir comprar o pão é ruim. Porque não inverter o controle ? Mas o que vai ser invertido? Vou fazer o pão? o pão vai me comprar ? A frase não está clara.

Que aspecto do controle está sendo invertido?

Recursos, dependências de alguém (algo). O pão para mim é muito importante. Então teremos que fazer injeção de dependências (DI): o pão será injetado na casa.

Existem alguns frameworks, muito falados, que fazem a injeçào de dependência, como o Spring, Pico Container, Guice e outros.

Expandindo a idéia

Quero também receber água em casa. Como fazer isso?

  • Ligar na fornecedora, verificar se entregam em casa, combinar pagamento.
  • Avisar portaria e empregada.

Estes passos se repetiriam para outros itens que eu desejasse receber em casa. Não seria bom se esta configuração fosse sempre padronizada ?

É preciso haver padronização com frameworks, recursos e configurações. Logo, foi criada a especificação JSR 299 (Contexts and Dependency Injection for java EE), que padroniza a injeção de dependências e gerenciamento do ciclo de vida contextual.

A especificação (CDI)então tomou forma e está próxima de sua proposta final. Mas, qual a implementação de referência da CDI (especificação JSR 299)?

Web Beans é a implementação de referência. Mas então o que é o Seam Framework?

Ele surgiu junto com a especificação, mas não tem vínculo com a especificação. A especificação nasceu com base no Seam. O Seam foi a inspiração. No futuro, o Web Beans será o core do JBoss Seam.

Web Beans

Mostou um pouco de código, baseado no exemplo da entrega de pão em casa.

  • Mostrou o funcionamento do WebBeans com Java SE.
  • Depois com JSF.

Seam

Muito do que foi mostrado é igual ao Web Beans. Mas o Seam não é só isso. Ele suporta muitas outras funcionalidades. É uma plataforma muito grande de integração, para que você não tenha que ter diversos frameworks de integração.

Mostrou exemplos de uso do Seam na apresentação, tais como: envio fácil de e-mail, extensões para o JSF, annotations, expressions language, etc.

Seam 3

As novidades serão:

  • Web Beans como engine;
  • Integrador de diversas tecnologias;
  • Ferramentas de utilidade: plugins, seam-gen, maven;

A mensagem final foi: o Seam não é anarquia, não força você a escrever o projeto da forma dele.

Palestra: Arquitetura para aplicações Java de médio porte – Falando em Java 2009

maio 25, 2009

Arquitetura para aplicações Java de médio porte

Palestra apresentada por Guilherme Moreira e Sergio Lopes (Caelum)

A palestra teve como foco o crescimento de sites ou aplicações Web, que ocorrendo de forma desordenada e sem planejamento tendem a gerar downtime, timeouts de resposta, inconsistência de dados, etc. Com isso perde-se dinheiro; as vezes muito dinheiro. Tendo como base esses tipos de aplicações os palestrantes abordaram problemas passíves de ocorrer, análise e as possíveis soluções a serem tomadas.

Problema 1: SOAP e gargalo de Rede

  • JSON x XML x WSDL (podem gerar problemas de tamanho de arquivo e compactação).

Solução: Uso do Fast Infoset (FI), que compacta XML (em até 30%) e tem performance.

Problema 2: Hibernate não otimizado

  • Banco de Dados é o gargalo (famosa primeira conclusão).

Solução:

  • Conhecer o cache de primeiro nível e evitar de carregar muitos objetos na memória (risco dejava.lang.OutOfMemoryError: Java heap space”);
  • Aprender a usar “stateless session“.
  • Cuidado com o “n+1 selects“;
  • Aprenda a usar as configurações certas do Hibernate (“@BatchSize“, por exemplo).

Problema 3: BD sobrecarregado

Solução:

  • Abrir conexões somente quando for necessário;
  • Use pool para reaproveitar conexões entre requests;
  • Só inicie transações quando for necessário;
  • Evite o uso do BD o tempo todo;
  • Use cache!

Problema 4: indisponibilidade

Solução:

  • Uso de cluster. Vantagens: escalabilidade e disponibilidade. Desvantagens: performance e não-simplicidade;
  • Uso de load balance. Vantagens e Desvantagens idênticas ao caso do cluster;
  • Gerenciar estados do cluster: Sticky Sessions (caiu a sessão, acabou), replicação (manda os dados para outra máquina) ou stateless (s/ estado nenhum. “Pra que estado?…rs”).

Após as apresentações dos “problemas-análise-solução” ambos palestrantes colocaram a prova e ao vivo uma demo de máquinas em cluster e load balance usando JBoss. Resultado : FAIL! Isso provou que mesmo tendo experiência no assunto, preparando anteriormente a demo, usando bons micros e outros poréns, é certo que algo pode ocorrer e que outros fatores podem influenciar.

Outras idéias para análise de arquiteturas:

Para finalizar eles deixaram uma frase de Martin Fowler para pensar: “Primeira Lei do Design de distribuição de objetos: Não distribua seus objetos” (Nem sempre o gargalo é a rede…).

É importante ressaltar novamente que na palestra houve a apresentação de códigos conforme os exemplos foram passados. Isso facilitou e muito o entendimento do público (tirando a falha na apresentação do cluster).