<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>marcuscavalcanti.net &#187; Oracle</title>
	<atom:link href="http://www.marcuscavalcanti.net/blog/tag/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcuscavalcanti.net/blog</link>
	<description>Software, tecnologia e etc.</description>
	<lastBuildDate>Wed, 21 Jul 2010 03:52:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mostrando mensagens de log no stdOut (console) do Weblogic</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/03/27/mostrando-mensagens-de-log-no-console-do-weblogic/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/03/27/mostrando-mensagens-de-log-no-console-do-weblogic/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 04:17:26 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[stdOut]]></category>
		<category><![CDATA[Weblogic]]></category>
		<category><![CDATA[Workshop]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=837</guid>
		<description><![CDATA[Essa é uma dica bem rapidinha, que na verdade estou postando, pois não achei nada no Google muito relevante a respeito. Como imagino que existem pessoas com o mesmo probleminha, então segue a dica logo abaixo.
Na aplicação web do projeto que estou trabalhando, nós fazemos o uso da API Commons Logging do Apache para poder [...]]]></description>
			<content:encoded><![CDATA[<p>Essa é uma dica bem rapidinha, que na verdade estou postando, pois não achei nada no Google muito relevante a respeito. Como imagino que existem pessoas com o mesmo probleminha, então segue a dica logo abaixo.</p>
<p>Na aplicação web do projeto que estou trabalhando, nós fazemos o uso da API <a href="http://commons.apache.org/logging/" target="_blank" style="text-decoration: underline">Commons Logging</a> do Apache para poder fazer <em>logging</em> da aplicação, só que para o <em>log</em> aparecer corretamente no <em>console</em> existe um pequeno &#8220;macete&#8221;, que por incrivel que pareça não diz com mais detalhes na <a href="http://e-docs.bea.com/wls/docs103/logging/config_logs.html#wp1011903" target="_blank" style="text-decoration: underline">documentação do Weblogic</a>.</p>
<p>O probleminha era, que por mais que eu fizesse o seguinte:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Java"><div class="devcodeoverflow"><ol><li></li><li><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SovWS <span style="color: #009900;">&#123;</span></li><li>&nbsp;</li><li>	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> Log log <span style="color: #339933;">=</span>&nbsp;&nbsp;LogFactory.<span style="color: #006633;">getLog</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SOV-&quot;</span><span style="color: #339933;">+</span>SovWS.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>	@WebMethod</li><li>	<span style="color: #000000; font-weight: bold;">public</span> SaveMetaResponseDocument saveMeta<span style="color: #009900;">&#40;</span>SaveMetaRequestDocument request<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>		</li><li>		log.<span style="color: #006633;">info</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; iniciando a nova meta&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li><span style="color: #009900;">&#125;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Eu não conseguia fazer com que a mensagem de <em>log</em> aparecesse no console do <em>Workshop</em>, ainda que tudo estivesse correto.</p>
<p>Para resolver é muito simples, basta ir nas propriedades do projeto, ir nos <em>facets</em> do projeto e verificar se a extensão <strong><em>Weblogic Integrated Commons Logging</em></strong> está como um <em>facet</em> do projeto, se não estiver, está aí o problema e para resolver basta adicionar esse novo <em>facet</em>.</p>
<p>Para ter certeza que está tudo certinho, sugiro abrir o arquivo <strong>weblogic-application.xml</strong> e verificar se a seguinte configuração está presente:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="XML"><div class="devcodeoverflow"><ol><li></li><li><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wls:library-ref<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wls:library-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>wls-commonslogging-bridge<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wls:library-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wls:specification-version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1.0<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wls:specification-version<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;wls:exact-match<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wls:exact-match<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></li><li><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/wls:library-ref<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Se a seguinte configuração estiver presente, pronto, tudo ok! Agora o <em>log</em> deverá aparecer no console sem problemas.</p>
<p>PS: Só para ressaltar que essa dica é válida para ambiente de desenvolvimento.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/03/27/mostrando-mensagens-de-log-no-console-do-weblogic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle BPM com JSP e Ajax</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/03/23/oraclebpm-com-jsp-e-ajax/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/03/23/oraclebpm-com-jsp-e-ajax/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 18:54:57 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[ALBPM]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OracleBPM]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=750</guid>
		<description><![CDATA[Nos projetos de BPM que tenho participado utilizando o Oracle BPM como solução BPMS, dificilmente faço o uso de presentations, é muito mais comum eu optar em utilizar páginas JSP como camada de apresentação dos meus processos. Isso se dá pelo fato de que as presentations são bastante limitadas, e quando se faz por necessário [...]]]></description>
			<content:encoded><![CDATA[<p>Nos projetos de BPM que tenho participado utilizando o Oracle BPM como solução BPMS, dificilmente faço o uso de <em>presentations</em>, é muito mais comum eu optar em utilizar páginas <a href="http://pt.wikipedia.org/wiki/JavaServer_Pages" target="_blank" style="text-decoration: underline">JSP</a> como camada de apresentação dos meus processos. Isso se dá pelo fato de que as <em>presentations</em> são bastante limitadas, e quando se faz por necessário ter interfaces mais elaboradas e customizadas, o JSP passa a ser a melhor opção.</p>
<p>Usando JSP, um novo leque de opções passou a existir e uma dessas opções passou a ser a possibilidade de usar Ajax. Ajax, para quem nunca ouviu falar, não é uma linguagem, uma API, tão pouco um framework, Ajax é o acrônimo de <strong><em>Asynchronous Javascript And XML</em></strong> e nada mais é que um conjunto de técnicas usadas para criar aplicações web interativas (<a href="http://en.wikipedia.org/wiki/Rich_Internet_application" target="_blank" style="text-decoration: underline">RIA</a>). Um dos pilares do Ajax é permitir comunicação assíncrona entre cliente e servidor utilizando requisições <a href="http://pt.wikipedia.org/wiki/HTTP" target="_blank" style="text-decoration: underline">HTTP</a>.</p>
<p>O Oracle BPM oferece uma maneira bem interessante de usar Ajax nas páginas JSP, mesmo não sendo nativa e também não tendo nada a respeito dizendo na documentação, é possível fazer a integração da camada de apresentação de um processo BPM com o próprio processo de uma maneira bem tranquila.</p>
<p>Para exemplificar isso melhor, criei um projeto bem simples no Oracle BPM, que na verdade só serve para mostrar como funciona essa integração entre páginas JSP e métodos dentro de um BPM Object através de Ajax.</p>
<h3>Primeiros passos</h3>
<p>Para começar, criei um BPM Object bem simples, que possui 3 atributos: name (String), mail (String), documents (String[]). Os dois primeiros atributos, que representam o nome e o email de alguém, são do tipo String e o terceiro atributo, que no caso representa os documentos de uma pessoa, é do tipo Array de String. Chamei esse objeto de: <strong>BpmObject</strong>.</p>
<p>Nesse mesmo objeto (BpmObject), criei ainda um método, esse método será responsável por retornar os documentos de um usuário. Na verdade esse é o método que irei chamar via requisição Ajax através de uma página JSP. O nome desse método ficou definido como <strong>getDocuments()</strong>.</p>
<p>No futuro precisarei alterar esse objeto, mas eu explico depois.</p>
<h3>Criando a página JSP</h3>
<p>No Oracle BPM, para informar que a apresentação de determinado BPM Object deva se dar por meio de uma página JSP, se faz por necessário a utilização de <em>Screenflows</em>. <em><a href="http://download.oracle.com/docs/cd/E13154_01/bpm/docs65/studio/modules/screenflows/c_What_is_a_Screenflow.html" target="_blank" style="text-decoration: underline">Screenflow</a></em> é um fluxo semelhante ao de um processo normal, mas a principal diferença é que o mesmo é executado por um participante único, ou seja, dentro de um <em>Screenflow</em> não existem <em><a href="http://vishals.blogspot.com/2007/09/lanes-and-pools.html" target="_blank" style="text-decoration: underline">lanes</a></em>.</p>
<p>Após ter criado um processo normal, apenas com uma atividade do tipo <em>Global Creation</em> (para criar uma instância do processo) e também com uma <em>Interactive Activity</em> (para apontar para o <em>Screenflow</em>), parti para criação do <em>Screenflow</em> de fato. O <em>Screenflow</em> em questão, será tão simples quanto o processo no qual ele está associado, no caso contará apenas com uma única atividade do tipo <em>Interactive Component Call</em>, que será a responsável por &#8220;chamar&#8221; uma página JSP associando-a ao BPM Object criado no passo anterior.</p>
<p>Para chamar uma página JSP, se faz por necessária associar um BPM Object a mesma, então nesse caso criei um váriavel de instância do tipo BpmObject (o mesmo criado no primeiro passo) e dei o seu nome de <strong>bpmObject</strong>. Após isso, criei uma página JSP dentro de: <strong>/projetoBPM/webRoot/customJSP/ajaxPage.jsp</strong>.</p>
<p>O nome da página em questão é <strong>ajaxPage.jsp</strong>, e por enquanto ela irá possuir o seguinte código:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Java"><div class="devcodeoverflow"><ol><li></li><li><span style="color: #339933;">&lt;%</span>@ page session<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;true&quot;</span><span style="color: #339933;">%&gt;</span></li><li><span style="color: #339933;">&lt;%</span>@ taglib uri<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://java.sun.com/jstl/core&quot;</span> prefix<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c&quot;</span><span style="color: #339933;">%&gt;</span></li><li><span style="color: #339933;">&lt;%</span>@ taglib uri<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://fuego.com/jsp/ftl&quot;</span> prefix<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;f&quot;</span><span style="color: #339933;">%&gt;</span></li><li>&nbsp;</li><li><span style="color: #339933;">&lt;!</span>DOCTYPE html <span style="color: #000000; font-weight: bold;">PUBLIC</span> <span style="color: #0000ff;">&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span> <span style="color: #0000ff;">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;</span><span style="color: #339933;">&gt;</span></li><li><span style="color: #339933;">&lt;</span>html xmlns<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://www.w3.org/1999/xhtml&quot;</span><span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span>Teste Ajax<span style="color: #339933;">/</span>title<span style="color: #339933;">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;f:webResources relativePath='js/prototype-1.6.0.3.js'/&gt;&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>body leftmargin<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;0&quot;</span> topmargin<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;0&quot;</span><span style="color: #339933;">&gt;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;Teste Ajax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>br<span style="color: #339933;">/&gt;&lt;</span>br<span style="color: #339933;">/&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;Nome<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;</span>c<span style="color: #339933;">:</span>out value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;${bpmObject.nome}&quot;</span> <span style="color: #339933;">/&gt;</span> </li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>br<span style="color: #339933;">/&gt;&lt;</span>br<span style="color: #339933;">/&gt;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;teste&quot;</span><span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span></li><li>&nbsp;</li><li><span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Então, relembrando os passos até aqui:</p>
<p>1) Criação de BPM Object com 3 atributos e um método;<br />
2) Criação de processo com uma atividade do tipo <em>Global Creation</em> e outra do tipo <em>Interactive Activity</em>;<br />
3) Criação de <em>Screenflow</em>;<br />
4) Associação (<em>Implementation Type</em>) da <em>Interactive Activity</em> do processo ao <em>Screenflow</em> criado;<br />
5) Criação de atividade do tipo <em>Interactive Component Call</em> no <em>Screenflow</em>;<br />
6) Criação de váriavel de instância no <em>Screenflow</em> com o tipo sendo o mesmo do BPM Object que foi criado no primeiro passo;<br />
7) Definição do <em>Implementation Type</em> da <em>Interactive Component Call</em> como <em>BPM Object Interactive Call</em>;<br />
8) Associação do BPM Object criado como váriavel de instância da <em>Interactive Component Call</em> do <em>Screenflow</em>;<br />
9) Definição da página ajaxPage.jsp como <em>JSP Presentation</em> da <em>Interactive Component Call</em> do <em>Screenflow</em>.</p>
<p>Feito os passos acima, a estrutura do processo está pronta para criação da página JSP que irá fazer a requisição via Ajax a um método do BPM Object que foi criado no primeiro passo.</p>
<h3>Fazendo a requisição Ajax e explicando alguns components da <em>taglib</em> do Oracle BPM</h3>
<p>Para criação do mecanismo que irá fazer a requisição Ajax, se faz por necessário a utilização da <em>taglib</em> do Oracle BPM, sem ela não seria possível usar Ajax, ou então seria bastante árduo fazer tal integração.</p>
<p>Por exemplo, para incluir a biblioteca <a href="http://www.prototypejs.org/" target="_blank" style="text-decoration: underline">Prototype</a>, que no caso será a responsável por fazer o &#8220;trabalho sujo&#8221; e criar o objeto XMLHttpRequest para fazer a requisição assíncrona, utilizei a <em>tag</em> <strong>f:webResources</strong> (linha 10). Esta <em>tag</em> inclui os <em>resources</em> inclusos no projeto BPM, sem que seja necessário informar explicitamente o <em>context path</em> da aplicação para inclusão de imagens, CSS ou Javascripts.</p>
<p>Outra <em>tag</em> importante é a <strong>f:invokeUrl</strong>, que no caso irá gerar a URL para execução de um método dentro de um BPM Object. Dessa forma, a página JSP precisa ser alterada, pois agora irá contar com uma função Javascript que irá fazer a chamada via Ajax ao método <strong>getDocuments()</strong> do BPM Object criado no primeiro passo, retornando o <em>output</em> do método para div <strong>teste</strong>.</p>
<p>Página JSP alterada:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Java"><div class="devcodeoverflow"><ol><li></li><li><span style="color: #339933;">&lt;%</span>@ page session<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;true&quot;</span><span style="color: #339933;">%&gt;</span></li><li><span style="color: #339933;">&lt;%</span>@ taglib uri<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://java.sun.com/jstl/core&quot;</span> prefix<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;c&quot;</span><span style="color: #339933;">%&gt;</span></li><li><span style="color: #339933;">&lt;%</span>@ taglib uri<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://fuego.com/jsp/ftl&quot;</span> prefix<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;f&quot;</span><span style="color: #339933;">%&gt;</span></li><li>&nbsp;</li><li><span style="color: #339933;">&lt;!</span>DOCTYPE html <span style="color: #000000; font-weight: bold;">PUBLIC</span> <span style="color: #0000ff;">&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</span> <span style="color: #0000ff;">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;</span><span style="color: #339933;">&gt;</span></li><li><span style="color: #339933;">&lt;</span>html xmlns<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://www.w3.org/1999/xhtml&quot;</span><span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span>Teste Ajax<span style="color: #339933;">/</span>title<span style="color: #339933;">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;f:webResources relativePath='js/prototype-1.6.0.3.js'/&gt;&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function callAjaxMethod <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>		var bpmUrl	<span style="color: #339933;">=</span><span style="color: #0000ff;">'&lt;f:invokeUrl var=&quot;bpmObject&quot; methodName=&quot;getDocuments&quot; /&gt;'</span><span style="color: #339933;">;</span>		</li><li>		<span style="color: #000000; font-weight: bold;">return</span> bpmUrl<span style="color: #339933;">;</span></li><li>	<span style="color: #009900;">&#125;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li><li>&nbsp;</li><li>	<span style="color: #000000; font-weight: bold;">new</span> Ajax.<span style="color: #006633;">Updater</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'teste'</span>, callAjaxMethod<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>body leftmargin<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;0&quot;</span> topmargin<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;0&quot;</span><span style="color: #339933;">&gt;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;Teste Ajax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>br<span style="color: #339933;">/&gt;&lt;</span>br<span style="color: #339933;">/&gt;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;Nome<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;</span>c<span style="color: #339933;">:</span>out value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;${bpmObject.nome}&quot;</span> <span style="color: #339933;">/&gt;</span> </li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>br<span style="color: #339933;">/&gt;&lt;</span>br<span style="color: #339933;">/&gt;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;teste&quot;</span><span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span></li><li>&nbsp;</li><li><span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Repare que foi criada a função JS <strong>callAjaxMethod</strong>. Abaixo dessa função existe ainda a função JS <strong><a href="http://www.prototypejs.org/api/ajax/updater" target="_blank" style="text-decoration: underline">Ajax.Updater</a></strong>, que no caso é uma função da biblioteca Prototype que irá fazer a chamada ao método do BPM Object, retornando seu <em>output</em> para a div <strong>teste</strong>.</p>
<h3>Criando um <em>output</em> para o método getDocuments do BPM Object</h3>
<p>Finalmente essa é a última parte desse pequeno tutorial. Agora a única coisa que falta é criar um <em>output</em> para o método do BPM Object que irá ser chamado via requisição Ajax.</p>
<p>Antes de mais nada, preciso dizer algo a respeito da <em>tag</em> <strong>f:invokeUrl</strong>, pois para ela funcionar corretamente existem algumas peculiariades. </p>
<p>Para um método de um BPM Object ser reconhecido por esta <em>tag</em>, ele deve ter uma das quatro assinaturas abaixo:</p>
<ul>
<li>methodName(Fuego.Net.HttpRequest request, Fuego.Net.HttpResponse response)</li>
<li>methodName(java.util.Map requestParameters, java.util.Map requestHeaders)</li>
<li>methodName(java.util.Map requestParameters)</li>
<li>methodName()</li>
</ul>
<p>No caso, eu optei por utilizar a primeira opção, pois para usar a função <strong>Ajax.Updater</strong> da Prototype, eu preciso escrever diretamente no <em>output</em> do método, ao invés de setar as informações necessárias através dos seus atributos.</p>
<p>Em virtude disso, o método <strong>getDocuments</strong> do objeto <strong>BpmObject</strong> agora passará a ter a seguinte assinatura:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Java"><div class="devcodeoverflow"><ol><li></li><li>getDocuments<span style="color: #009900;">&#40;</span>Fuego.<span style="color: #006633;">Net</span>.<span style="color: #006633;">HttpRequest</span> request, Fuego.<span style="color: #006633;">Net</span>.<span style="color: #006633;">HttpResponse</span> response<span style="color: #009900;">&#41;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Agora, finalmente o código do método <strong>getDocuments</strong>, que ficará da seguinte maneira:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Java"><div class="devcodeoverflow"><ol><li></li><li><span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> doc <span style="color: #339933;">:</span> documents<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;response.<span style="color: #006633;">bodyTextContent</span><span style="color: #009900;">&#40;</span>arg1 <span style="color: #339933;">:</span> doc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>No código acima, estou percorrendo o atributo <strong>documents</strong> (array) e imprimindo no <em>output</em> todos os documentos definidos para aquele atributo, dessa forma, quando a função <strong>callAjaxMethod</strong> é chamada na página JSP, ela automaticamente chama (assincronamente) este método contido dentro do BPM Object, imprimindo todos os documentos definidos para dentro da div com o ID <strong>teste</strong>.</p>
<h3>Conclusão</h3>
<p>Utilizando os recursos corretos do Oracle BPM, como sua taglib e seus componentes, não é muito difícil fazer uma tela de apresentação mais interativa usando Ajax. No exemplo acima, foi criado um projeto bem simples, apenas para ilustrar, com o intuito de mostrar a atualização do conteúdo de uma div feita assincronamente através de uma requisição Ajax. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/03/23/oraclebpm-com-jsp-e-ajax/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Algumas observações e dicas sobre o Oracle/Aqualogic BPM Enterprise</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/03/04/algumas-observacoes-e-dicas-sobre-o-oracle-aqualogic-bpm-enterprise/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/03/04/algumas-observacoes-e-dicas-sobre-o-oracle-aqualogic-bpm-enterprise/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 06:34:17 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[ALBPM]]></category>
		<category><![CDATA[Aqualogic]]></category>
		<category><![CDATA[Deploy]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OracleBPM]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=441</guid>
		<description><![CDATA[Desde a última sexta-feira até hoje ao final do dia, podemos dizer que passei um certo sofrimento tentando fazer o deploy de um projeto no Oracle BPM Enterprise, só que a minha situação é um pouco atípica, pois no ambiente de homologação e produção do cliente, a versão que está sendo utilizada da distribuição enterprise [...]]]></description>
			<content:encoded><![CDATA[<p>Desde a última sexta-feira até hoje ao final do dia, podemos dizer que passei um certo sofrimento tentando fazer o <em>deploy</em> de um projeto no Oracle BPM Enterprise, só que a minha situação é um pouco atípica, pois no ambiente de homologação e produção do cliente, a versão que está sendo utilizada da distribuição <em>enterprise</em> ainda é a 6.04, ou seja, Aqualogic BPM Enterprise e não Oracle BPM Enterprise (mais recente).</p>
<p>Há cerca de um mês atrás eu havia <a href="http://www.marcuscavalcanti.net/blog/2009/02/03/diferencas-entre-versoes-do-aqualogic-bpm-para-oracle-bpm-studio/" target="_blank" style="text-decoration: underline">falado sobre isso</a>, lembra? Resumidamente o que eu havia dito é que apesar de saber que a versão no cliente ainda era a 6.04, eu havia tomado a decisão de usar a versão nova do Oracle BPM Studio, pois em relação a ferramenta pouca coisa havia mudado e o que havia mudado não impactaria no arquivo gerado a ser <em>deployado</em> nas distribuições <em>enterprise</em>. Inclusive o pessoal da Oracle havia me confirmado isso em um workshop que eu havia ido.</p>
<p>Como o <a href="http://pt.wikipedia.org/wiki/Cluster" target="_blank" style="text-decoration: underline"><em>cluster</em></a> lá do meu trabalho onde está (estava) rodando a versão 6.04 da distribuição <em>enterprise</em> estava muito instável, resolvi fazer a instalação em outra máquina. Foi aí que começou a minha própria <a href="http://pt.wikipedia.org/wiki/Via_Crucis"  target="_blank" style="text-decoration: underline">Via Crucis</a>. Um detalhe importante é que eu nunca havia feito a instalação da distribuição <em>enterprise</em>, portanto era uma experiência totalmente nova para mim.</p>
<p>A distribuição <em>enterprise</em> do ALBPM possui alguns conceitos um pouco diferentes da versão usada para desenvolvimento (Studio), a começar pelo conceito de <em>directory service</em> e pelas outras aplicações que vem agregadas juntas a instalação. Dentre as aplicações que me interessavam estavam apenas o <em>process administrator</em>, <em>workspace</em> e <em>process engine</em>. Tinha ainda o PAPI Web Services, que pode ser muito importante dentro de um projeto BPM, mas como eu não precisaria integrar outros projetos com o meu projeto BPM, então o PAPI-WS nesse caso não seria necessário, pelo menos não naquele <em>directory service</em> atual. <em>Directory Service</em> é onde ficam guardadas as informações referentes a usuários, <em>roles</em>, grupos, <em>resources</em> externos e outras informações que fazem parte de um projeto no BPM, além também dessas aplicações já citadas. Não necessariamente cada projeto deve ter o seu próprio <em>directory service</em>, na verdade N projetos podem compartilhar o mesmo. Outro ponto importante diz respeito a <em>process execution engine</em>, pois cada <em>directory service</em> possui a sua própria <em>engine</em>, ou até mesmo mais de uma, mas apenas uma engine cadastrada pode estar &#8220;rodando&#8221;. Uma <em>engine</em> está associada a um servidor de aplicações e no meu caso está associada a uma instância do <a href="http://www.oracle.com/appserver/weblogic/weblogic-suite.html"  target="_blank" style="text-decoration: underline">weblogic</a>, pois foi essa a versão que eu havia escolhido no ato do download.</p>
<p>Sinceramente, apesar de já ter escutado comentários de que a distribuição <em>enterprise</em> (<= 6.*) era um pouco irregular e que possuia algumas peculiaridades, eu não sabia que seria tão árdua a sua instalação. O primeiro problema que eu encontrei foi na criação de um <em>directory service</em>, nesse ponto, através de uma tela do tipo wizard, a instalação solicita as informações do banco de dados onde serão gravadas as informações do <em>directory service</em>, no meu caso eu escolhi como banco de dados o Oracle (<a href="http://www.oracle.com/technology/products/database/xe/index.html"  target="_blank"  style="text-decoration: underline">Oracle-XE</a>). Nessa mesma tela, a configuração solicita qual o nome do <a href="http://www.oracle.com/technology/obe/2day_dba/schema/schema.htm" target="_blank"  style="text-decoration: underline">Schema</a> onde serão criadas as tabelas e eu aconselho fortemente deixar essa opção em branco, pois além dela ser opcional, o negócio só funcionou depois que eu a deixei em branco. Em uma das minhas tentativas mal sucedidas eu até havia criado o schema &#8220;na mão&#8221;, mas mesmo assim não funcionou. Primeiro problema resolvido, nome dos schemas deixados em branco e tudo ok.</p>
<p>O segundo problema talvez tenha sido o pior de resolver. Depois de informar todos os dados necessários para a configuração viria a tela de progresso e conclusão da criação do <em>directory service</em>, nesse momento só resta aguardar até que a ferramenta termine o processo de criação. Mas para o meu azar o processo nunca conseguia ser concluído, pois sempre antes de chegar em 100% o processo me mostrava a mensagem: <em><strong>failed!</strong></em> Tentei mais algumas vezes e após tantos insucessos resolvi verificar os <em>logs</em> e ver qual era o erro. O <em>log</em> nesse caso ajudou e não ajudou, pois no <em>log</em> a informação principal do erro é que uma exceção havia sido disparada quando o JAR de algum EJB estava tentando ser gerado pela instalação. Pesquisei, pesquisei, pesquisei e nada&#8230; resolvi então falar com um amigo de trabalho que tinha comentado que a instalação da distribuição <em>enterprise</em> era meio caótica. Ele pediu para eu ver o <em>stack-trace</em> todo da exceção. Após reparar bem o <em>stack-trace</em> percebi que o mesmo continha uma frase que terminava com <em>&#8220;too many open files&#8221;</em> e informei sobre a mensagem para esse amigo, ele então me disse que esse problema não tinha relação com o JAR do EJB, na verdade o problema estava ocorrendo, pois o SO (Ubuntu) estava tentando abrir mais de 1024 arquivos ao mesmo tempo durante a instalação e que eu precisaria mudar algumas configurações padrões do SO (file descriptor) para resolver esse problema, isso no caso seria um <a href="http://e-docs.bea.com/wls/docs100/perform/OSTuning.html"  target="_blank"  style="text-decoration: underline"><em>OS tuning</em></a>. Mudanças feitas e não deu outra: o diretório foi criado com sucesso!</p>
<p>O próximo problema ocorria ao tentar <em>startar</em> a <em>process execution engine</em>. Sempre que eu tentava inicializar a <em>engine</em> a mensagem de status nunca se modificava, não informava nem que estava inicializada e nem que estava parada. Após bater bastante cabeça com isso, fui até o manual de instalação e verifiquei que um dos pré-requisitos era que a versão do Weblogic fosse a 9.2 e no meu caso eu estava usando a 10.0 ou 10.3. Na verdade esse problema ocorreu mais em razão de um vacilo meu do que qualquer outra coisa. Instalei a versão 9.2, criei outro diretório novamente e agora eu conseguia <em>startar</em> a <em>engine</em> sem problemas.</p>
<p>Acho que tive também alguns problemas de versão de <a href="http://java.com/pt_BR/download/faq/jvm.xml" target="_blank"  style="text-decoration: underline">JVM</a>, no caso <a href="http://en.wikipedia.org/wiki/JRockit" target="_blank"  style="text-decoration: underline">JRockit</a>, mas isso foi tranquilo de resolver, porque o erro era bem evidente.</p>
<p>Instalação concluída, fui tentar finalmente fazer o <em>deploy</em> de um projeto e&#8230; mais problemas! Fazer o <em>deploy</em> eu até conseguia, mas ao tentar executar os processos um erro estranho ocorria e verificando o <em>log</em> percebi que alguns arquivos do projeto não estavam sendo encontrados. Para mim nada poderia explicar aquilo a não ser problemas de versão, pois como eu já citei, a versão de desenvolvimento que eu estava usando era diferente da versão da distribuição <em>enterprise</em>. Resolvi então tentar abrir o projeto em uma versão de ambiente de desenvolvimento igual a da distribuição <em>enterprise</em> com o intuito de gerar o arquivo a ser <em>deployado</em> em versões iguais. Ao abrir o projeto em uma versão mais antiga não tive nenhum problema, o ALBPM Studio conseguiu detectar todos os processos, <em>screenflows</em>, <em>resources</em> e etc, mas ao tentar executar o processo comecei a ter alguns problemas. Após alguns <em>debugs</em>, percebi que alguns métodos da API de Java (<em>Component Catalog</em>) simplesmente não existiam, ou, não funcionavam nessa versão mais antiga (ALBPM Studio 6.04) e que provavelmente esse poderia ser o mesmo problema que ocorria na distribuição <em>enterprise</em>. Isso de certa forma fazia com que a minha teoria de que não haviam mudanças consideráveis entre as versões ALBPM e OracleBPM caísse por terra.</p>
<p>Fiz os ajustes no projeto na versão mais antiga da ferramenta, gerei um arquivo de <em>deploy</em> novo e fui novamente tentar rodar o projeto na distribuição <em>enterprise</em>. Mesmo problema! A essa hora minha paciência estava esvaindo-se, mas eu precisava conseguir <em>deployar</em> o projeto de qualquer jeito. Resolvi, só por desencargo de consciência, baixar a distribuição <em>enterprise</em> em sua versão mais atual, no caso já como Oracle BPM Enterprise 10g3. Baixei, fiz a instalação &#8211; que por sinal foi muito mais tranquila &#8211; e tentei fazer o deploy do projeto e executá-lo. Para minha surpresa (ou não) foi de primeira! Consegui executar o projeto direitinho na versão nova da distribuição <em>enterprise</em>, o que me faz concluir que a versão 6.04 (ou <) é realmente problemática ou então o impacto entre versões Oracle (Oracle BPM) x BEA (Aqualogic BPM) é realmente considerável.</p>
<h3>Dicas Finais</h3>
<ul>
<li>Caso use a distribuição <em>enterprise</em> na versão 6 (ou <) use o Weblogic 9.2 e não 10.0 (ou >);</li>
<li>Não esqueça de mudar as configurações (<em>file descriptor</em>) do seu SO para permitir que ele consiga abrir mais de 1024 arquivos simultaneamente;</li>
<li>Na criação de um <em>directory service</em>, deixei que a ferramente crie um schema para você no banco de dados, portanto deixe a opção em branco;</li>
<li>Verificar possíveis incompatibilidades entre versões de JVM;</li>
<li>É necessário sempre inicializar a instância do Weblogic antes de inicializar o Admin Center do BPM;</li>
<li>Caso não consiga <em>startar</em> a sua <em>engine</em> e tudo pareça estar correto, tente acessar o console do weblogic e dar <em>unlock</em> no usuário <strong>FuegoWeblogicDeployer</strong>, pois quando uma engine tenta ser inicializada várias vezes e não consegue, esse usuário fica travado;</li>
<li>Caso algum erro ocorra no <em>Process Administrator</em> ou então no <em>Workspace</em>, tente ver o código fonte da página HTML, pois em muitas vezes o erro (detalhado) fica oculto dentro de comentários.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/03/04/algumas-observacoes-e-dicas-sobre-o-oracle-aqualogic-bpm-enterprise/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Não utilize XMLObject para apresentação no Oracle BPM!</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/02/06/nao-utilize-xmlobject-para-apresentacao-no-oraclebpm/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/02/06/nao-utilize-xmlobject-para-apresentacao-no-oraclebpm/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 21:50:19 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[BPMObject]]></category>
		<category><![CDATA[Fuego]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OracleBPM]]></category>
		<category><![CDATA[XMLObject]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=214</guid>
		<description><![CDATA[Quem trabalha com Web Services no Oracle BPM sabe que é inevitável fugir do XMLObject. E por quê é inevitável? Simplesmente porque toda vez que algum serviço é catalogado, tanto o seu request quanto o seu response são catalogados como um objeto desse tipo, que nada mais é que do que a representação XML de [...]]]></description>
			<content:encoded><![CDATA[<p>Quem trabalha com Web Services no Oracle BPM sabe que é inevitável fugir do <a href="http://download.oracle.com/docs/cd/E13154_01/bpm/docs65/standard_components/Fuego/Xml/XMLObject/XMLObject_component.html" target="_blank" style="text-decoration: underline">XMLObject</a>. E por quê é inevitável? Simplesmente porque toda vez que algum serviço é catalogado, tanto o seu request quanto o seu response são catalogados como um objeto desse tipo, que nada mais é que do que a representação XML de um tipo complexo, ou seja, um <a href="http://www.w3schools.com/Schema/schema_elements_ref.asp" target="_blank" style="text-decoration: underline">XML Schema (XSD)</a>.</p>
<p>Na parte de apresentação no BPM existem duas opções: presentations e JSP. Em ambos os casos é necessário sempre utilizar um <a href="http://download.oracle.com/docs/cd/E13154_01/bpm/docs65/studio/modules/bpm_objects/c_Head_BPM_Objects.html" target="_blank" style="text-decoration: underline">BPM Object</a> para fazer a representação dos dados. Um BPM Object é puramente um objeto e com isso contém atributos e métodos específicos.</p>
<p>No meu caso, tenho trabalhado com JSP para a camada de visualização, já que preciso ir um pouco além do que simplesmente exibir dados. As telas do meu processo precisam um alto nível de customização e também possuem bastantes regras de validação e fluxo no lado do cliente usando Java Script. É também comum no meu processo a utilização de serviços externos, e com isso se faz por necessário apresentar os dados retornados por esses serviços nas minhas páginas JSP. Conforme dito anteriormente, para mostrar esses dados preciso de um BPM Object e para não criar um BPM Object redudante, ou seja, um BPM Object com a estrutura idêntica do XML Object &#8211; que já está cadastrado no meu projeto &#8211; o que eu fiz foi criar um atributo nesse BPM Object que encapsula um XML Object, dessa forma poderia usar os atributos do XML Object como atributos dentro do meu BPM Object. Algo como um atributo do tipo de uma lista genérica em um objeto java.</p>
<p>Mas qual foi a minha surpresa ao iterar sobre esse atributo do tipo XML Object no meu JSP? Simplesmente não funciona, ou melhor, funciona pela metade! hehe .. deixa eu explicar.</p>
<p>Se eu tenho um BPM Object com a seguinte estrutura:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Text"><div class="devcodeoverflow"><ol><li>MyBPMObject</li><li>- name (string)</li><li>- email (string)</li><li>- address (XMLObject)</li><li>&nbsp;</li><li>Address (XMLObject)</li><li>- zipcode (int)</li><li>- city (string)</li><li>- state (string)</li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>E no JSP tentar acessar o atributo da seguinte forma:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="HTML"><div class="devcodeoverflow"><ol><li>Nome: <span style="color: #009900;">&lt;c:out <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;${bpmObject.name}&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></li><li><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">br</span></a><span style="color: #66cc66;">/</span>&gt;</span></li><li>Estado: <span style="color: #009900;">&lt;c:out <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;${bpmObject.address.state}&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Funciona!</p>
<p>Agora, se o meu XMLObject fosse do tipo array, ou seja, uma lista, não funciona! Vejamos o meu BPMObject alterado para suportar uma lista de endereços (address):</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Text"><div class="devcodeoverflow"><ol><li></li><li>MyBPMObject</li><li>- name (string)</li><li>- email (string)</li><li>- address[] (XMLObject)</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>No JSP:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="HTML"><div class="devcodeoverflow"><ol><li></li><li>Nome: <span style="color: #009900;">&lt;c:out <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;${bpmObject.name}&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></li><li><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">br</span></a><span style="color: #66cc66;">/</span>&gt;</span></li><li>Estado: <span style="color: #009900;">&lt;c:out <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;${bpmObject.address[0].state}&quot;</span><span style="color: #66cc66;">/</span>&gt;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>O exemplo acima não funciona, é como se o atributo &#8220;address&#8221; não existisse! Bizarro! Tentei inclusive usando a própria <a href="http://download.oracle.com/docs/cd/E13154_01/bpm/docs65/taglib/index.html" target="_blank" style="text-decoration: underline">taglib do BPM</a> e nada!</p>
<p>O que eu tive que fazer? Tcharammm.. criar um BPM Object idêntico ao meu XMLObject e criar um método dentro desse BPM Object que recebe como parâmetro um XML Object, o que ele faz é mapear os valores desse XML Object para os seus próprios atributos&#8230; totalmente POG! Mas foi o jeito&#8230;</p>
<p>Se alguém souber de algum &#8220;pulo do gato&#8221;, por favor me informe que eu publico aqui, mas eu sinceramente acho difícil ter alguma mágica, por mais óbvio que seja, não funciona. O mais bizarro ainda, é que se no Screenflow que antecede o JSP eu der um output do objeto da mesma forma que eu estou dando no JSP, funciona, só não funciona mesmo no JSP :(</p>
<p>Fica a dica: não usem XML Object para apresentar dados!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/02/06/nao-utilize-xmlobject-para-apresentacao-no-oraclebpm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diferenças entre versões do Aqualogic BPM para Oracle BPM Studio</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/02/03/diferencas-entre-versoes-do-aqualogic-bpm-para-oracle-bpm-studio/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/02/03/diferencas-entre-versoes-do-aqualogic-bpm-para-oracle-bpm-studio/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 22:04:22 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[ALBPM]]></category>
		<category><![CDATA[Aqualogic]]></category>
		<category><![CDATA[BEA]]></category>
		<category><![CDATA[BPMS]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OracleBPM]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=240</guid>
		<description><![CDATA[Sei que estou devendo um post falando de um exemplo real de um processo de negócio sendo executado por uma ferramenta BPMS, mas enquanto esse post não vem irei falar sobre algo relacionado, mais especificamente sobre as diferenças que notei até agora entre o Aqualogic BPM 6.03, ainda com a BEA Systems como mantenadora e [...]]]></description>
			<content:encoded><![CDATA[<p>Sei que estou devendo um post falando de um exemplo real de um processo de negócio sendo executado por uma ferramenta BPMS, mas enquanto esse post não vem irei falar sobre algo relacionado, mais especificamente sobre as diferenças que notei até agora entre o Aqualogic BPM 6.03, ainda com a BEA Systems como mantenadora e o Oracle BPM Studio 10.3, que passou a ser o novo nome do Aqualogic BPM após a <a style="text-decoration: underline" href="http://www.oracle.com/corporate/press/2008_jan/bea.html" target="_blank">aquisição da BEA pela Oracle</a>.</p>
<h3>O início</h3>
<p>Ao iniciar o projeto que estou atualmente, confesso que fiquei no impasse de &#8220;qual versão usar?&#8221;, pois o BPM Server (enterprise) de produção ainda é o 6, ou seja, Aqualogic. Paralelo a isso, comecei a ter alguns problemas com a versão 6.03 do Aqualogic BPM Studio na minha máquina, pois como tenho dois <em>localhost</em> (alias) apontando para o mesmo IP local (127.0.0.1), ao subir a engine um erro com a mensagem &#8220;server has exited&#8221; começou a ocorrer e com isso não conseguia &#8220;startar&#8221; a ferramenta. Pesquisando no Google, vi no falecido fórum da BEA, uma thread dizendo que para resolver esse problema bastaria eu  comentar uma das linhas que apontam para o meu IP local no arquivo de hosts do meu SO. Fiz o procedimento e&#8230; nada! Ainda nessa mesma thread, havia outro comentário informando que na versão nova (Oracle) a engine estava mais esperta e resolvia esses tipos de problemas, foi a partir disso que resolvi usar a nova versão, ainda meio que ressabiado.</p>
<h3>O problema e a segurança</h3>
<p>Mas aí surge um novo problema: a incompatibilidade entre versões. Meu ambiente de desenvolvimento usa a versão nova e o meu ambiente de produção usa a versão mais antiga, será que com isso terei problemas em fazer deploy? A princípio não deveria ocorrer problema algum, pois na verdade o que mudou foi basicamente a skin da ferramenta, o workspace (skin também) e a engine que ficou mais esperta. Nesse meio tempo, por coinciência, tive um treinamento de BPM aqui no RJ com o pessoal da Oracle e ao perguntar pra eles se esse problema poderia se concretizar, fui respondido que não, apesar de nunca terem feito esse teste. Confirmaram ainda, que realmente quase nada havia mudado de uma versão para outra. Foi o suficiente para eu ter segurança na minha decisão.</p>
<h3>A realidade</h3>
<p>Mas no decorrer do projeto, tenho percebido que o buraco é um pouco mais embaixo hehe, nada que comprometa o desenvolvimento, mas alguns cuidados precisam ser tomados e como estou passando pela experiência, acho válido relatar para quem possar vir a passar pelas mesmas situações que eu. Só gostaria de ressaltar, que os testes que tenho feito não são os ideais, pois o que estou testando é o projeto sendo executado no Studio BPM na versão Oracle (nova) e também no Aqualogic (antiga), mas ainda não tentei fazer deploy em uma versão enterprise, pois ainda estou sem ambiente para isso, quando tiver esses testes, atualizo esse post.</p>
<p>Abaixo irei enumerar as diferenças que notei até agora com suas devidas observações.</p>
<p><strong>Controle de Versão</strong><br />
Na versão 6.03 (Aqualogic), a ferramenta ainda não possuia um controle de versão embutido para SVN, se fazia por necessário <a style="text-decoration: underline" href="http://74.125.47.132/search?q=cache:o2j-XVjVjnEJ:forums.bea.com/thread.jspa%3FthreadID%3D300003640+albpm+svn&#038;hl=pt-BR&#038;ct=clnk&#038;cd=1&#038;gl=br&#038;client=firefox-a" target="_blank">instalar um plugin (Subversive)</a> para ter essa funcionalidade, agora isso já vem de graça! Essa sem dúvida foi uma melhoria muito positiva na qual não tive problema algum entre as versões.</p>
<p><strong>Connectors</strong><br />
O BPM Studio, em ambas as versões, tem uma coisa muito legal chamada <em>connectors</em>. Com os <em>connectors</em> é possível criar um atalho para determinada atividade sem ter que puxar uma <em>transition</em> para a mesma, isso é muito bom para ajudar na organização do processo, pois com isso evita-se que um monte de <em>transitions</em> fiquem entrelaçadas deixando o processo uma verdadeira zona.</p>
<p>Com <em>connectors</em> comecei a ter alguns problemas, pois processos que possuiam <em>connectors</em> na versão nova simplesmente não funcionavam na versão antiga. Pior do que isso, processos com <em>connectors</em> na versão nova não abrim na versão antiga! Não consegui descobrir o motivo, a única conclusão que cheguei é que geralmente o problema ocorria com <em>connectors</em> que <em>linkavam</em> para uma atividade final (End) do processo.</p>
<p>Conclusão: não uso mais.</p>
<p><strong>Instanciar Variáveis</strong><br />
Esse foi um comportamento que eu sinceramente prefiro da versão antiga, pois acho mais correto.</p>
<p>O que ocorre é que algumas variáveis de instância eu não preciso instanciar, então em um array de BPMObject eu consigo ter algo do tipo:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Java"><div class="devcodeoverflow"><ol><li>bpmObject<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Marcus Cavalcanti&quot;</span><span style="color: #339933;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Ou seja, não precisei instanciar aquele índice corrente do array. Já na versão antiga isso não funciona, obviamente ocorre um NullPointerException, então para resolver isso eu preciso fazer:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Java"><div class="devcodeoverflow"><ol><li></li><li>bpmObject<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MeuBpmObject<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>bpmObject<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Marcus Cavalcanti&quot;</span><span style="color: #339933;">;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Eu prefiro a segunda opção, mais conservadora. Sinceramente não sei como e porque a primeira opção funciona na versão nova, pois não deveria.</p>
<p><strong>Activity x Transitions</strong><br />
Uma mudança simples, mas muito significativa ocorreu nessa nova versão. Toda vez que uma atividade é adicionada ou removida, automaticamente o layout se ajusta e na maioria das vezes bagunçando as transitions entre uma atividade e outra. Agora na nova versão existe a possibilidade de habilitar/desabilitar esse &#8220;recurso&#8221;. É muito simples, basta ir em:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Text"><div class="devcodeoverflow"><ol><li></li><li>Window &gt; BPM Preferences &gt; Activity &gt; General</li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Seguido os passos acima, basta apenas desmarcar o último checkbox. Fichinha!</p>
<p><strong>Gráficos e Skin</strong><br />
Nossa&#8230; esse foi um avanço e tanto! Na versão para Linux os ícones ficavam horrorosos! Ficavam sem transparência por causa do PNG, então ficava aquele fundo preto e era horrível, além do mais os ícones agora estão bem mais trabalhados e bonitinhos :)</p>
<p>O Workspace foi outra coisa que mudou, achei a nova skin bem melhor e funcional, parece que cabem mais informações.</p>
<h3>Conclusão</h3>
<p>Conforme dito no começo, mudanças em relação a <em>features</em> não existem de uma versão para outra, mas percebi algumas pequenas mudanças ao executar o mesmo projeto em versões diferentes, o que pode trazer pequenos problemas.</p>
<p>Acredito que a principal questão seja em relação a diferença entre versões de desenvolvimento e enterprise, mas esses testes ainda não possuo e assim que possuir atualizo esse post. Da mesma forma, se surgirem novas diferenças entre as &#8220;versões Studio&#8221;, esse espaço será atualizado.</p>
<p>PS: se alguém tiver percebido mais algum comportamento estranho, fique a vontade para compartilhar, os comentários estão aí pra isso!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/02/03/diferencas-entre-versoes-do-aqualogic-bpm-para-oracle-bpm-studio/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Introdução ao BPM e BPMS</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/01/18/introducao-bpm-e-bpms/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/01/18/introducao-bpm-e-bpms/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 17:00:10 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Aqualogic]]></category>
		<category><![CDATA[BPMN]]></category>
		<category><![CDATA[BPMS]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[OracleBPM]]></category>
		<category><![CDATA[Processos]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=121</guid>
		<description><![CDATA[O objetivo desse post era sair um pouco dos assuntos teóricos e partir para um assunto mais específico, onde iria dar algumas dicas sobre como fazer upload de arquivos e gravar o conteúdo em um banco de dados usando a ferramenta Oracle BPM Studio, mas como BPM é um assunto &#8211; apesar de muito falado [...]]]></description>
			<content:encoded><![CDATA[<p>O objetivo desse post era sair um pouco dos assuntos teóricos e partir para um assunto mais específico, onde iria dar algumas dicas sobre como fazer upload de arquivos e gravar o conteúdo em um banco de dados usando a ferramenta <a href="http://download.oracle.com/docs/cd/E13154_01/bpm/docs65/index.html" style="text-decoration: underline" target="_blank">Oracle BPM Studio</a>, mas como BPM é um assunto &#8211; apesar de muito falado no mundo de TI &#8211; ainda obscuro, achei que valeria a pena fazer uma breve introdução sobre BPM e BPMS antes de falar especificamente sobre uma ferramenta BPMS.</p>
<h3>
BPM</h3>
<p>BPM é o acrônimo de Business Process Management, que traduzindo para o português seria Gerenciamento de Processos de Negócio.</p>
<p>Definir o termo <a href="http://bpmsbrasil.blogspot.com/2007/05/bpm-o-inexplicvel.html" style="text-decoration: underline" target="_blank">BPM não é uma tarefa trivial</a>, pois como se trata de um assunto amplo e recente, cabem mil definições, algumas não tão boas, de cunho mais comercial e outras mais simples.  Porém acredito que as explicações mais simples, não conseguem dar um <em>overview</em> sobre BPM para uma pessoa leiga no assunto, portanto tentarei usar exemplos e conceitos para tentar passar melhor esse significado.</p>
<p>BPM tem a ver com processos, e BPMS com processos e software. Sendo prático, eu diria que BPM é uma metodologia, um conjunto de boas práticas, com o o intuito de mapear e gerenciar processos de negócio, onde são (ou não) envolvidos clientes, usuários, fornecedores e atividades automáticas (informatizadas), onde o principal objetivo do BPM seria obter uma melhoria desse processo.</p>
<p>Se ainda não ficou muito claro, para facilitar as coisas, darei um exemplo real. Imagine o seguinte cenário:</p>
<ul>
<li>Departamento comercial da empresa X identifica que o produto Y é um produto com forte potencial de venda;</li>
<li>Departamento comercial solicita ao departamento de compra/venda o produto Y;</li>
<li>Departamento de compra/venda vai em busca de fornecedores fazendo cotação de preços em busca do melhor custo x benefício;</li>
<li>Departamento de compra/venda define o fornecedor Z como escolhido e esse fica de fazer a entrega dos produtos em 15 dias;</li>
<li>Na data estipulada, o setor de logística da empresa X, recebe o produto do fornecedor Z e assim comunica ao departamento comercial que este está disponível para venda;</li>
<li>Departamento comercial da empresa X, então comunica ao departamento de marketing, que nesse caso irá bolar um campanha de divulgação desse novo produto;</li>
<li>Campanha criada, produto finalmente é lançado.</li>
</ul>
<p>Repare no fluxo acima e perceba que isso é um processo de negócio, pois ele possui um começo, envolve pessoas, pode envolver outros recursos, tem um objetivo bem definido e provavelmente ocorre com certa frequência. Esse processo pode ser melhorado, se tornar mais eficiente? É provável que sim e é nesse ponto que entram o BPM e o BPMS. O BPM seria uma forma de mapear esse processo, identificar gargalos, pontos falhos afim de melhorá-lo e para isso a ajuda de um (bom) software BPMS é muito importante.</p>
<h3>BPMS</h3>
<p>BPMS (Bussiness Process Management Software) seria o braço direito do BPM na melhoria do processo exemplificado acima, através do BPMS seria possível <a href="http://en.wikipedia.org/wiki/BPMN" style="text-decoration: underline" target="_blank">modelar esse processo visualmente</a> e com recursos específicos de uma ferramenta BPMS é possível ter métricas e controles de todo fluxo do processo, dessa forma seria possível, por exemplo, simular esse processo de diversas maneiras, criar mecanismos de automação e fornecer relatórios específicos para tomadas de decisão. Tudo isso com o objetivo único e exclusivo da melhoria desse processo.</p>
<p>É difícil falar sobre BPM sem ser um pouco repetitivo, sem deixar a leitura cansativa, pois trata-se de um assunto muito teórico e abstrato, mas a melhor forma de falar sobre BPM é com exemplos, portanto, com o assunto introduzido, no próximo post mostrarei um cenário de um processo real em que estou trabalhando atualmente e a necessidade do uso de uma ferramenta BPMS.</p>
<p>Só para finalizar, BPM hoje em dia é um dos &#8220;<a href="http://thebpmexperience.wordpress.com/2006/03/17/bpm-e-soa/" style="text-decoration: underline" target="_blank">componentes&#8221; que fazem parte de uma arquitetura SOA</a> completa, o que não significa que para ter uma solução SOA eu tenha que fazer o uso do BPM, porém se usados juntos da forma correta, tornam-se uma poderosa dupla na gestão, automatização e melhoria de processos de negócios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/01/18/introducao-bpm-e-bpms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
