sexta-feira, 29 de agosto de 2008

ADF BC: Configurando Application Modules para Performance e Escalabilidade: Parte 1

Oi pessoal!

Hoje a dica é sobre Application Module Configuration. Como vocês sabem, toda a camada de fachada do ADF BC é baseada nos Application Modules. Eles são responsáveis por controlar os acessos aos Data Sources, manter o controle transacional, instanciar os View Objects (e por consequência, os Entity Objects e suas queries) e controlar o fluxo da aplicação como um todo. Portanto, a correta configuração dos parâmetros dos AMs é fundamental para o bom desempenho e estabilidade da aplicação ADF como um todo.
Podemos acessar as configurações dos application modules clicando com o botão direito sobre eles no JDeveloper e selecionando o item "Configurations". Podemos por exemplo criar mais de um configuration, um Local (para uso com o Connection JDBC local) e um Remoto (Para uso dentro do App Server usando um Data Source).
Vamos hoje tratar portanto de um dos principais aspectos do ajuste de configurações: Pooling.
Assim como os Data Sources no Servidor J2EE são responsáveis por manter um pool de conexões de banco para melhorar a performance do acesso a dados, o chamado Connection Pooling, os Application Modules no ADF Runtime são responsáveis por manter um pool de AMs para servir mais rapidamente as aplicações ADF, chamado de AM Pooling. E da mesma maneira que os pools de conexão, podemos "tunar" a performance diminuindo o tempo que o runtime mantém uma instância do Application Module no ar ou aumentando o número de AM instances em memória para aguentar uma maior carga de usuários.
Para fazê-lo, selecionamos a configuração desejada dentro das Configurations e clicamos em "Edit", navegando para a aba "Pooling and Scalability". Nesta aba, temos a seção "Application Pool", onde podemos definir:
1) Initial Pool Size: Qual o tamanho inicial do meu pool de instâncias AM. Se colocarmos um valor muito baixo, cada usuário que se conectar demandará a instanciação de um AM, e por consequência, uma solicitação de conexão ao Data Source. Porém, se for muito alto, podemos estar esbanjando memória do servidor.
2) Maximum Pool Size: Qual o maior tamanho possível do pool. Segue a mesma lógica do Initial Pool Size, mas tem o efeito reverso.
3) Minimum Available Size: Número mínimo de instâncias que devem estar DISPONÍVEIS para uso.

Como o processo de instanciação é bem intensivo em uso de recursos, devemos planejar estes parâmetros levando em consideração o número de usuários logados ao mesmo tempo na aplicação. Para uma aplicação que, por exemplo, tenha no mínimo 2 usuários conectados a qualquer momento, seria interessante colocar o parâmetro Initial Pool Size como 2. O estudo destes parâmetros pode fazer a diferença na experiência do usuário.

Abraços!

sexta-feira, 15 de agosto de 2008

Criando Templates com Oracle Bpel

A nossa dica de hoje, é referente ao Oracle Bpel.

É muito comum criarmos templates para criação de diversas aplicações, no Oracle Bpel não é diferente.
Como o desenvolvimento do Oracle Bpel pode ser um pouco complexo, principalmente na criação de (Logs, emails e validações), temos a opção de criação de diversos templates, veja como:

Abra o Jdeveloper e crie uma nova aplicação Bpel, adicionando os componentes que deverão servir como Template.



Após a definição dos padrões, salve a aplicação e clique com o botão direito no Objeto . Abrirá a opção de "Mark as Template".




Feito isso, o template foi criado com sucesso.

Para testar crie um novo projeto "Bpel" que irá aparecer o template criado acima, conforme imagem.




Selecione o template "OracleTechTips Templates" e o novo projeto estará com os componentes definidos acima.

(Obs.: É possível criar o número de templates necessários).

Abraços e até a próxima.

sexta-feira, 18 de julho de 2008

Como Construir um SelectOneChoice Hierarquico no ADF Faces RC.


Galera essa dica é para aqueles que iniciaram suas pesquisas com o Jdeveloper 11g.

Nosso case, foi desenvolvido por Frank Nimphius.

O exemplo abaixo, iremos construir um DropDown com o componente SelectOneChoice, onde o mesmo irá listar os "Departamentos" e seus "Empregados" em forma de hierarquia, como a imagem abaixo.





Para a implementação do lista, é preciso criar um View Object (VO) hirarquico, baseado no "departamento" e "empregado". O VO pode ser arrastado ou criado manualmente para a tela, em forma de SelectOneChoice. O código deve ficar da seguinte forma:



<af:selectOneChoice id="selectBox" label="Choose Employee" valuePassThru="true"
styleClass="employeeSelectBox"unselectedLabel="Choose Employee">
<af:forEach items="#{bindings.DepartmentsView1.children}" var="departments">
<af:selectItem label="#{departments.DepartmentName}" disabled="true"/>
<af:forEach items="#{departments.children}" var="employees">
<af:selectItem label="#{employees.LastName}" value="employees.EmployeeId"/>
</af:forEach>
</af:forEach>



Note que o primeiro "forEach" é baseado no VO de departamentos e exibe o atributo DepartamentName. O segundo "forEach" é baseado no Filho do VO de departamentos como
#{departaments.children}.

Para aplicar a cor a lista, é utilizado o css, onde o selectOneChoice tem sua propriedade styleClass.

Para quem quiser fazer o download do projeto, acesse:
http://www.oracle.com/technology/products/jdev/tips/fnimphius/selectonechoicegroups/HierarchicalSelectOneChoice.zip

Até a próxima.


segunda-feira, 7 de julho de 2008

Estratégia: Como modernizar aplicações em Forms para SOA

Olá pessoal!

Post rápido para vocês: Segue um link muito interessante da Oracle sobre estratégias de modernização de aplicações Forms, que mostra como migrar e/ou modernizar aplicações em forms utilizando tecnologias SOA como o ADF e o BPEL:

http://otn.oracle.com/goto/formsmodernize

Abraços!
Thiago

terça-feira, 1 de julho de 2008

Adicionando controles ao JSF baseado em Switcher

O componente "Switcher" é bastante utilizado para condições de exibições entre componentes JSF como: Controlar CommandLink e OutputText dentro de Tree ou Table. Um cenário bastante comum é a criação de uma Tree, onde seus "nós" podem ser coloridos ou mesmo em forma de Link ou em forma de Texto comum como a Imagem abaixo:


Para conseguir esse tipo de controle, precisamos ter um atributo de controle, onde será feito nosso controle.
Adionar o "Switcher" como o código abaixo:


No xml acima temos a seguinte estrutura:

* Switcher com o facetName = (atributo de controle Mostra) e o valor defaut = "N".

Se o facet for igual a "N" a página irá exibir o componente OutputText com o valor desejado.

Se o facet for igual a "S" a pa´gina irá exibir o componente CommandLink com outro "Switcher".

* Switcher com o facetName = (atributo de controle Associado) e o valor defaut = "S".

Se o facet for igual a "S" o link será exibido na cor "Preto".

Caso contrário o link será exibido na cor "Vermelho".
Baseado no exemplo acima, podemos notar que se aplica a varios cenários de nosso dia-a-dia.

Obs.: O Switcher pode ser utilizado dentro de qualquer componente ADF Faces (Tree, Table, Panel e etc...).

Um grande abraço e até a próxima.