Pergunta

O que torna um módulo/serviço/bit de funcionalidade de aplicativo um candidato particularmente bom para um módulo OSGi?

Estou interessado em usar OSGi em minhas aplicações.Somos uma loja Java e usamos o Spring bastante, então estou inclinado a usar Módulos Spring Dynamic para plataformas de serviço OSGi(tm).Estou procurando uma boa maneira de incorporar um pouco de OSGi em um aplicativo como teste.Alguém aqui usou esta ou uma tecnologia OSGi semelhante?Existem armadilhas?

@Nicolas - Obrigado, já vi esse.É um bom tutorial, mas estou procurando mais ideias sobre como fazer meu primeiro pacote OSGi "real", em vez de um exemplo do Hello World.

@david - Obrigado pelo link!Idealmente, com um aplicativo greenfield, eu projetaria tudo para ser dinâmico.O que estou procurando agora, porém, é introduzi-lo em uma pequena parte de um aplicativo existente.Supondo que eu possa escolher qualquer parte do aplicativo, quais são alguns fatores a serem considerados que tornariam essa parte melhor ou pior como uma cobaia OSGi?

Foi útil?

Solução

Bem, como você não pode ter uma parte OSGi e uma parte não-OSGi, você precisará criar todo o seu aplicativo OSGi.Na sua forma mais simples, você cria um único pacote OSGi de todo o seu aplicativo.Claramente, esta não é uma prática recomendada, mas pode ser útil para ter uma ideia de como implantar um pacote em um contêiner OSGi (Equinox, Felix, Knoplerfish, etc.).

Para avançar para o próximo nível, você desejará começar a dividir seu aplicativo em componentes. Os componentes normalmente devem ter um conjunto de responsabilidades que podem ser isoladas do restante do seu aplicativo por meio de um conjunto de interfaces e dependências de classe.Identificá-los manualmente pode variar de bastante simples para um aplicativo bem projetado, altamente coeso, mas fracamente acoplado, até um pesadelo para código-fonte interligado com o qual você não está familiarizado.

Alguma ajuda pode vir de ferramentas como JDepend que pode mostrar o acoplamento de pacotes Java com outros pacotes/classes em seu sistema.Um pacote com baixo acoplamento eferente deve ser mais fácil de extrair para um pacote OSGi do que um com alto acoplamento eferente.Ainda mais insights arquitetônicos podem ser obtidos com ferramentas profissionais como Estrutura 101.

Puramente no nível técnico, trabalhando diariamente com um aplicativo que consiste em 160 pacotes OSGi e usando Spring DM, posso confirmar que a transição do Spring "normal" para o Spring DM é praticamente tranquila.O namespace extra e o fato de que você pode (e deve) isolar sua configuração Spring específica do OSGi em arquivos separados torna ainda mais fácil ter cenários de implantação com e sem OSGi.

OSGi é um modelo de componentes amplo e profundo, documentação que recomendo:

  • Especificação OSGi R4:Obtenha os PDFs das especificações Core e Compendium, eles são canônicos, oficiais e muito legíveis.Tenha sempre à mão um atalho para eles, você os consultará.
  • Leia sobre as melhores práticas do OSGi, há um grande conjunto de coisas que você pode fazer apenas um conjunto um pouco menor de coisas que você deve fazer e há algumas coisas que você deve nunca faça (Importação Dinâmica:* por exemplo).

Alguns links:

Outras dicas

Ao aprender uma nova tecnologia, ferramentas ricas permitem que você participe das coisas sem grandes dores de cabeça.Neste momento a comunidade em ops4j.org fornece um rico conjunto de ferramentas chamado "PAX" que inclui:

  • Corredor Pax:Execute e alterne entre Felix, Equinox, Knopflerfish e Concierge facilmente
  • Construção Pax:Construa, organize e construa projetos OSGi com maven facilmente
  • Drone Pax:Teste seus pacotes OSGi com Junit sendo independente de estrutura (usa PaxRunner)

Depois, há muitas implementações de serviços do compêndio OSGi:

  • Registro Pax (exploração madeireira),
  • Pax Web (serviço http),
  • Extensor Web Pax (apoio de guerra),
  • Moeda Pax (configuração),
  • Shell Pax (implementação do shell, parte da próxima versão do osgi)
  • e muito mais.

..e há uma comunidade útil e independente de estrutura, - mas isso agora é propaganda ;-)

Esta resposta chega quase 3 anos depois da pergunta ter sido feita, mas o link acabei de descobrir é muito bom, especialmente para iniciantes que usam o maven.Uma explicação passo a passo.

Seu aplicativo existente é monolítico ou está dividido em processos/camadas separadas?

Se estiver em camadas, você poderá converter a camada intermediária/de aplicativo para execução em um contêiner OSGi.

Na experiência da minha equipe, descobrimos que tentar fazer coisas da web no OSGi é doloroso.Outros pontos problemáticos são o Hibernate e o Jakarta Commons Logging.

Acho as especificações do OSGi bastante legíveis e recomendo que você imprima o fluxograma que mostra o algoritmo para carregamento de classe.Garanto que você terá momentos de "por que estou recebendo um NoClassDefFoundError?":o fluxograma lhe dirá o porquê.

Tentar http://neilbartlett.name/blog/osgibook/.O livro traz exemplos práticos com as melhores práticas do OSGi.

Tentar http://njbartlett.name/files/osgibook_preview_20091217.pdf

OU

http://www.manning.com/hall/

O segundo não é um livro que eu mesmo li, mas ouvi coisas boas sobre ele.

O primeiro foi muito útil para mim.Ele orienta você inicialmente pela arquitetura e depois aplica o OSGi.

Há algumas coisas que você deve ter em mente se você estiver começando com o OSGi.

Conforme mencionado em outra parte deste tópico, conhecer o carregamento de classe é muito importante.Na minha experiência, todo mundo, mais cedo ou mais tarde, terá problemas com isso.

Outra coisa importante a lembrar é:nunca guarde referências!Dê uma olhada no padrão de quadro branco no qual o conceito de serviços do OSGi é construído (veja o link em uma das outras respostas).

Na minha experiência, você não deve tentar converter um aplicativo monolítico em um baseado em OSGi.Isso geralmente leva a uma bagunça grave e incontrolável.Começar de novo.

Baixe uma das implementações OSGi independentes disponíveis gratuitamente.Achei o Knopflerfish bastante bom e estável (eu o uso em muitos projetos).Ele também vem com muito código-fonte.Você pode encontrá-lo aqui: http://www.knopflerfish.org

Outro bom tutorial pode ser encontrado aqui. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

Peter Kriens da OSGi Alliance deu uma bela entrevista: http://www.infoq.com/interviews/osgi-peter-kriens.Sua página inicial e blog (que é sempre uma boa leitura podem ser encontrados aqui: http://www.aqute.biz

Eu realmente gosto do Tutoriais do Apache Felix.No entanto, acho que, em geral, aproveitar o OSGi em seu aplicativo não é uma daquelas decisões do tipo "vamos usar essa estrutura, porque é um exagero".É mais uma questão de design, mas tudo o que o OSGi oferece em termos de design, você também pode ter com o Vanilla Java.

Quanto ao tempo de execução, você não pode simplesmente adicionar um aplicativo existente e torná-lo habilitado para OSGi.Precisa ser projetado para ser dinâmico.O Spring DM facilita esconder isso de você, mas ainda está lá e você precisa estar ciente disso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top