<?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>Misc - FlavioCrispim &#187; Flavio Crispim</title>
	<atom:link href="http://flaviocrispim.com/post/category/authors/flavio-crispim/feed" rel="self" type="application/rss+xml" />
	<link>http://flaviocrispim.com</link>
	<description>Fresh Air</description>
	<lastBuildDate>Tue, 29 Jan 2008 02:43:44 +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>Javascript e Cookies</title>
		<link>http://flaviocrispim.com/post/20</link>
		<comments>http://flaviocrispim.com/post/20#comments</comments>
		<pubDate>Sat, 26 Jan 2008 02:20:39 +0000</pubDate>
		<dc:creator>flaviocrispim</dc:creator>
				<category><![CDATA[Flavio Crispim]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[getcookie]]></category>
		<category><![CDATA[javascript cookie]]></category>
		<category><![CDATA[setcookie]]></category>

		<guid isPermaLink="false">http://flaviocrispim.com/post/20</guid>
		<description><![CDATA[Para gravar dados do computador do usuário os sites usam cookies e exitem muitas funções já prontas na internet que fazem o trabalho que gravar um cookie ou para obter o valor gravado em um cookie.
Quase todos os exemplos que encontrei na internet, divide o trabalho em duas funções diferentes, em geral, algo como: setCookie [...]]]></description>
			<content:encoded><![CDATA[<p align="left">Para gravar dados do computador do usuário os sites usam cookies e exitem muitas funções já prontas na internet que fazem o trabalho que gravar um cookie ou para obter o valor gravado em um cookie.</p>
<p align="left">Quase todos os exemplos que encontrei na internet, divide o trabalho em duas funções diferentes, em geral, algo como: setCookie e getCookie.</p>
<p align="left">Cada uma destas funções tem os seus próprios parâmetros, a função setCookie, por exemplo precisa receber o nome do cookie a ser gravado, o valor e a data de validade.</p>
<p align="left">O meu trabalho foi unificar as funções em uma única, tentei fazer um trabalho um pouco mais elegante do que usar split, substring e charAt, assim: RegExp.</p>
<p align="left">A função unificada funciona tanto para gravar um valor quanto para obter o valor de um cookie. A idéia básica é: quando o parâmetro valor for usado, este será gravado no cookie, caso contrário deseja-se obter o valor atual.</p>
<blockquote><p>
/**<br />
* Set/Retrieve a cookie<br />
* To get a cookie to call: cookie(&#8216;COOKIE_NAME&#8217;);<br />
* To set/update a cookie call: cookie(&#8216;COOKIE_NAME&#8217;, &#8216;COOKIE_VALUE&#8217;, &#8221;);<br />
* Expire time:<br />
*  &#8211; &#8216;1d&#8217; to indicate expire in one day<br />
*  &#8211; &#8216;1h&#8217; to indicate expire in one hour<br />
*  &#8211; &#8216;1m&#8217; to indicate expire in one minute<br />
*  &#8211; defaults to one day.<br />
*/<br />
function cookie(name, value, expire){<br />
if(name &amp;&amp; value){<br />
var cookie = [name, '=', value];<br />
if(expire){<br />
var e = {_m:60*1000, _h:60*60*1000, _d:24*60*60*1000, _:60*60*1000};<br />
var params = /(\d*)(\w*)/.exec(expire);<br />
var d = new Date();<br />
d.setTime(d.getTime()+(params[1]*e['_'+params[2].toLowerCase()]));<br />
cookie.push(&#8216;; expires=&#8217;+d.toGMTString()+&#8217;; path=/&#8217;);<br />
}<br />
return document.cookie = escape(cookie.join(&#8221;));<br />
}else if(name){<br />
var reg = new RegExp(&#8216;(&#8216;+name+&#8217;=)(\\d*[^;]*)&#8217;).exec(unescape(document.cookie));<br />
return reg?reg[2]:undefined;<br />
}<br />
return false;<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://flaviocrispim.com/post/20/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSP versus PHP? N&#227;o PHP no Tomcat. =P</title>
		<link>http://flaviocrispim.com/post/18</link>
		<comments>http://flaviocrispim.com/post/18#comments</comments>
		<pubDate>Sun, 20 Jan 2008 06:47:13 +0000</pubDate>
		<dc:creator>flaviocrispim</dc:creator>
				<category><![CDATA[Authors]]></category>
		<category><![CDATA[Flavio Crispim]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP on Tomcat]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://flaviocrispim.com/post/18</guid>
		<description><![CDATA[Sou especialista em desenvolvimento de aplicações web, usando tecnologia J2EE.
PHP? Bem tenho um contrato de vários meses com um provedor e na prática, java é bem caro de se manter neste quesito para aplicações web, já PHP consome poucos recursos e todo provedor ofereçe suporte sem custos adicionais.
Ótima oportunidade de conhecer outra tecnologia, tenho algumas [...]]]></description>
			<content:encoded><![CDATA[<p>Sou especialista em desenvolvimento de aplicações web, usando tecnologia J2EE.</p>
<p>PHP? Bem tenho um contrato de vários meses com um provedor e na prática, java é bem caro de se manter neste quesito para aplicações web, já PHP consome poucos recursos e todo provedor ofereçe suporte sem custos adicionais.</p>
<p>Ótima oportunidade de conhecer outra tecnologia, tenho algumas idéias de pequenos projetos, mas e para desenvolver e manter com o menor custo possível precisarei aprender RoR ou PHP, que são as tecnologias disponiveis por padrão no meu provedor.</p>
<p>Porque PHP? Encontrei mais referências, tem uma comunidade maior e bastante ativa e porque pretendo entender um pouco mais do wordpress (escrito em PHP), Ruby on Rails, fica para a próxima.</p>
<p>Por mais ridículo que pareça, decidi sem nenhum motivo em especial pesquisar se seria possível escrever uma aplicação PHP e usar o Tomcat como servidor. (aeuaue)</p>
<p>Funciona sim, mas como não passo de newbie em PHP, não sei se funciona plenamente a ponto de poder rodar um Bugzilla ou um Wordpress.</p>
<h3>Receita</h3>
<blockquote>
<h5>Ingredientes:</h5>
<ul>
<li>1 &#8211; PHP 5.2.5 (<a href="http://www.php.net">http://www.php.net</a>);</li>
<li>1 &#8211; PECL 5.2.5 (<a href="http://www.php.net">http://www.php.net</a>);</li>
<li>1 &#8211; Tomcat 5.5.25 (<a href="http://tomcat.apache.org">http://tomcat.apache.org</a>);</li>
<li>1 &#8211; J2SE 6.0u4 (<a href="http://java.sun.com">http://java.sun.com</a>);</li>
</ul>
<h5>Modo de Preparo do Ambiente:</h5>
<ul>
<li>Primeiro Instale a JVM e em seguida descompacte o zip do PHP5 no diretório que desejar, sugiro c:\PHP;</li>
<li>Instalar o Tomcat, basicamente descompacte-o, ou no caso de arquivo &#8216;.msi&#8217; use o wizard;</li>
<li>Criar a variável de ambiente JAVA_HOME apontando para o diretório do&#8230;      &#8230; java;</li>
<li>PHP_HOME para&#8230;         &#8230; c:\PHP;</li>
<li>CATALINA_HOME &#8211; para o diretório onde estão os arquivos do Tomcat;</li>
<li>Incluir na variável de ambiente PATH os caminhos: %CATALINA_HOME%\bin;%PHP_HOME%;%JAVA_HOME%\bin</li>
<li>Fechar todas as janelas de comando que estão abertas. <img src='http://flaviocrispim.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<h5>Modo de preparo do PHP no Tomcat</h5>
<ul>
<li>No diretório c:\PHP existe um arquivo: &#8216;php.ini-dist&#8217;, faça uma cópia dele com o nome&#8230; &#8216;php.ini&#8217;;</li>
<li>Edite o arquivo php.ini e procure por &#8216;extension=php_java.dll&#8217;, verifique se a linha existe e se não está comentada, caso não exista&#8230; crie.</li>
</ul>
<p>O arquivo zip PECL serve para alguma coisa sim. Existem alguns arquivos que precisam ser extraídos para a pasta raiz do PHP e um último arquivo que deverá ser usado como biblioteca no Tomcat.</p>
<ul>
<li>No zip PECL extraia os arquivos: php5servlet.dll, php_java.jar e php_java.dll para o diretório c:\PHP;</li>
<li>No diretório webapps do tomcat, crie um diretório que servirá como raiz da aplicação PHP, exemplo phpdubsoup;</li>
<li>No diretório Raiz da aplicação crie também o diretório WEB-INF, dentro do WEB-INF crie o diretório classes, ainda no diretório WEB-INF crie um arquivo web.xml, contendo:</li>
</ul>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC<br />
  &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;<br />
  &#8220;<a ?="?" href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd&#8221;</a>&gt;<br />
&lt;web-app&gt;<br />
&lt;servlet&gt;<br />
    &lt;servlet-name&gt;php&lt;/servlet-name&gt;<br />
        &lt;servlet-class&gt;net.php.servlet&lt;/servlet-class&gt;<br />
    &lt;/servlet&gt;<br />
    &lt;servlet&gt;<br />
        &lt;servlet-name&gt;php-formatter&lt;/servlet-name&gt;<br />
        &lt;servlet-class&gt;net.php.formatter&lt;/servlet-class&gt;<br />
    &lt;/servlet&gt;<br />
    &lt;servlet-mapping&gt;<br />
        &lt;servlet-name&gt;php&lt;/servlet-name&gt;<br />
        &lt;url-pattern&gt;*.php&lt;/url-pattern&gt;<br />
    &lt;/servlet-mapping&gt;<br />
    &lt;servlet-mapping&gt;<br />
        &lt;servlet-name&gt;php-formatter&lt;/servlet-name&gt;<br />
        &lt;url-pattern&gt;*.phps&lt;/url-pattern&gt;<br />
    &lt;/servlet-mapping&gt;<br />
&lt;/web-app&gt;</p>
<ul>
<li>No arquivo PECL extraia o arquivo phpsrvlt.jar e extraia o conteúdo deste arquivo jar para o diretório WEB-INF/classes da aplicação phpdubsoup;</li>
</ul>
<p><font color="#000000">O conteúdo do arquivo jar contém os servlets declarados no web.xml, mas na versão usada necessita de uma pequena correção nos arquivos properties, para referenciar corretamente a biblioteca &#8216;php5servlet.dll&#8217;</font></p>
<ul>
<li>Editar os arquivos: &#8216;reflect.properties&#8217; e &#8217;servlet.properties&#8217; que se encontram em: phpdubsoup/WEB-INF/classes/net/php. A variável library deve ser igual ao nome da biblioteca, assim:</li>
</ul>
<p>library=php5servlet</p>
<ul>
<li>Na raiz da aplicação phpdubsoup, criar um arquivo chamado test.php, contendo:</li>
</ul>
<p>&lt;?php phpinfo(); ?&gt;</p>
<ul>
<li>Abrir uma linha de comando, e digitar startup, para iniciar o tomcat.</li>
</ul>
<h5>Modo do Consumo</h5>
<ul>
<li>Abrir o seu browser predileto e acessar a seguinte url: <a href="http://localhost:8080/phpdubsoup/test.php">http://localhost:8080/phpdubsoup/test.php</a>;</li>
<li>Você deverá ver uma página similar a esta:</li>
</ul>
<p><a href="http://flaviocrispim.com/wp-content/uploads/2008/01/phpdubsoup2.PNG" style="margin-left: 100px" title="phpdubsoup2.PNG"><img width="169" src="http://flaviocrispim.com/wp-content/uploads/2008/01/phpdubsoup2.thumbnail.PNG" alt="phpdubsoup2.PNG" height="130" /></a></p></blockquote>
<p>Pronto! PHP rodando dentro do Tomcat. Não é a configuração que irei usar no meu site, mas é assim que darei meus primeiros passos nessa linguagem.</p>
<p>Referência: <a href="http://blog.taragana.com/index.php/archive/running-php-5x-on-windows-using-tomcat-4x-or-5x/" title="http://blog.taragana.com/index.php/archive/running-php-5x-on-windows-using-tomcat-4x-or-5x/">http://blog.taragana.com/index.php/archive/running-php-5x-on-windows-using-tomcat-4x-or-5x/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://flaviocrispim.com/post/18/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript Math. Signum</title>
		<link>http://flaviocrispim.com/post/15</link>
		<comments>http://flaviocrispim.com/post/15#comments</comments>
		<pubDate>Fri, 11 Jan 2008 23:14:59 +0000</pubDate>
		<dc:creator>flaviocrispim</dc:creator>
				<category><![CDATA[Flavio Crispim]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://flaviocrispim.com/?p=15</guid>
		<description><![CDATA[Esta função tem como objetivo indicar para um dado número, se o número está mais próximo do infinito negativo ou se está mais próximo do infinito positivo, exemplo:
signum(+321658) = 1
signum(-1452) = -1
signum(0) = 0
Esta função não existe no objeto Math. A idéia básica da construção desta função consiste em dividir o parâmetro de entrada por [...]]]></description>
			<content:encoded><![CDATA[<p>Esta função tem como objetivo indicar para um dado número, se o número está mais próximo do infinito negativo ou se está mais próximo do infinito positivo, exemplo:</p>
<p>signum(+321658) = 1<br />
signum(-1452) = -1<br />
signum(0) = 0</p>
<p>Esta função não existe no objeto Math. A idéia básica da construção desta função consiste em dividir o parâmetro de entrada por ele mesmo, e assim teremos 1 (exceto para x=0).</p>
<p>x/x = 1<br />
-1/-1 = 1</p>
<p>O próximo passo, precisamos obter o resultado numérico &#8216;1&#8242;, mas desta vez, sem mudar o sinal, então dividimos o número por seu módulo:</p>
<p>-10 / |-10| = -10 / 10 = -1<br />
15 / | 15 | = 15 / 15 = 1</p>
<p>Agora só ficou faltando e excessão de zero, por causa da divisão por zero, que é o nosso caso de excessão, então a função ficou assim:</p>
<blockquote><p>Math.signum = function signum(x){<br />
return (x/Math.abs(x))||x;<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://flaviocrispim.com/post/15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Workflow</title>
		<link>http://flaviocrispim.com/post/12</link>
		<comments>http://flaviocrispim.com/post/12#comments</comments>
		<pubDate>Sat, 08 Dec 2007 03:42:02 +0000</pubDate>
		<dc:creator>flaviocrispim</dc:creator>
				<category><![CDATA[Adam Smith]]></category>
		<category><![CDATA[Flavio Crispim]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://flaviocrispim.com/?p=12</guid>
		<description><![CDATA[&#201; um confi&#225;vel conjunto de padr&#245;es de atividade que podem ser repetidos por uma organiza&#231;&#227;o sim&#233;trica de recursos, regras, informa&#231;&#245;es, fluxo de informa&#231;&#245;es. Agrupados em um processo de trabalho que pode ser documentado e ensinado.
Seq&#252;&#234;ncia de passos necess&#225;rios para que se possa atingir a automatiza&#231;&#227;o de um processo de neg&#243;cio, de acordo com um conjunto [...]]]></description>
			<content:encoded><![CDATA[<p>&#201; um confi&#225;vel conjunto de padr&#245;es de atividade que podem ser repetidos por uma organiza&#231;&#227;o sim&#233;trica de recursos, regras, informa&#231;&#245;es, fluxo de informa&#231;&#245;es. Agrupados em um processo de trabalho que pode ser documentado e ensinado.</p>
<p>Seq&#252;&#234;ncia de passos necess&#225;rios para que se possa atingir a automatiza&#231;&#227;o de um processo de neg&#243;cio, de acordo com um conjunto de regras definidas.</p>
<h5>Conceitos</h5>
<p>Workflows podem ser relacionados com v&#225;rios conceitos nos campos que estudam a natureza do trabalho. O termo workflow &#233; mais comumente utilizado na ind&#250;stria, onde pode possui significados especializados:</p>
<p>Processos: processo &#233; uma no&#231;&#227;o mais espec&#237;fica do que um workflow, e pode ser aplicado tanto a processos f&#237;sicos quanto biol&#243;gicos, por exemplo. No contexto dos conceitos relacionados ao trabalho, um processo pode se distinguir de um workflow pelo fato de possui mais bem definidas as raz&#245;es, as entradas e as sa&#237;das. Enquanto a no&#231;&#227;o de workflow pode ser aplicada sistematicamente para qualquer padr&#227;o de atividade.</p>
<p>Planejamento e Scheduling: Um plano &#233; a descri&#231;&#227;o da l&#243;gica necess&#225;ria e o parcialmente ordenado de um conjunto de atividades requeridas para atingir um determinado objetivo dadas as condi&#231;&#245;es.</p>
<p>O Workflow pode ser visto como uma realiza&#231;&#227;o dos mecanismos requeridos para executar o mesmo plano v&#225;rias vezes.</p>
<h5>Motiva&#231;&#227;o</h5>
<p>Workflow &#233; considerado um fen&#244;meno moderno. Embora existam v&#225;rios exemplos de organiza&#231;&#227;o racional nas realiza&#231;&#245;es hist&#243;ricas de povos antigos, como a constru&#231;&#227;o das pir&#226;mides, a id&#233;ia de separar o trabalho de quem estuda a natureza de como o trabalho ser&#225; realizado e que organizaria este trabalho de uma forma melhor, &#233; uma id&#233;ia moderna que muitos a atribuem ao fil&#243;sofo escoc&#234;s Adam Smith, atrav&#233;s a obra publicado no s&#233;culo XVIII: The Wealth of Nations.</p>
<p>Smith se opunha aos conceitos da economia mercantilista, economia este que previa o ac&#250;mulo de reservas em metais preciosos como base para sucesso econ&#244;mico da sociedade. Para Smith a ess&#234;ncia era o trabalho, e que a divis&#227;o de trabalho teria um grande aumento na produ&#231;&#227;o.</p>
<p>Um exemplo usado por Adam Smith foi a fabrica&#231;&#227;o de pinos. Um trabalhador poderia fazer somente 20 pinos por dia. Mas se dez pessoas dividisssem os quase 80 passos necess&#225;rios para fazer um pino, eles poderiam fazer um total de 48.000 pinos em um dia.</p>
<h5>Caracter&#237;sticas e fen&#244;menos</h5>
<p>Cria&#231;&#227;o do Modelo: Problemas do Workflow podem ser modelados e analizados usando gr&#225;ficos.</p>
<p>Medi&#231;&#227;o: Muitos conceitos usados para mensurar os sistemas de agendamento em opera&#231;&#245;es de pesquisa s&#227;o &#250;teis para mensurar workflows gerais.</p>
<h5>Componentes de workflow</h5>
<p>Um workflow geralmente &#233; descrito usando uma t&#233;cnica de diagrama&#231;&#227;o formal ou informal, mostrando os fluxos entre os passos do processamento. Um &#250;nico passo de processamento ou componentes de um workflow podem definidos em tr&#234;s tipos b&#225;sicos de parametros:</p>
<p>Descri&#231;&#227;o de entrada: a informa&#231;&#227;o, material ou energia necessaria para completar o passo.</p>
<p>Regras de mudan&#231;a, algoritmos, que podem realizados por atribui&#231;&#245;es humanas ou m&#225;quinas, ou uma combina&#231;&#227;o.</p>
<p>Descri&#231;&#227;o de sa&#237;da: a informa&#231;&#227;o, material ou energia produzida pelo passo e que prove a entrada para o pr&#243;ximo passo.</p>
<p>Os componentes s&#243; poder&#227;o ser plugados um ao outro se a sa&#237;da de primeiro componente possuir a entrada m&#237;nima necess&#225;ria para o pr&#243;ximo componente. Desta forma, a parte essencial da descri&#231;&#227;o de um componente foca somente na entrada e sa&#237;da e que s&#227;o descritos em termos de tipo de dados e a sem&#226;ntica dos dados (significado).</p>
<p>Os algoritmos e as regras somente precisar&#227;o ser inclu&#237;das quando existir muitas alternativas ou caminhos para tranformar um tipo de entrada em um tipo de sa&#237;da.</p>
<p>Quando os componentes n&#227;o s&#227;o servi&#231;os locais e s&#227;o chamados atrav&#233;s de uma rede, como atrav&#233;s de Webservices, caracteristicas como QoS, disponibilidade e etc precisam ser consideradas.</p>
<h5>Workflow Application</h5>
<p>Uma programa workflow &#233; onde v&#225;rios programas, componentes e pessoas devem se envolver no processamento das informa&#231;&#245;es para completar uma inst&#226;ncia de um processo. Um exemplo seria considerar uma ordem de compra que se move atraves de v&#225;rios departamentos para autoriza&#231;&#227;o e uma eventual compra. As ordens podem ser tratadas como mensagens, que s&#227;o colocadas em v&#225;rias filas para processamento. Um processo workflow envolve constantes mudan&#231;as e corre&#231;&#245;es. Componentes novos poderiam ser introduzidos na opera&#231;&#227;o sem nenhuma altera&#231;&#227;o de c&#243;digo.</p>
<p>Existem duas formas de construir aplica&#231;&#245;es workflow:</p>
<p>Liguagem workflow &#8211; linguagem pr&#243;pria, define todas as itera&#231;&#245;es homem-m&#225;quina e de software.</p>
<p>Biblioteca (API) &#8211; bibliotecas ou interfaces para abstrair somente a coordena&#231;&#227;o do trabalho.</p>
<h5>Linguagem Workflow</h5>
<p>&#201; uma linguagem pr&#243;pria e dedicada que descreve todo o fluxo do workflow. Desde descrever as entradas e sa&#237;das de cada ponto no workflow, como tamb&#233;m todos os fluxos alternativos do neg&#243;cio. Geralmente as linguagens workflow possuem uma nota&#231;&#227;o gr&#225;fica ou xml. Para cada ponto do workflow &#233; poss&#237;vel configurar uma lista de Handlers para cada mudan&#231;a do trabalho.</p>
<p>Algumas linguagens de workflow s&#227;o:</p>
<ul>
<li>XPDL </li>
<li>YAWL </li>
<li>SCUFL </li>
<li>Wf-XML </li>
</ul>
<p>Biblioteca (API)</p>
<p>Forma onde uma aplica&#231;&#227;o de workflow &#233; desenvolvida usando linguagem de programa&#231;&#227;o em conjunto com bibliotecas que capturam a abstra&#231;&#227;o de coordenar a coordena&#231;&#227;o das tarefas do sistema.</p>
<p>Exemplos:</p>
<ul>
<li>Windows Workflow Foundation </li>
<li>Workflow OSID </li>
</ul>
<p>Tamb&#233;m &#233; poss&#237;vel usar linguagens desenvolvidas para BPM (Business Process Modeling) para construir workflows. Contudo, para atingir o objetivo de especificar um workflow, as nota&#231;&#245;es precisam ser ajustadas para capturar o tr&#225;fego de informa&#231;&#245;es, defini&#231;&#227;o de rotinas entre outros.</p>
<p>O principal problema de usar nota&#231;&#227;o BPM &#233; que este foi criado com a inten&#231;&#227;o de capturar os processos de neg&#243;cio em um alto n&#237;vel de abstra&#231;&#227;o, ao contr&#225;rio de disso, os Workflows considera um n&#237;vel de detalhes alto o suficiente para possibilitar sua execu&#231;&#227;o.</p>
<p>Refer&#234;ncias:    <br /><a href="http://en.wikipedia.org/wiki/Adam_Smith">Wikipedia &#8211; Adam Smith</a>     <br /><a href="http://en.wikipedia.org/wiki/Workflow">Wikipedia &#8211; Workflow</a>     <br /><a href="http://www.workflowpatterns.com/">Workflow Patterns</a></p>
]]></content:encoded>
			<wfw:commentRss>http://flaviocrispim.com/post/12/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Template para cria&#231;&#227;o de projeto com o Maven2</title>
		<link>http://flaviocrispim.com/post/11</link>
		<comments>http://flaviocrispim.com/post/11#comments</comments>
		<pubDate>Thu, 06 Dec 2007 20:04:05 +0000</pubDate>
		<dc:creator>flaviocrispim</dc:creator>
				<category><![CDATA[Authors]]></category>
		<category><![CDATA[Flavio Crispim]]></category>
		<category><![CDATA[Ricardo Silva]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://flaviocrispim.com/?p=11</guid>
		<description><![CDATA[Para criar um projeto novo usando o Maven é bem rápido, bastam alguns passos para que o projeto esteja pronto e configurado com a sua IDE preferida.
Neste post vou descrever o passo-a-passo para a criação de um projeto WAR. Os passos de execução podem precisar de pequenos ajustes para que seja executado no seu ambiente [...]]]></description>
			<content:encoded><![CDATA[<p>Para criar um projeto novo usando o Maven é bem rápido, bastam alguns passos para que o projeto esteja pronto e configurado com a sua IDE preferida.</p>
<p>Neste post vou descrever o passo-a-passo para a criação de um projeto WAR. Os passos de execução podem precisar de pequenos ajustes para que seja executado no seu ambiente de desenvolvimento.</p>
<p>As características do meu projeto são: Projeto Web, Struts, jUnit.</p>
<p>O Maven tem a capacidade de resolver todas as dependências do projeto a partir do arquivo pom.xml e desta forma fará o download de todas as dependências, no meu caso todos os Jar´s do Strut´s e do jUnit, bem como todas suas dependências, automaticamente.</p>
<p>Para realizar esta tarefa o Maven pode precisar acessar seu repositório padrão, e para tanto uma conexão com a internet é necessária. Como no meu ambiente de trabalho as conexões com a internet são realizadas através de Proxy HTTP, então um passo adicional precisa ser realizado para indicar ao Maven que suas requisições utilize o Proxy configurado, e fornecendo usuário e senha, caso existam.</p>
<p>Não vou descrever o processo de instalação do Maven, que é bem simples. Considero que para continuar você possui o Maven2 instalado e que o diretório <strong><font color="#868686">$MAVEN_HOME/bin</font></strong> esteja no PATH da máquina.</p>
<h5>1. Proxy HTTP (Opcional)</h5>
<p>Editar o arquivo $MAVEN_HOME/conf/settings.xml</p>
<blockquote><p>&lt;settings&gt;<br />
    &#8230;<br />
    &lt;proxies&gt;<br />
        &lt;proxy&gt;<br />
            &lt;id&gt;optional&lt;/id&gt;<br />
            &lt;active&gt;true&lt;/active&gt;<br />
            &lt;protocol&gt;http&lt;/protocol&gt;<br />
            &lt;username&gt;&lt;/username&gt;<br />
            &lt;password&gt;&lt;/password&gt;<br />
            &lt;host&gt;proxy.mycomp.com&lt;/host&gt;<br />
            &lt;port&gt;8080&lt;/port&gt;<br />
            &lt;nonProxyHosts&gt;mycomp.com, localhost&lt;/nonProxyHosts&gt;<br />
        &lt;/proxy&gt;<br />
    &lt;/proxies&gt;<br />
    &#8230;<br />
&lt;/settings&gt;</p></blockquote>
<h5>2. Criando o template do projeto</h5>
<p>Neste passo vou criar o diretório que servirá como raiz do meu projeto, seguindo uma estrutura definida qualquer:</p>
<ul>
<li>#cd $USER_HOME/projetos</li>
<li>/export/home/fsantos/projetos# mkdir –p testewar/modules</li>
<li>/export/home/fsantos/projetos# cd testewar/modules</li>
<li>&#8230;/testewar/modules# mvn archetype:create -DgroupId=com.mycompany<br />
-DartifactId=portal -DarchetypeArtifactId=maven-archetype-webapp</li>
</ul>
<p>Em promeiro lugar foram criados três diretórios, dois deles foram criados explicitamente pelo comando <strong><font color="#868686">mkdir –p testewar/modules</font></strong> e o terceiro diretório foi criado pelo maven e o nome deste diretório será o artifactId da aplicação, que neste caso é <strong><font color="#868686">portal</font></strong>.</p>
<h5>3. Criando o workspace</h5>
<ul>
<li>/export/home/fsantos/projetos/testewar# mkdir –p workspaces/eclipse_33</li>
<li>/export/home/fsantos/projetos/testewar# cd workspaces/eclipse_33</li>
<li>/export/home/fsantos/projetos/testewar/workspaces/eclipse_33# pwd<br />
/export/home/fsantos/projetos/testewar/workspaces/eclipse_33<br />
(Copiar este path)</li>
</ul>
<p>Executar o eclipse, no meu caso é o Eclipse 3.3 e indicar o path &#8220;/export/home/fsantos/projetos/testewar/workspaces/eclipse_33&#8243; como o caminho para o workspace.</p>
<p>Quando o eclipse termina de carregar terá sido criado o diretório &#8220;.metadata&#8221;,<br />
deixo o eclipse de lado por enquando e minimizo.</p>
<h5>4. Criando os arquivos de configuração de projeto do Eclipse</h5>
<ul>
<li>
<p align="left">#cd $USER_HOME/projetos/testewar/modules/portal</p>
</li>
<li>
<p align="left">&#8230;/projetos/testewar/modules/portal# mvn -Dwtpversion=1.5 eclipse:eclipse</p>
</li>
</ul>
<p>Ao final deste, uma estrutura de diretórios foi criada usando a arquétipo padrão do Maven. Os arquivos <strong><font color="#868686">.classpath</font></strong> e <strong><font color="#868686">.project</font></strong> estão prontos e com as dependências já relacionadas.</p>
<h5>5. Configurando o projeto no Eclipse</h5>
<p>Com o Eclipse rodando, preciso importar o projeto já criado, estes passos serão necessários:</p>
<ol>
<li>File -&gt; Import&#8230;</li>
<li>Import -&gt; General -&gt; Existing Projects into Workspace
<ol>
<li>Botão Next</li>
</ol>
</li>
<li>Select root directory:
<ol>
<li>Browse&#8230;</li>
<li>Apontar para o diretório portal</li>
</ol>
</li>
<li>Botão Finish</li>
</ol>
<p>O projeto será importado mas falta indicar o caminho do repositório do Maven para que o Eclipse possa compilar os fontes:</p>
<ol>
<li>Window -&gt; Preferences&#8230;</li>
<li>Na janela Preferences: buscar por Classpath variables</li>
<li>Adicionar a variável M2_REPO com o valor $USER_HOME/.m2/repository</li>
<li>Clicar Botão Ok</li>
</ol>
<h5>6. Adicionando Struts</h5>
<p>Para adicionar struts no meu projeto preciso apenas editar o arquivo: <strong><font color="#868686">$USER_HOME/projetos/testewar/modules/portal/pom.xml</font></strong></p>
<blockquote><p>&lt;project xmlns=&#8221;<a href="http://maven.apache.org/POM/4.0.0">http://maven.apache.org/POM/4.0.0&#8243;</a><br />
xmlns:xsi=&#8221;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance&#8221;</a><br />
xsi:schemaLocation=&#8221;<a href="http://maven.apache.org/POM/4.0.0">http://maven.apache.org/POM/4.0.0</a><br />
<a href="http://maven.apache.org/maven-v4_0_0.xsd">http://maven.apache.org/maven-v4_0_0.xsd&#8221;</a>&gt;<br />
    &#8230;<br />
    &lt;dependencies&gt;<br />
        &#8230;<br />
        &lt;dependency&gt;<br />
            &lt;groupId&gt;org.apache.struts&lt;/groupId&gt;<br />
            &lt;artifactId&gt;struts-core&lt;/artifactId&gt;<br />
            &lt;version&gt;1.3.8&lt;/version&gt;<br />
        &lt;/dependency&gt;<br />
        &lt;dependency&gt;<br />
            &lt;groupId&gt;junit&lt;/groupId&gt;<br />
            &lt;artifactId&gt;junit&lt;/artifactId&gt;<br />
            &lt;version&gt;3.8.1&lt;/version&gt;<br />
            &lt;scope&gt;test&lt;/scope&gt;<br />
        &lt;/dependency&gt;<br />
        &#8230;<br />
    &lt;/dependencies&gt;<br />
    &#8230;<br />
&lt;/project&gt;</p></blockquote>
<p>Agora as dependências com o Struts e com o jUnit já estão relacionadas e a partir de agora qualquer comando do Maven executado, o download das bibliotecas será realizado, exemplo:</p>
<ul>
<li>/export/home/fsantos/projetos/testewar/modules/portal# mvn compile</li>
</ul>
<p>Como as dependências com as bibliotecas foram adicionadas depois da criação dos arquivos do projeto (Tópico 5), o que foi feito de proppósito para tornar claro como adicionar uma dependencia a um projeto já pronto. Será necessário executar:</p>
<ul>
<li>&#8230;/projetos/testewar/modules/portal# mvn eclipse:eclipse</li>
</ul>
<h5>7. Comandos do úteis (Goals)</h5>
<table border="1" width="461" cellPadding="2" cellSpacing="0">
<tr>
<td width="141" vAlign="top">mvn clean</td>
<td width="318" vAlign="top">Limpa os diretórios de bibliotecas e de arquivos compilados</td>
</tr>
<tr>
<td width="144" vAlign="top">mvn compile</td>
<td width="316" vAlign="top">Compila projeto</td>
</tr>
<tr>
<td width="146" vAlign="top">mvn eclipse:eclipse</td>
<td width="315" vAlign="top">Atualiza lista de bibliotecas referenciadas pelo Eclipse</td>
</tr>
<tr>
<td width="147" vAlign="top">mvn install</td>
<td width="314" vAlign="top">Adiciona arquivo war no repositório local do Maven</td>
</tr>
<tr>
<td width="147" vAlign="top">mvn deploy</td>
<td width="314" vAlign="top">Adiciona arquivo war no servidor de artefatos do Maven</td>
</tr>
<tr>
<td width="148" vAlign="top">mvn package</td>
<td width="313" vAlign="top">Gera arquivo war</td>
</tr>
<tr>
<td width="149" vAlign="top">mvn verify</td>
<td width="312" vAlign="top">Verifica as dependências</td>
</tr>
<tr>
<td width="149" vAlign="top">mvn war:war</td>
<td width="312" vAlign="top">Gera arquivo WAR no diretório target</td>
</tr>
<tr>
<td width="149" vAlign="top">mvn war:inplace</td>
<td width="312" vAlign="top">Gera WAR &#8216;explodido&#8217; no diretório &#8217;src/main/webapp&#8217;, de modo que possa realizar o deploy deste usando configuração do Tomcat<br />
.<br />
Desvantagem: diretórios criados: &#8216;WEB-INF/classes&#8217; e &#8216;WEB-INF/lib&#8217; não são removidos quando é executado comando <em>mvn clean</em></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://flaviocrispim.com/post/11/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
