<?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>jeveaux.com &#187; Eclipse</title>
	<atom:link href="http://jeveaux.com/category/java/eclipse-java/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeveaux.com</link>
	<description>blog de um apaixonado por programação, videogame, leitura, ideias empreendedoras e agora tatuagem</description>
	<lastBuildDate>Tue, 05 Jul 2011 19:40:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Usando Working Sets no Eclipse</title>
		<link>http://jeveaux.com/2009/usando-working-sets-no-eclipse/</link>
		<comments>http://jeveaux.com/2009/usando-working-sets-no-eclipse/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 03:34:00 +0000</pubDate>
		<dc:creator>jeveaux</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[WorkingSet]]></category>

		<guid isPermaLink="false">http://www.jeveaux.com/blog/?p=821</guid>
		<description><![CDATA[Quem não tem mais de uma workspace do Eclipse que levante a mão. Alguém!? Alguém!? Tenho certeza que todos que trabalham com o Eclipse há algum tempo, por mais organizado que seja já se pegou gerenciando duas, três, quatro ou &#8230; <a href="http://jeveaux.com/2009/usando-working-sets-no-eclipse/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Quem não tem mais de uma workspace do Eclipse que levante a mão. Alguém!? Alguém!? Tenho certeza que todos que trabalham com o Eclipse há algum tempo, por mais organizado que seja já se pegou gerenciando duas, três, quatro ou mais workspaces.</p>
<p>Isso sempre foi um problema pra mim, especialmente pelo modo que o Eclipse gerencia suas configurações, que são particulares para cada workspace. Isso é bom, é um modelo legal e funciona super bem. Não era bom pra mim pois eu estava teimando em usar as workspaces de forma errada, então eu sempre tive um sério problema com as configurações, pois elas estavam sempre diferentes entre cada workspace.</p>
<p>Eu sempre tentei separar os projetos por clientes, por área de interesse ou por atividade. Uma workspace de projetos open source, outra do cliente ABC, outra do cliente XPTO, outra de projetos que eu estava estudando o código e assim por diante. Os problemas na hora de trabalhar eram vários, por exemplo: um repositório criado numa workspace era só dela, um atalho configurado na outra ficava só lá, um bookmark também, ou templates de código também. Resumindo, a bagunça ficava gigante e a redundância de configurações então nem se fala.</p>
<p>Então resolvi jogar tudo pra uma workspace só. Problema resolvido!? O das configurações sim, mas de brinde ganhei um novo: performance. Outro hábito não muito bom que eu tenho é o de manter todos os projetos abertos. São tantos projetos (141 atualmente) que só pra abrir o Eclipse demorava muito tempo. Depois, pra abrir/buscar um tipo (CMD+SHFIT+T), por exemplo, demorava de mais para indexar, limpar a workspace então nem pensar. A solução que eu encontrei foram as Working Sets, um recurso que sempre esteve ali presente e eu nunca dei bola.</p>
<p>As Working Sets são grupos de trabalho que podem concentrar um ou mais projetos e funcionam como se fossem várias workspaces. No meu caso as working sets caíram como uma luva para a minha antiga distribuição de workspaces. Ao invés de usar várias workspaces por clientes, agora mantenho uma única workspace com várias working sets, algumas de clientes, outras de estudo, etc. Isso resolveu o meu problema de configurações completamente e com as working sets eu posso escolher em que vou trabalhar num determinado momento e ver somente aqueles projetos, resolvendo também o problema de performance.</p>
<p>E para quem quiser usar as working sets, seguem algumas dicas.</p>
<h3>Ativando a visualização por working sets</h3>
<p>O passo essencial é trocar a visualização de Projetos para Working Sets, isso é bem simples. Veja a imagem a seguir:</p>
<p style="text-align: center;"><a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_ativar_working_sets.png"><img class="aligncenter size-full wp-image-826" title="eclipse_ativar_working_sets" src="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_ativar_working_sets.png" alt="eclipse_ativar_working_sets" width="435" height="275" /></a></p>
<h3>Gerenciando suas working sets</h3>
<p>No próximo passo você deverá criar as suas working sets e associar cada uma delas com os projetos que quiser.</p>
<p style="text-align: center;"><a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_visualizando_working_sets.png"><img class="aligncenter size-full wp-image-828" title="eclipse_visualizando_working_sets" src="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_visualizando_working_sets.png" alt="eclipse_visualizando_working_sets" width="466" height="308" /></a></p>
<p>Crie, modifique ou remova qualquer working set.</p>
<p style="text-align: center;"><a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_gerenciando_working_sets.png"><img class="aligncenter size-full wp-image-829" title="eclipse_gerenciando_working_sets" src="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_gerenciando_working_sets.png" alt="eclipse_gerenciando_working_sets" width="391" height="335" /></a></p>
<p>Trabalho feito, agora basta escolher em qual working set quer trabalhar e pronto, paz e sossego.</p>
<p><a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_go_into_working_set.png"><img class="aligncenter size-full wp-image-830" title="eclipse_go_into_working_set" src="http://www.jeveaux.com/blog/wp-content/uploads/2009/06/eclipse_go_into_working_set.png" alt="eclipse_go_into_working_set" width="361" height="326" /></a></p>
<p>Lembre-se que você pode optar por fechar ou abrir todos os projetos de uma working set bem como &#8220;ir e voltar&#8221; para qualquer uma delas.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeveaux.com/2009/usando-working-sets-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Um exemplo completo com JAAS</title>
		<link>http://jeveaux.com/2009/um-exemplo-completo-com-jaas/</link>
		<comments>http://jeveaux.com/2009/um-exemplo-completo-com-jaas/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 19:31:04 +0000</pubDate>
		<dc:creator>jeveaux</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Glassfish]]></category>
		<category><![CDATA[JAAS]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Realm]]></category>

		<guid isPermaLink="false">http://www.jeveaux.com/blog/?p=426</guid>
		<description><![CDATA[Devido ao um dos últimos posts deste blog, sobre utilização de JAAS com JDBC Realm e a grande procura por exemplos mais completos, com login e logout, por exemplo, resolvi melhorar um pouco a aplicação e disponibiliza-la para download. Desta &#8230; <a href="http://jeveaux.com/2009/um-exemplo-completo-com-jaas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Devido ao um dos últimos posts deste blog, sobre utilização de <a href="http://www.jeveaux.com/blog/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/" target="_blank">JAAS com JDBC Realm</a> e a grande procura por exemplos mais completos, com <em>login</em> e <em>logout</em>, por exemplo, resolvi melhorar um pouco a aplicação e disponibiliza-la para download.</p>
<p>Desta vez a aplicação está no <a href="http://github.com/jeveaux" target="_blank">meu github</a>, junto com a aplicação do primeiro post sobre JAAS. São elas:</p>
<ul>
<li><a href="http://github.com/jeveaux/project-to-learn-jaas/tree/master" target="_blank">project-to-learn-jaas</a></li>
<li><a href="http://github.com/jeveaux/project-to-learn-jaas-complete/tree/master" target="_blank">project-to-learn-jaas-complete</a></li>
</ul>
<p>As aplicações possuem um <em>README</em> e alguma explicação, qualquer dúvida fiquem a vontade para lançar perguntas nos comentários, as duas aplicações foram feitas de forma a simplificar o máximo possível a utilização e configuração dos recursos de JAAS.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeveaux.com/2009/um-exemplo-completo-com-jaas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Autenticação e Autorização: JAAS com JDBC Realm</title>
		<link>http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/</link>
		<comments>http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 00:53:32 +0000</pubDate>
		<dc:creator>jeveaux</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Glassfish]]></category>
		<category><![CDATA[JAAS]]></category>
		<category><![CDATA[Realm]]></category>

		<guid isPermaLink="false">http://www.jeveaux.com/blog/?p=297</guid>
		<description><![CDATA[Recentemente ministrei um curso sobre Segurança em aplicações JavaEE, onde, grande parte do treinamento é a utilização e configuração do JAAS (Java Authentication and Authorization Service) abordando Basic e Form Authentication usando os realms: File, JDBC e LDAP. Aproveitando o &#8230; <a href="http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recentemente ministrei um curso sobre <strong>Segurança em aplicações JavaEE</strong>, onde, grande parte do treinamento é a utilização e configuração do JAAS <em>(Java Authentication and Authorization Service)</em> abordando <em>Basic</em> e <em>Form Authentication</em> usando os <em>realms</em>: <em>File</em>, <em>JDBC</em> e <em>LDAP</em>.</p>
<p>Aproveitando o embalo do treinamento e principalmente pela empolgação dos alunos da turma quando viram quão simples e fácil é usar o JAAS, vou mostrar a configuração de autenticação e autorização em uma aplicação JavaEE usando <em>Basic Authentication</em> e <em>JDBC Realm</em>.</p>
<p>O  JAAS <em>(Java Authentication and Authorization Service)</em> é a API padrão do Java para controle de acesso e autorização em aplicações JavaEE. Com JAAS é possível autenticar e validar usuários e certificados, bem como controlar a possibilidade de acesso e/ou utilização de recursos na aplicação (arquivos, diretórios, URLs, conteúdo, etc). Resumidamente o JAAS cuida de:</p>
<ul>
<li><strong>Autenticação:</strong> deve verificar se um usuário é ele mesmo através de validação de senhas e/ou certificados.</li>
<li><strong>Autorização:</strong> com base em um usuário identificado, as regras e controles de permissão e acesso serão aplicadas na aplicação/produto e seus recursos.</li>
</ul>
<p>O exemplo a seguir foi feito usando o Eclipse, Glassfish_v2 e MySQL, e não há nenhum segredo obscuro, simplesmente criaremos um <em>Dynamic Web Project</em> e usaremos o console do Glassfish para criar o <em>realm</em>.</p>
<p><span id="more-297"></span></p>
<h3>A infra-estrutura (servidor e banco de dados)</h3>
<p>O ponto chave para a configuração do <em>JDBC Realm</em> é o banco de dados (tabelas de usuário e grupos). Criaremos o <em>schema</em> com o SQL a seguir. Basicamente são apenas duas tabelas: <em>usertable</em> e <em>grouptable</em>.</p>
<p><a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/01/schema.png"><img class="aligncenter size-full wp-image-330" title="schema" src="http://www.jeveaux.com/blog/wp-content/uploads/2009/01/schema.png" alt="schema" width="380" height="110" /></a></p>
<p>A configuração do <em>schema</em> no <em>realm</em> será feita adiante e este exemplo está simples desta forma apenas para ficar o mais claro possível na configuração do <em>realm</em>. Certamente no seu caso você já terá suas tabelas de usuários e grupos e para usá-los basta fazer a configuração do <em>realm</em> de acordo com a sua realidade, alterando os valores das propriedades de configuração.</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> learn_jaas;<br />
<span style="color: #993333; font-weight: bold;">USE</span> learn_jaas;<br />
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> usertable<span style="color: #66cc66;">&#40;</span>userid <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span> password <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> grouptable<span style="color: #66cc66;">&#40;</span>userid <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> groupid <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>userid<span style="color: #66cc66;">,</span> groupid<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> grouptable <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">CONSTRAINT</span> FK_USERID <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">&#40;</span>userid<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> usertable<span style="color: #66cc66;">&#40;</span>userid<span style="color: #66cc66;">&#41;</span>;<br />
COMMIT;</div></td></tr></tbody></table></div>
<p>E agora vamos inserir alguns usuários e grupos para os testes, conforme o SQL abaixo. Os usuários serão: <em>user</em>, <em>guest</em> e <em>admin</em> e os grupos serão: <em>user<strong>s</strong></em>, e <em>admin<strong>s</strong></em>. Reparem que os grupos estão no plural, enquanto os usuários estão no singular. Este é um importante detalhe, a seguir, na configuração das <em>roles</em> usaremos os grupos para aplicar as regras e não os usuários.</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> usertable <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'user'</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> grouptable <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'users'</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> usertable <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'guest'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'guest'</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> grouptable <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'guest'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'users'</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> usertable <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'admin'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'admin'</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> grouptable <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'admin'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'admins'</span><span style="color: #66cc66;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Com o banco de dados pronto ainda precisamos de um passo antes do <em>realm</em>, precisaremos criar agora o <em>Connection Pool</em> e o <em>DataSource</em> para este banco de dados. O <em>JNDI</em> <em>Name</em> deste <em>DataSource</em> será usado na criação do <em>realm</em>, portanto, este passo é essencial para o funcionamento do exemplo. Entretanto, como o foco aqui não é a criação do <em>DataSource</em>, darei apenas o <em>JNDI Name</em> conforme usei no exemplo: <strong>learn-jaas-jdbc</strong>.</p>
<p>Agora só precisamos criar o <em>realm</em>, o nome usado para ele será <strong>learn-jaas-realm</strong>. No console do glassfish vamos em: <em>Configuration &gt;&gt; Securiy &gt;&gt; Realm &gt;&gt; New</em>. As propriedades deverão ser preenchidas de acordo com a imagem e a tabela abaixo (se o seu <em>schema</em> for diferente é só ajustar os valores):</p>
<p style="text-align: center;"><a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/01/glassfish-new-jdbc-realm.png" target="_blank"><img class="size-medium wp-image-320 aligncenter" title="glassfish-new-jdbc-realm" src="http://www.jeveaux.com/blog/wp-content/uploads/2009/01/glassfish-new-jdbc-realm-300x176.png" alt="glassfish-new-jdbc-realm" width="300" height="176" /></a></p>
<p style="text-align: center;">
<table style="border: 1px dashed; height: 184px;" border="0" width="360" align="center">
<tbody>
<tr>
<td style="text-align: left;"><strong>Propriedade</strong></td>
<td><strong>Valor</strong></td>
</tr>
<tr>
<td>jaas-context</td>
<td>jdbcRealm</td>
</tr>
<tr>
<td>datasource-jndi</td>
<td>learn-jaas-jdbc</td>
</tr>
<tr>
<td>user-table</td>
<td>usertable</td>
</tr>
<tr>
<td>user-name-column</td>
<td>userid</td>
</tr>
<tr>
<td>password-column</td>
<td>password</td>
</tr>
<tr>
<td>group-table</td>
<td>grouptable</td>
</tr>
<tr>
<td>group-name-column</td>
<td>groupid</td>
</tr>
<tr>
<td>digest-algorithm</td>
<td>none</td>
</tr>
</tbody>
</table>
<h3>A aplicação</h3>
<p>Com a infra-estrutura necessária criada e funcionando, partiremos para a aplicação. Este será um ponto bem simples, a aplicação não terá nada além de 4 páginas <em>JSP</em>, <em>web.xml</em> e <em>sun-web.xml</em>. No Eclipse, criaremos um <em>Dynamic Web Project</em> usando o glassfish como servidor (JavaEE 5). As páginas citadas anteriormente ficarão dispostas conforme o projeto abaixo:</p>
<p><a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/01/project_jaas.png"><img class="aligncenter size-full wp-image-336" title="project_jaas" src="http://www.jeveaux.com/blog/wp-content/uploads/2009/01/project_jaas.png" alt="project_jaas" width="325" height="300" /></a></p>
<p>Em cada página <em>index.jsp</em> dos diretórios <em>admin</em>, <em>public</em> e <em>users</em> há um dizer assim: <em>&#8220;Welcome Admin!&#8221;</em>; <em>&#8220;Welcome Guest!&#8221;</em>; <em>&#8220;Welcome User!&#8221;</em>; respectivamente. E em <em>/index.jsp</em> há apenas os links para as demais páginas. Estes diretórios serão protegidos posteriormente.</p>
<p>O próximo passo consiste na criação das <em>roles</em> em nossa aplicação. Este costuma ser o ponto onde os iniciantes se confundem muito, por isso houve aquela distinção entre os nomes dos usuários e os grupos anteriormente. A criação das <em>roles</em> é livre, podemos criá-las como bem entendermos, o único ponto de atenção aqui é que <strong>a <em>role</em> é associada ao grupo</strong>, ou seja, uma <em>role</em> será aplicada para todos os usuários de um determinado grupo.</p>
<p>Então, em <em>WEB-INF/sun-web.xml</em> criaremos as <em>roles</em> associadas com os seus respectivos grupos:</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security-role-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>user-role<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>admins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>users<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security-role-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security-role-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>admin-role<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>admins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security-role-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security-role-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>guest-role<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>admins<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>users<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>guests<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/group-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security-role-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>As <em>roles</em> foram criadas com o sufixo <em>-role</em> apenas para ficar bem claro que são <em>roles</em> e não usuários ou grupos. Vejam que as <em>roles</em> estão associadas aos grupos e não aos usuários.</p>
<p>Este é um momento onde aplicaremos as regras hierárquicas e organizacionais da empresa, repare que o grupo <em>admins</em> aparece em todas as <em>roles</em>, afinal de contas, não queremos barrar ao administrador do sistema o acesso às páginas públicas ou de usuários, certo?</p>
<p>Próximo passo: Configuração do <em>web.xml</em>! A configuração da autenticação em si não passa de 4 linhas de xml, informaremos o tipo (método) de autenticação (pode ser <em>none</em>, <em>basic</em>, <em>form</em> e <em>digest</em>/<em>certificate</em>) e qual o nome do <em>realm</em> associado:</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;login-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;auth-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>BASIC<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/auth-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;realm-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>learn-jaas-realm<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/realm-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/login-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>O que precisaremos agora é, com base nas <em>roles</em>, criar as regras de acesso na aplicação. Elas podem ser feitas de várias formas e como podemos usar <em>URL Pattern</em> para definir onde a regra será aplicada, faremos isso por diretórios, combinando os diretórios com as <em>roles</em> (admin, user e guest):</p>
<div class="codecolorer-container xml vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-resource-collection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-resource-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>paginas admnistrativas<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-resource-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/admin/*<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>GET<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>POST<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-resource-collection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;auth-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>admin-role<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/auth-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-resource-collection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-resource-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>paginas para usuários<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-resource-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/users/*<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>GET<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>POST<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-resource-collection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;auth-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>user-role<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/auth-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-resource-collection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-resource-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>paginas para visitantes<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-resource-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/public/*<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>GET<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>POST<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/http-method<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-resource-collection<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;auth-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>guest-role<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/role-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/auth-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security-constraint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>Repare que o código ficou grande, mas é muito repetitivo. Os pontos de atenção são o elemento <em>url-pattern</em>, onde é gerada a regra para onde as restrições serão aplicadas e, principalmente, o elemento <em>role-name</em>, onde definimos qual a <em>role</em> está associada com aquela regra. Mais uma vez repare que a regra de acesso é associada à <em>role</em>, já a <em>role</em>, por sua vez está associada com um grupo, que por sua vez está associado com um usuário.</p>
<p>Agora é só fazer o deploy e executar o projeto. Lembre-se das senhas (ou consulte no banco de dados) e faça o teste de acesso em cada página.</p>
<p>Para facilitar disponibilizei o projeto para download, basta <a href="http://www.jeveaux.com/blog/wp-content/uploads/2009/01/project-to-lean-jaastar.gz">clicar aqui</a>. <em>(por algum motivo alheio a minha compreensão o wordpress não deixou o nome do arquivo igual ao original, então, baste colocar um ponto antes do &#8216;tar&#8217;, deve ficar project-to-learn-jass.tar.gz)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/feed/</wfw:commentRss>
		<slash:comments>43</slash:comments>
		</item>
		<item>
		<title>Eclipse 3.4 Ganymede</title>
		<link>http://jeveaux.com/2008/eclipse-34-ganymede/</link>
		<comments>http://jeveaux.com/2008/eclipse-34-ganymede/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 21:22:33 +0000</pubDate>
		<dc:creator>jeveaux</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ganymede]]></category>
		<category><![CDATA[IDE]]></category>

		<guid isPermaLink="false">http://www.jeveaux.com/blog/2008/eclipse-34-ganymede/</guid>
		<description><![CDATA[Esta semana foi anunciado o lançamento de um novo release do Eclipse, a versão 3.4, chamada agora de Ganymede.Vide Ganymede Moon, Ganymede Myth (um herói) e agora também Eclipse Ganymede, uma escolha legal para o Eclipse (pelo fato do herói &#8230; <a href="http://jeveaux.com/2008/eclipse-34-ganymede/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Direct link to file" onclick="return false;" href="http://www.jeveaux.com/blog/wp-content/uploads/2008/06/ganymede_g1_true.jpg"><img src="http://www.jeveaux.com/blog/wp-content/uploads/2008/06/ganymede_g1_true.jpg" alt="" width="119" height="128" align="right" /></a>Esta semana foi anunciado o lançamento de um novo release do Eclipse, a versão 3.4, chamada agora de Ganymede.Vide <a href="http://en.wikipedia.org/wiki/Ganymede_(moon)">Ganymede Moon</a>, <a href="http://en.wikipedia.org/wiki/Ganymede_(mythology)">Ganymede Myth</a> (um herói) e agora também <a href="http://www.eclipse.org/ganymede/">Eclipse Ganymede</a>, uma escolha legal para o Eclipse (pelo fato do herói :D).</p>
<p>Esta release anual do projeto Eclipse é chamada, por eles, de <a href="http://www.eclipse.org/org/press-release/20080625_ganymede.php"><em>Annual Release Train</em></a>. Isso devido ao fato de ser um lançamento coordenado de 23 (vinte e três) projetos que, juntos, compõem o Eclipse e mais de 18 milhões de linhas de código. Um bom exemplo de organização e disciplina.</p>
<p>Eu ainda não consegui migrar todos os meus projetos para o Eclipse, na verdade não abri a minha workspace principal com o Eclipse Ganymede ainda. Não, não é medo de dar algum problema, é que ainda não pude fechar o meu Eclipse Europa pra fazer isso, mas não passará deste final de semana. Em tempo, algumas coisas já consegui mudar para o Ganymede e já pude desfrutar de algumas novidades.</p>
<p>Dentre as coisas realmente novas as que eu mais gostei, e que com certeza serão as que mais impactarão no meu dia-a-dia do desenvolvimento são:</p>
<ol>
<li>Aplicar formatação apenas nas linhas alteradas: Seguindo no menu <em>Window&gt; Preferences</em> e depois em <em>Java &gt; Editor &gt; Save Actions</em> e habilitar a opção <em>Format edited lines</em> e pronto, dá próxima vez que você alterar alguma classe e usar a auto-formatação apenas as linhas que você alterou serão formatadas.</li>
<li>Drag &amp; Drop no Outline View: Agora para cuidar da organização do código tudo pode ser feito através da <em>View Outline</em> apenas arrastando e soltando. Isso eu gostei muito.</li>
</ol>
<p>Além destas muitas outras novidades acompanham esta release. A lista completa pode ser vista <a href="http://www.eclipse.org/org/press-release/20080625_ganymede.php">na página oficial da release</a> e também no <a href="http://eclipse.dzone.com/">Eclipse Zone</a>, que <a href="http://eclipse.dzone.com/articles/eclipse-34-hidden-treasures">publicou uma notícia com muitas outras <em>descobertas</em></a> além destas que citei, vale a pena a leitura.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeveaux.com/2008/eclipse-34-ganymede/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrando do Netbeans para o Eclipse</title>
		<link>http://jeveaux.com/2008/migrando-do-netbeans-para-o-eclipse/</link>
		<comments>http://jeveaux.com/2008/migrando-do-netbeans-para-o-eclipse/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 14:55:41 +0000</pubDate>
		<dc:creator>jeveaux</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[IDE]]></category>

		<guid isPermaLink="false">http://www.jeveaux.com/blog/2008/migrando-do-netbeans-para-o-eclipse/</guid>
		<description><![CDATA[Há alguma semanas comecei a usar o Netbeans profissionalmente num dos projetos aqui da empresa. Já comentei sobre isso algumas vezes aqui no blog: aqui, aqui e aqui. Experiências com ferramentas novas (às vezes nem tão novas, afinal eu já &#8230; <a href="http://jeveaux.com/2008/migrando-do-netbeans-para-o-eclipse/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Há alguma semanas comecei a usar o Netbeans <em>profissionalmente</em> num dos projetos aqui da empresa. Já comentei sobre isso algumas vezes aqui no blog: <a href="http://www.jeveaux.com/blog/2008/netbeans-minhas-impressoes/">aqui</a>, <a href="http://www.jeveaux.com/blog/2008/mais-do-mesmo-netbeans/">aqui</a> e <a href="http://www.jeveaux.com/blog/2008/mais-ainda-do-mesmo/">aqui</a>. Experiências com ferramentas novas (às vezes nem tão novas, afinal eu já conhecia o Netbeans há muito tempo, só não usava no trabalho) é sempre algo que gosto muito pois sempre rola muito aprendizado, melhora nossa visão e criticidade sobre uma série de pontos, e por aí vai.</p>
<p>E com o Netbeans não foi diferente, aprendi um pouco mais sobre detalhes da IDE, alguns atalhos, algumas manhas, também vivenciei alguns dos problemas que eu já conhecia e acabei por descobrir e sofrer com alguns outros novos. Após <a href="http://www.jeveaux.com/blog/2008/mais-ainda-do-mesmo/">migrarmos para a versão 6.1</a> alguns novos problemas foram cruciais para a decisão da migração, como os mais importantes:</p>
<ol>
<li><strong>CVS<br />
</strong>Com muita freqüência (principalmente com JSPs) o Netbeans não mostra o que há de novo ou modificado no repositório. É muito comum alguém fazer um commit de uma nova JSP, por exemplo, outra pessoa fazer um <em>Show Changes</em> e está JSP não aparecer na lista para o update. Às vezes conseguimos resolver fazendo direto um <em>Update</em> no projeto inteiro, mas não é sempre que funciona. Mesmo quando funciona há o inconveniente de estar fazendo um update às cegas, sem saber ao certo o que está vindo do repositório. Quando não funciona eu tenho que procurar o cara que colocou a JSP no projeto, pedir pra ele remover e inserir de novo, até funcionar.</li>
<li><strong>Indexing</strong><br />
Sabe aqueles problemas horríveis que só acontecem de vez em quando ou que só acontecem com uma pessoa X ou Y? Pois é, depois da atualização do Netbeans, <strike>algumas estações</strike> praticamente todas as estações começaram a ter um problema desta espécie. Ao abrir a IDE perdia-se em média 3 minutos aguardando a conclusão da indexação do conteúdo do projeto, e não, nosso projeto não é um mega projeto. E isso não acontecia com todas as pessoas da equipe, apenas com alguns sortudos contemplados.</li>
</ol>
<p>Como estes problemas impactam diretamente no ambiente de desenvolvimento como um todo e na integração da equipe não tivemos outra alternativa que não fosse a migração, e obviamente a IDE escolhida não poderia ser diferente, optamos pelo Eclipse :D</p>
<p>O processo de migração em si foi bem simples e não houve nenhum tipo de trauma. Não utilizamos ferramentas ou kits de migração, nada disso, tudo correu de forma de simples e convencional, porém muito funcional e útil.</p>
<h4>A migração</h4>
<p>Nosso ambiente no Netbeans era composto por dois projetos, que chamarei pelo nome fantasia de <strong>jujuba</strong>. Este era o nosso projeto web. E também tínhamos o projeto <strong>jujuba-ejb</strong>.</p>
<p>Como os nomes dos projetos não refletiam bem o que deve ser o projeto real do cliente nós aproveitamos a migração para arrumar isso. Então criamos num Eclipse um <em>Enterprise Application Project</em> chamado <strong>doceria </strong>e nele dois módulos: <strong>doceria-web</strong> e <strong>doceria-ejb</strong>, simples assim.</p>
<p>O primeiro passo foi conferir todas as dependências. Nesta momento vale um ponto para o Netbeans, bastaria associar o projeto a dependência desejada (jersey, pra REST, por exemplo) e pronto, tudo é feito para que o projeto compile e a API fique a sua disposição e o mesmo é feito durante o build e deploy, empacotando todas as dependências. Mas fizemos no Eclipse, pega-se os JARs, copia no web-inf/lib para o projeto web e pega-se os outros JARs, coloque-os no projeto ejb e configure se estes deverão fazer parte do EAR ou do JAR do EJB. Pronto, agora estão configuradas as dependências.</p>
<p>O restante foi super simples. O deploy dos dois projeto é feito no JBoss, configurar isso no Eclipse é completamente normal, apenas criamos um novo servidor no Eclipse, utilizando a instalação local do JBoss, depois bastou associar o projeto <strong>doceria</strong> ao JBoss e tudo já estava funcionando, aliás, por enquanto ainda era nada, pois os fontes ainda não haviam sido migrados.</p>
<p>A migração dos fontes foi a parte mais antiquada, porém a mais fácil, bastou copiar diretamente no sistema de arquivos:</p>
<p>Para o projeto web:</p>
<ul>
<li>
<pre>cd /home/jeveaux/development/java/workspace/doceria-web/src</pre>
</li>
<li>
<pre>cp -r /home/jeveaux/development/java/workspace/jujuba/src/java/* .</pre>
</li>
<li>
<pre>cd ../WebContent</pre>
</li>
<li>
<pre>cp -r /home/jeveaux/development/java/workspace/jujuba/web .</pre>
</li>
</ul>
<p>E para o projeto EJB</p>
<ul>
<li>
<pre>cd /home/jeveaux/development/java/workspace/doceria-ejb/ejbModule</pre>
</li>
<li>
<pre>cp -r /home/jeveaux/development/java/workspace/jujuba-ejb/src/java/* .</pre>
</li>
<li>
<pre>cd /home/jeveaux/development/java/workspace/doceria-ejb/ejbModule/META-INF</pre>
</li>
<li>
<pre>cp /home/jeveaux/development/java/workspace/jujuba-ejb/src/conf/ejb-jar.xml .</pre>
</li>
</ul>
<p>E pronto, foi isso, sem stress e sem complicações. Agora o projeto foi totalmente migrado para o Eclipse e está completamente funcional, igualzinho quando estávamos utilizando o Netbeans.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeveaux.com/2008/migrando-do-netbeans-para-o-eclipse/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

