
É, novamente chegou aquela época do ano, em que o pessoal da Eclipse Foundation libera mais um “Release Train”, ou seja, uma nova versão de diversos projetos simultaneamente e compatível entre sí.
Isto é melhor ainda para quem lembra dos tempos pré Calisto, que foi o primeiro “Release Train”, naqueles tempos longínquos era necessário baixar cada um dos plugins na mão, e torcer para ter pego uma versão compatível, o que na maioria das vezes não era verdade …
Utilizar o eclipse, principalmente com o WTP era uma tarefa apenas para os mais fortes e mais preparados, e Darwin era quem ditava as regras da comunidade.
Existiam projetos paralelos de ambientes para desenvolver WEB com o eclipse que tentavam facilitar a vida dos menos preparados, mas estes não tinham vez quando se falava em qualquer outro projeto da Eclipse Foundation fora o JDT.
Mas estes tempos acabaram, os Release Trains possibilitam o acesso ao poder do eclipse para todos os interessados, e não apenas aos iniciados.
E este post cheio de firulas e histórias sem nexo foi escrito para falar um pouco mais do Release Train de 2009, o Galileo; que diferente de seus antecessores Callisto, Europa e Ganymede não é o nome de uma das luas de Jupiter, mas o nome do grupo de luas de Júpiter que inclui as 3 anteriormente citadas e também Io, e é também o nome do cientista que em 1609 oficialmente descobriu as 4 maiores luas deste planeta.
Mas alem de ser uma das luas de Júpiter, é também o nome do Release Train do Eclipse em 2009 que inclui os seguintes projetos:
| Project Name | Version | Project Summary | Download |
|---|---|---|---|
| Acceleo | Acceleo 0.8.0 | ![]() |
Download |
| Accessibility Tools Framework | 0.7.0 | ![]() |
Download |
| ATL – Atlas Transformation Language | 3.0.0 | ![]() |
Download |
| Buckminster Component Assembly | ![]() |
Download | |
| Business Intelligence and Reporting Tools (BIRT) | ![]() |
Download | |
| C/C++ Development Tooling (CDT) | 6.0 | ![]() |
Download |
| CDO Model Repository | 2.0.0 | ![]() |
Download |
| Dali Java Persistence Tools | 2.2 | ![]() |
Download |
| Data Tools Platform | 1.7 (Galileo) | ![]() |
Download |
| Dynamic Languages Toolkit | 1.0 | ![]() |
Download |
| Eclipse Communication Framework | ECF 3.0 | ![]() |
Download |
| Eclipse Modeling Framework (EMF) | 2.5.0 | ![]() |
Download |
| Eclipse Packaging Project | 1.1.0 | ![]() |
Download |
| Eclipse Platform | 3.5 | ![]() |
Download |
| Eclipse Project | 3.5.0 | ![]() |
Download |
| Eclipse Web Tools Platform Project | WTP 3.1.0 (Galileo) | ![]() |
Download |
| EclipseLink Project | 1.1.2 | ![]() |
Download |
| EMF Compare | ![]() |
Download | |
| EMF Teneo Model Relational Mapping | 1.1.0 | ![]() |
|
| Equinox | 3.5 | ![]() |
Download |
| GEF – Graphical Editor Framework | 3.5.0 | ![]() |
Download |
| Graphical Modeling Framework | 2.2.0 | ![]() |
Download |
| Java Workflow Tooling | JWT 0.6 | ![]() |
Download |
| JDT – Java development tools | ![]() |
Download | |
| M2T JET (Java Emitter Templates) – aka JET2 | M2T JET 1.0.0 (Galileo) | ![]() |
Download |
| MDT OCL (Object Constraint Language) | 1.3 (Galileo) | ![]() |
Download |
| MDT UML2 Tools | 0.9.0 (Galileo) | ![]() |
Download |
| MDT XSD (XML Schema Definition) | 2.5.0 | ![]() |
Download |
| MDT-UML2 | 3.0.0 | ![]() |
Download |
| Memory Analyzer | 0.8.0 | ![]() |
Download |
| Mobile Tools for Java | ![]() |
Download | |
| Model Development Tools (MDT) | Galileo | ![]() |
Download |
| Model To Text (M2T) | Galileo (xpand 0.7, acceleo 0.8, jet 1.0) | ![]() |
Download |
| Model-to-Model Transformation (M2M) | Galileo Simultaneous Release | ![]() |
Download |
| Monitoring Tools | 4.6.0 | ![]() |
Download |
| Mylyn | 3.2 | ![]() |
Download |
| Net4j Signalling Platform | 2.0.0 | ![]() |
Download |
| PHP Development Tools | 2.1.0 | ![]() |
Download |
| Rich Ajax Platform | 1.2 | ![]() |
Download |
| Riena Platform Project | 1.1.0. | ![]() |
Download |
| SCA Tools | 2.0.0 | ![]() |
Download |
| SOA Tools | 2.0 | ![]() |
Download |
| Source Editing | 3.1.0 (Galileo) | ![]() |
Download |
| Subversive – SVN Team Provider | ![]() |
Download | |
| Swordfish | 0.9.0 | ![]() |
Download |
| Target Management | 3.1 | ![]() |
Download |
| Test and Performance Tools Platform Project | 4.5.3 | ![]() |
Download |
| Testing Tools | TPTP v4.6 | ![]() |
Download |
| Textual Modeling Framework | org.eclipse.xtext | ![]() |
Download |
| Tools for mobile Linux | 0.3 | ![]() |
Download |
| TPTP Platform | TPTP v4.6 | ![]() |
Download |
| Tracing & Profiling Tools | TPTP v4.6.0 | ![]() |
Download |
Bom, se você não dormiu até chegar aqui, vamos ao que interessa, o que tem de bom, e de diferente nesta versão do eclipse, fora um monte de números de versões novas.
os meus comentários são referentes ao Download “for J2EE Developers”, ou seja, com o WTP já instalado.
A primeira coisa que notei foi que esta versão do eclipse, não passou de 200M de memória em nenhum momento, tenho utilizado ele o dia inteiro, e a ocupação de memória fica em média entre 130M e 160M, bem melhor que o Ganymede que estava sempre entre 300M e 600M. Isto por sí só já é uma grande vantagem, o Eclipse esta bem menos pesado, e todas as operações estão com um tempo de resposta perceptível bem menor. Não sei se o tempo real esta menos, mas isto não me importa muito mesmo ![]()
Uma coisa que não gostei, é que aquela perspectiva podre “Java EE” é a perspectiva padrão, eu sempre prefiro utilizar a perspectiva Java como padrão.
O Suporte ao ANT continua fraco, se em um projeto existirem muitos arquivos build.xml, em algum momento o editor vai entrar em coma e só vai voltar a funcionar depois de reiniciar a IDE, mas o auto complete esta mais inteligente e mais rápido …
Uma coisa que achei muito legal é que o eclipse agora reconhece os XMLs gerados por um output do JUnit Report do ANT e abre ele na mesma view dos resultados do JUnit executados pela IDE, o que facilita muito a visualização ![]()
A versão nova do gerenciador de plugins também esta bem legal, ficou mais intuitivo para os novos usuários …
Mas o eclipse ainda não vem com suporte nativo ao subversion, o plugin esta no repositório do Galileo, mas não vem instalado, quando você instala o eclipse, só tem suporte a CVS o que é sofrível. E mesmo assim, só existe suporte “oficial” para estes dois SCMs, se quiser usar GIT vai ter que correr atrás.
Mas nem tudo são problemas, a nova view de “Problems” com as coisas agrupadas ficou bem legal.
Um recurso novo espetacular do editor, é a possibilidade de selecionar blocos, sempre senti falta disto no Eclipse ![]()
O Code completion do editor Java esta mais rápido, ou pelo menos parece mais rápido, e pode ser por que criei um workspace novo, mas parou de ocorrer um erro muito chato do Mylyn antes de apresentar os proposals para o code completion que me enchia o saco na versão anterior, mas acontecia só uma ou duas vezes por dia …
Outra coisa legal é que agora quando se segura o “Control” com o mouse sobre um método ou classe, antes sempre era aberta a implementação, agora o Eclipse pergunta se você quer ver a implementação ou a definição do método.
Achei muito extranho o icone novo do eclipse, principalmente por que o icone da aplicação não mudou, mas o icone no task bar do windows mudou, parecem duas aplicações diferentes ![]()
(E sim, antes que alguem comente, aqui no trampo sou obrigado a usar windows)
O suporte a Java ME ainda é bem mais fraco que o do NetBeans, mas o eclipse tem suporte a desenvolvimento em C++ para dispositivos móveis (não cheguei a testar) o NetBeans não tem …
O suporte a linguagens dinâmicas também melhorou, pelo menos o suporte a Ruby melhorou, mas ainda não existe suporte direto ao Rails …
O editor de C++ esta mais rápido, mas ainda com um code completion bem fraco e um suporte quase inexistente a refactorings, mas o “quase” já faz isto ser muito melhor do que no Visual Studio.
Ocorreram também diversas mudanças estruturais no Eclipse, mas como eu sou apenas mais um usuário da ferramenta, vou deixar este tipo de comentário para quem realmente entende.
Bom, se você teve paciência de ler até aqui é por que esta interessado no Eclipse (ou não tinha nada melhor para fazer
), então esta na hora de acessar o site do Eclipse e baixar o galileo.
Nesta página existem diversas opções, uma delas vai te deixar feliz, mas se você é um usuário “Hard Core” das antigas, e realmente gosta de passar trabalho, baixe o Eclipse Classic no final da página e monte o seu ambiente com os plugins que estiver com vontade ![]()
Se você não conseguir se decidir qual é a versão certa para você, basta acessar esta página, que diz o que esta incluído em cada um dos pacotes disponíveis para download.
Para facilitar a sua vida, copiei a tabela com os downloads e coloquei aqui ![]()
|
Tools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn and others. More…
Downloads: 202,591
|
Windows Mac OS X (Carbon) |
|
The essential tools for any Java developer, including a Java IDE, a CVS client, XML Editor and Mylyn. More… Downloads: 74,402 |
Windows Mac OS X (Carbon) |
|
|
Tools for PHP developers creating Web applications, including PHP Development Tools (PDT), Web Tools Platform, Mylyn and others. More… Downloads: 47,243 |
Windows Mac OS X (Carbon) |
|
|
An IDE for C/C++ developers with Mylyn integration. More…
Downloads: 36,326
|
Windows Mac OS X (Carbon) |
|
A complete set of tools for developers who want to create Eclipse plug-ins or Rich Client Applications. It includes a complete SDK, developer tools and source code, plus Mylyn, an XML editor and the Eclipse Communication Framework. More… Downloads: 12,642 |
Windows Mac OS X (Carbon) |
|
|
This modeling package contains a collection of Eclipse Modeling Project components, including EMF, GMF, MDT XSD/OCL/UML2, M2M, M2T, and EMFT elements. It includes a complete SDK, developer tools and source code. Note that the Modeling package includes some incubating components, as indicated by feature numbers less than 1.0.0 on the feature list. More…
Downloads: 10,763
|
Windows Mac OS X (Carbon) |
|
|
JEE tools and BIRT reporting tool for Java developers to create JEE and Web applications that also have reporting needs. More… Downloads: 9,907 |
Windows Mac OS X (Carbon) |
|
|
Pulsar is a tools platform for Mobile Java Developers. It includes the Eclipse Platform, Java Development Tools (JDT), Mobile Tools for Java (MTJ), Mylyn and Plugin Development Environment (PDE). Pulsar also makes it easy to download SDK from different handset manufacturers. More… Downloads: 5,361 |
Windows Mac OS X (Carbon) |
|
|
The classic Eclipse download: the Eclipse Platform, Java Development Tools, and Plug-in Development Environment, including source and both user and programmer documentation. Please look also at the Eclipse Project download page. More… |
Windows Mac OS X (Carbon) Mac OS X (Cocoa) |
Bom, vou ficando por aqui, este post foi escrito para participar do Blogathon, e tentar ganhar uma jaqueta do Eclipse ![]()
Acho difícil um post em português ganhar, mas pelo menos uma camiseta acho que rola
Continuando com a seqüência de posts com títulos polêmicos que comecei dizendo que “Comentário no código é para os fracos“, segue um curso básico de refactoring para quem é pobre (por que vou utilizar o eclipse que é uma excelente IDE e alem de tudo é “di grátis”), e preguiçoso, por que o eclipse vai fazer quase todo o trabalho para nós.
O ponto de partida vai ser o “exercício” que deixei no final do post sobre comentários no código.
Par quem não quiser ler todo o outro post, o código inicial vai ser este abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | package blog; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class VeryBadlyNamedFile { private static final char[] asdfg = new char[] {'I', ' ', 'c', 'a', 'n', ' ', 'd', 'o', ' ', 'v', 'e', 'r', 'y', ' ', 'u', 'g', 'l', 'y', ' ', 'c', 'o', 'd', 'e'}; private String an; private BufferedReader rfsdw; private FileReader temp; public VeryBadlyNamedFile(String an, BufferedReader rfsdw, FileReader temp) { super(); this.an = an; this.rfsdw = rfsdw; this.temp = temp; } public void doIt() throws IOException { ctfiidne(); startDoing(); try { canIDoAnyThing(); } catch (RuntimeException yicdet) { nowReallyDoIt(); } } private void nowReallyDoIt() { firstDoTheOtherThing(); reallyDoItInternal(); } private void firstDoTheOtherThing() { rfsdw = new BufferedReader(temp); } private void reallyDoItInternal() { while (true) { try { imDoingIt(); } catch (Exception e) { break; } } } private void imDoingIt() throws Exception { String s = rfsdw.readLine(); if (s == null) throw new Exception("hahaha, I bet you did not understood the code"); System.out.println(s); } private void ctfiidne() throws IOException { File a = new File(an); if (!a.exists()) { FileWriter wrfedsd = new FileWriter(a); wrfedsd.write(asdfg); wrfedsd.close(); } } private void canIDoAnyThing() { if (new File(an).exists() && new File(an).canRead() && new File(an).canWrite()) throw new RuntimeException(); } private void startDoing() throws FileNotFoundException { File f = new File(an); temp = new FileReader(f); } } |
Antes de começar o refactoring, vamos definir o que é refactoring de uma forma bem simples:
Refactoring = Alterar partes do código de uma aplicação sem quebrar outras partes da aplicação que dependam daquele código.
Refactoring é uma forma de melhorar o design de um código existente enquanto ele continua funcionando.
Gosto muito de uma frase espetacular do Fowler, um dos papas do desenvolvimento ágil, que coloco abaixo:
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Nos vamos utilizar os recursos de refactoring do Eclipse para transformar este lixo acima em alguma coisa legível, mantendo exatamente o mesmo comportamento, ou seja, sem quebrar o código que já funciona.
Para facilitar o trabalho, este tutorial (se é que pode ser chamado de tutorial), vai ser um simples “passo a passo” que eu utilizei para alterar este código no Eclipse, que é a minha segunda IDE preferida (a melhor de todas na minha opinião é o IntelliJ IDEA, mas se eu utilizasse este, não seria um tutorial para quem é pobre
)
Siga os passos abaixo:
1 | fileLineReader.useDelimiter("\n"); |
1 2 3 4 5 6 7 8 9 | Iterable<String> lineIterator = new Iterable<String>(){ @Override public Iterator<String> iterator() { return fileLineReader; } }; for(String line : lineIterator){ System.out.println(line); } |
1 2 3 4 5 6 7 | File file = new File(fileName); boolean fileExists = file.exists(); if (!fileExists) { FileWriter fileWriter = new FileWriter(file); fileWriter.write(conteudoPadraoParaNovoArquivo); fileWriter.close(); } |
Pronto, o Eclipse acabou de nos ajudar a ter um código menos porco na classe do post sobre comentários de código.
Claro que o código ainda não esta nenhum primor, mas a idéia deste post era mostrar que é possível utilizar recursos da IDE para facilitar o refactoring de código porco quando este for encontrado.
E não se iluda, se você estuda para melhorar o seu conhecimento sobre desenvolvimento e ser um profissional cada vez melhor, provavelmente o código que você escreveu a dois meses atrás você ache muito ruim hoje.
Só para finalizar o post, o seu código deve ter ficado parecido com este:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | package blog; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.Scanner; public class TextFileToScreenPrinter { private static final char[] standardContentForNewFiles = new char[] {'I', ' ', 'c', 'a', 'n', ' ', 'd', 'o', ' ', 'v', 'e', 'r', 'y', ' ', 'u', 'g', 'l', 'y', ' ', 'c', 'o', 'd', 'e'}; private String fileName; private Scanner fileLineReader; public TextFileToScreenPrinter(String fileName) { super(); this.fileName = fileName; } public void doIt() throws IOException { ensureFileAlreadyExists(); abortIfCanNotReadOrWriteFile(); printEachLineFromFileToConsole(); } private void printEachLineFromFileToConsole() throws FileNotFoundException { createLineReader(); forEachLineInTheFilePrintItOnTheScreen(); } private void createLineReader() throws FileNotFoundException { fileLineReader = new Scanner(new File(fileName)); fileLineReader.useDelimiter("\n"); } private void forEachLineInTheFilePrintItOnTheScreen() { Iterable<String> linesInTheFile = initializeLineIteratorFromLineReader(); for(String line : linesInTheFile){ System.out.println(line); } } private Iterable<String> initializeLineIteratorFromLineReader() { Iterable<String> lineIterator = new Iterable<String>(){ @Override public Iterator<String> iterator() { return fileLineReader; } }; return lineIterator; } private void ensureFileAlreadyExists() throws IOException { File file = new File(fileName); boolean fileExists = file.exists(); if (!fileExists) { FileWriter fileWriter = new FileWriter(file); fileWriter.write(standardContentForNewFiles); fileWriter.close(); } } private void abortIfCanNotReadOrWriteFile() { boolean fileExists = new File(fileName).exists(); boolean canReadTheFile = new File(fileName).canRead(); boolean canWriteToTheFile = new File(fileName).canWrite(); if (!fileExists && !canReadTheFile && !canWriteToTheFile) throw new RuntimeException(); } } |
E o atalho de teclado mais mágico de todos é:
COMMAND+SHIFT+L (CTRL+SHIFT+L em PCs) -> Lista os atalhos de teclado.
Acho que isto já esta bom para começar, se você for realmente um preguiçoso inteligente (o tipo que passa um pouco mais de tempo pensando para ter uma solução melhor agora e trabalhar menos no futuro), provavelmente você vai prestar atenção nos menus do eclipse e vai ir decorando as teclas de atalho com o tempo
PS.: Será que alguém vai ficar ofendido com o titulo deste post e vai ficar reclamando que não é pobre ou não é preguiçoso?
Tags: Eclipse, Java, livro2, refactoring
Segue mais uma daquelas grandes coletâneas de links que falam de tudo um pouco, tem Java, .NET, Ruby, Rails, Python, …
E este último merece um certo destaque, um post sobre a péssima postura da Aptana para com a comunidade, quando eles pegaram um monte de código que foi escrito pela comunidade, juntaram com o código do Eclipse e resolveram mudar a licensa de tudo, se alguem esquentar a cabeça com isto eles poderiam até mesmo ser processados, por que estão quebrando a licensa do eclipse e por conseqüência também do Radrail, e quem baixar os fontes hoje não pode mais criar uma distribuição diferente baseado nele.
Bom, acho que era isto, vou tentar escrever com mais frequencia para não acumular tanta coisa junto
Como um bom brasileiro, vou começar reclamando para quem não pode fazer nada a respeito
(Se você também não gosta de lamentações clique aqui)


Eu errei feio e peço desculpas pelo “fiasco” do primeiro mini curso, o que aconteceu foi que eu testei antes de ir para o evento com o banco de dados padrão do netbeans/glassfish e tudo funcionou corretamente, no evento tentando utilizar o MySQL como faço em 99% dos outros projetos sofri com um bug na integração do NetBeans 6.0M10 com o glassfish 2.0 build 53 …
Possivelmente o BUG seja alguma alteração no formato dos arquivos de configuração/deployment do glassfish …
O NetBeans quando gera um jar de um projeto ejb, ele coloca dentro do jar um arquivo META-INF/sun-resources.xml que deveria criar os pools JDBC utilizados pelos EJBs daquele jar, mas a combinação de NetBeans 6.0M10 + esta versão de glassfish, isto não funciona de modo algum, e isto eu não tinha testado, pois fiz os testes com um pool que ja existia e desta forma o NetBeans não tentou criar novamente o pool …
Quando eu informo ao netbeans uma conexão nova, ele deveria criar ela automaticamente no servidor de aplicações, mas parece que a geração do arquivo de configurações do glassfish esta com problemas …
o que o netbeans esta gerando é o código a baixo …
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
<jdbc-resource enabled="true" jndi-name="devmedia" object-type="user" pool-name="mysqlPool"/>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysqlPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="databaseName" value="devmedia"/>
<property name="serverName" value=""/>
<property name="portNumber" value=""/>
<property name="User" value="root"/>
<property name="Password" value="admin"/>
</jdbc-connection-pool>
</resources>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
<jdbc-resource enabled="true" jndi-name="devmedia" object-type="user" pool-name="mysqlPool"/>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysqlPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="url" value="jdbc:mysql:///devmedia"/>
<property name="URL" value="jdbc:mysql:///devmedia"/>
<property name="User" value="root"/>
<property name="Password" value="admin"/>
</jdbc-connection-pool>
</resources>
com este código funciona tudo OK …
O que eu fiz em casa que funcionou corretamente?
Tentei rodar o projeto pelo netbeans diversas vezes e não funcionou, então criei o ear pelo netbeans, abri o ear, abri o jar dos EJBs removi o arquivo META-INF/sun-resources.xml, acessei o console de administração do glassfish, criei uma conexão JDBC com as configurações descritas no arquivo acima, criei um JDBC Resource apontando para a conexão criada e nome devmedia.
Fiz o deploy do ear gerado pelo netbeans sem o descritor sun-resources e tudo funcionou (quando tentei fazer o deploy com o descritor ainda no arquivo ele dava o mesmo erro que estava ocorrendo no evento).
Fazendo ainda alguns testes depois, removi a aplicação e os resources JDBC que havia criado no passo anterior, alterei o descritor ao invés de remover ele, e também funcionou.
Por tanto, esta declarado que o problema da aplicação não funcionar foi causado por um BUG no NetBeans que esta criando o descritor de deployment com dados errados.
E a partir de hoje eu vou começar a prestar mais atenção nos avisos que aparecem quando se vai baixar uma versão beta de algum software: Não Utilize em produção!
Ja na última palestra, sobre Desenvolvimento Web com Spring Framework, os problemas começaram com o projetor da sala que só aguentava 800×600 (o da outra sala suportou os 1280×800 do meu notebook, espetacular o projetor), quem é que consegue trabalhar com 800×600?
Depois disto, o eclipse Europa, que não é mais beta, não tinha nada beta instalado, resolveu que iria cair a cada 5 minutos, e considerando o fiasco que eu ja tinha feito na palestra anterior, em que o exemplo não funcionou, eu comecei a ficar desesperado, e agradeço a quem estava na platéia que deve ter visto a minha cara de pânico e disse, por que tu não usa o IDEA?
Abri o IDEA e o pânico aumentou, pois em 800×600 o layout dele não se ajeitava …
Lembrei de remover a barra inferior do KDE e tudo resolvido, IntelliJ IDEA funcionando, consegui fazer o mini curso de desenvolvimento web com spring framework sem maiores problemas …
Os erros que ocorreram eram mais ou menos previstos, pois a idéia era mostrar como fazer uma aplicação do zero, o que pode dar errado, e como procurar soluções …
No final tudo funcionando, clientes sendo cadastrados, layout podre (não sou nenhum designer
)
O único problema foi que devido aos problemas emocionais do Eclipse Europa, a palestra atrasou um pouco e não deu tempo de passar mais com mais detalhes sobre a escrita de testes unitários (tem alguns exemplos aqui para quem quiser se adiantar), mas vou colocar os testes no exemplo que sera disponibilizado hoje a noite aqui no blog.
Lições aprendidas:
Fora isto só posso pedir desculpas novamente a quem estava assistindo a palestra de EJB3 + JPA + JSF, e como prometi para todos hoje a noite os exemplos estarão na página de publicações aqui do blog com um passo a passo de como fazer para funcionarem, ainda vou adicionar alguns exemplos de código e um video provando que o netbeans me sabotou na primeira palestra
PS.: desculpem pelo texto gigantesco, mas eu tinha muita coisa para explicar …
Tags: Eclipse, idea, Java, Java EE, Spring Framework, Trabalho
Uma das coisas legais de trabalhar com TI é que todo dia tem novidade, uma das coisas ruins de trabalhar com TI é que precisamos pelo menos ter uma idéia sobre tudo o que esta acontecendo …
Então, segue mais um daqueles posts com poucas opiniões e muitos links …
Um pouco sobre o Glassfish a implementação de referência do Java EE 5 (e um ótimo servidor de aplicações):
Tags: Dia a Dia, dia-dia, Eclipse, Java, Java EE, links, produtividade, Spring Framework
Antes de seguir com o problema, vamos começar com um joguinho de procure o erro:
Alguém viu alguma coisa extranha na imagem acima?
Ninguém?
Se vocês prestarem atenção no Package Explorer, ele não apresenta nenhum erro na classe “Teste”, mas o editor de código diz que a classe “TestEntity” não possui o método “save” …
O legal é que isto vai acontecer sempre que eu abrir o editor de código, por tanto não é a famosa “perda de sincronia” que acontece de vez em quando no Eclipse.
Mas se eu mandar executar a classe “Teste” vai ocorrer tudo sem problemas, mesmo com o erro que é mostrado no editor de código, por que ela compila sem problemas …
Para se ver livre deste erro, tive que exportar um jar do do projeto onde estão as classes com aspectos, e mover a classe “Teste” para outro projeto, la o editor de código entende que existe o método “save” na classe “TestEntity” que foi introduzido pela compilação do AspectJ, da mesma forma que a classe executa sem problemas no primeiro projeto …
Por tanto, o editor de java do Eclipse, não fica nem sabendo que existe o compilador do AspectJ e que este altera as classes em tempo de execução, mas o package explorer, como tem os erros marcados pelo compilador, sabe que a classe esta OK, pois a compilação ocorreu sem problema algum …
Como eu fiz para confundir o eclipse?
Criei um projeto do AspectJ, e escrevi o seguinte aspecto:
package introduction;
public aspect EntityAspects
{
declare parents: (@javax.persistence.Entity *) extends SmartEntity;
public boolean SmartEntity.save()
{
return false;
}
}
Depois eu criei a classe TestEntity:
package introduction;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class SmartEntity
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Integer id;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public abstract boolean save();
}
Criei uma Entity que teria os métodos injetados:
package introduction;
import javax.persistence.Entity;
@Entity
public class TestEntity
{
}
Depois disto foi só criar uma classe que usaria a classe TestEntity (qualquer uma com um public static void main)
package introduction;
import introduction.TestEntity;
public class Teste
{
public static void main(String[] args){
TestEntity te = new TestEntity();
System.out.println(te.save());
}
}
Prontinho, o eclipse se perdeu, mas se você mandar isto executar, vai funcionar sem problema algum.
Vou realizar o mesmo teste com o suporte a aspectJ do IntelliJ IDEA e do Netbeans a noite para ver se isto acontece com eles também, mas eu fiquei bastante decepcionado com o AJDT
PS.: sim, este teste foi influencia do Ruby On Rails, estava testando se seria possível com uma combinação de AOP + JPA + Qualquer outra coisa que eu não pensei ainda, um ambiente tão produtivo quanto o RoR
Na verdade, neste caso, apenas uma mistura de ActiveRecord com Repository, que ja ficaria bem legal …
A parte de CoC (Convencion over Configuration) é possível implementar em java sem problemas
UPDATE: instalei o plugin deste link no NetBeans e o comportamento é tão estranho quanto o do Eclipse, o netbeans marca o arquivo com erro no código fonte e no package explorer, mas se mandar rodar a aplicação, funciona tranqüilo
Como eu falei aqui, no próximo sábado (01/09/2007) eu estarei ministrando alguns mini cursos no DevMedia TechWeek.
Ocorreram algumas alterações na grade (que ainda não se refletiram no site), alem do mini curso sobre Java EE (JPA e EJB3 + JSF) vou apresentar também o mini curso: Desenvolvendo aplicações Web com o Spring Framework, pois pelo que me avisaram, parece que o palestraste teve alguns problemas de saúde ou algo parecido.
Então, para quem quiser levar um notebook para acompanhar os mini cursos, o ambiente que vou utilizar será o seguinte:
Para ambos os mini cursos: My SQL (Se preferirem uma GUI podem instalar também o MySQL Administrator e o MySQL Query Browser), todos podem ser encontrados em http://www.mysql.org
Não esqueçam de baixar o driver JDBC para o MySQL
Para os mini cursos Java EE: NetBeans 6.0M10 + GlassFish (vocês podem baixar um bundle com a IDE e Servidor de aplicações aqui)
Para o mini curso de desenvolvimento Web com Spring Framework: um servidor Tomcat, ou até mesmo o próprio Glassfish se vocês já tiverem ele instalado e um Eclipse Europa instalado da seguinte forma:
Baixe o Eclipse Classic da página do eclipse (ou deste post), que é o mesmo Eclipse SDK que ja estamos acostumados.
Descompacte ele e abra a IDE, depois disto clique em Help, Software Updates, Find And Install, New Features.
Marcar os update sites do Europa e Eclipse Project, alem de adicionar os seguintes update sites:
Subversive: http://www.polarion.org/projects/subversive/download/1.1/update-site/ (que como eu comentei aqui, esta migrando para um sub projeto do eclipse)
Spring IDE: http://springide.org/updatesite/
Mylyn Extras: http://download.eclipse.org/tools/mylyn/update/e3.3
E marcar as seguintes opções (agrupadas por update site):
Next, Next, Finish …
Se quiserem ja deixar o servidor que vão utilizar configurado fica mais fácil
Fiz este passo a passo pois eu não tinha o Eclipse instalado na minha maquina, pois formatei ela semana passada e só tinha re-instalado o IntelliJ IDEA e achei que os mini cursos seriam mais interessantes em IDEs open source que todos pudessem utilizar ![]()
PS.: sim, eu sei que eu ja tinha um passo a passo para configuração do Eclipse, mas como a cada 2 ou 3 meses eu mudo completamente quais os plugins que eu utilizo, achei que ter o mesmo ambiente iria facilitar a vida de quem quiser acompanhar o desenvolvimento das aplicações no próprio notebook
Atualmente no trabalho não posso utilizar o IntelliJ IDEA, que é a IDE que uso para trabalhar em casa (projetos open source e afins), e estou utilizando o Eclipse + WPT 2.0 (Europa Vanilla praticamente).
Mas encontrei estes plugins que suprem exatamente aquelas necessidades que você não sabia que tinha antes de começar a usar (como aquela velha frase que diz que: A informática veio para resolver todos os problemas que você não tinha antes dela).
O Legal é que estes plugins foram desenvolvidos pelos mesmos dois consultores, ou seja, os caras são bem criativos
Os plugins que eu achei que valia a pena postar aqui no blog são os seguintes:
Uma Wiki engine que roda dentro do eclipse, uma ótima idéia para documentar um projeto, ainda mais com a facilidade de linkar qualquer tipo de recurso do projeto dentro do texto do wiki, e com um editor bem razoável dentro do mesmo ambiente
É a solução para não perder mais aquele arquivo que você estava editando a horas mas esqueceu de salvar por algum motivo, ele simplesmente salva qualquer arquivo que você estiver editando, assim que o editor perder o foco, e não se preocupe com isto, pois se você fizer besteira pode voltar as versões com o Local History do Eclipse
E por último, mas não menos importante:
Que permite que você selecione um bloco de texto e mande o eclipse ordenar este bloco de texto em qualquer editor
Eu ja precisei disto várias vezes, na verdade não enquanto estava editando código fonte, mas editando outros arquivos e principalmente para executar algum tipo de rotina em batch.
—
Estes foram os culpados por o meu eclipse não ser mais um “Europa Vanilla“, ou seja, estes são os únicos plugins fora o Europa que estou utilizando atualmente
Quem quiser instalar algum deles, todos podem ser encontrados neste update site: http://www.stateofflow.com/UpdateSite
Esta é uma das maiores vantagens do Eclipse, sempre aparece um plugin Divertido (se bem que não posso reclamar o IntelliJ IDEA, ele também tem vários plugins divertidos para nos ajudar a transformar a nossa IDE preferida em uma carroça
O ContractJ é um conjunto de: anotações + aspectos + um plugin para o eclipse para facilitar o uso disto, mas pode ser utilizado em qualquer ambiente que tenha suporte ao AspectJ.
A idéia básica de Design By Contract é que seja possível documentar todas as pré condições e pós condições de um método, e a partir desta documentação, caso seja passado um parâmetro inválido, ou o estado posterior a execução seja inválido, deve ser gerada uma excessão.
O ContractJ possui algumas anotações para definição de pré condições e pós condições, e ja possui aspectos implementados para estas anotações, desta forma ele faz o trabalho sujo de cuidar das condições definidas e gerar excessões quando for necessário, e as próprias anotações ja servem como documentação pois estão exatamente no ponto que possui a pré ou pós condição, e podem caso seja necessário, ser processadas utilizando o APT por exemplo, para geração de algum documento mais formal.
Para ficar um pouco mais claro, vamos pegar um exemplo (o mesmo do site do projeto):
@NotNegative public int calculaExpectativaDeVida (@NotNull Pessoa pessoa);
Este método, precisa receber uma Pessoa existente, por tanto, o parâmetro pessoa, foi anotado com um @NotNull, e claro que a expectativa de vida de alguem não pode ser negativa, então o método foi anotado com um @NotNegative.
A partir deste ponto, todos os que lerem o código vão ficar sabendo que o parâmetro pessoa não pode ser nulo, e que o resultado do calculo não pode ser negativo, ou seja, as pré e pós condições estão corretamente documentadas.
Para prosseguir, o ideal é que o projeto esteja sendo compilado com o AspectJ, existem plugins para o Eclipse, NetBeans e IntelliJ IDEA para facilitar a compilação do código com o AspectJ, mas se você quiser muito, pode também utilizar Load-Time-Weaving para não interferir no processo de compilação do projeto.
Em runtime, utilizando qualquer uma das duas opções apresentadas, se o método calculaExpectativaDeVida receber um parâmetro null, uma InvalidArgumentException sera lançada, e caso por algum erro de programação, o método retorne um valor negativo, sera lançada uma IllegalStateException.
Pronto, temos a documentação, e a verificação em runtime implementadas, sem quase nenhum esforço.
Para melhorar só se isto estivesse integrado com uma ferramenta MDA e as definições de pré e pós condições fossem flexíveis o suficiente para serem lidas do código OCL definido no diagrama UML, mas já é um ótimo começo.
Quem quiser instalar ele para testar, ou até mesmo usar no próximo sistema que for desenvolver, é só usar este Update Site no eclipse: http://update.aspectbrains.org/
Ou então baixar da página do projeto no source forge.
Tags: Eclipse, Java, produtividade, Trabalho
Bom, eu ja havia comentado sobre o Eclipse 3.3 aqui e aqui, mas devido a esta noticia, e a mania “nerd” de utilizar este tipo de camisetas, eu resolvi escrever este review …
Se você programa em Java e não vive em algum outro planeta ou no fundo do oceano, a esta atura ja deve ter ouvido falar do Europa, ou pelo menos do Eclipse.
O Eclipse Europa, é o maior “release train” até o momento (o primeiro foi o Calisto em 2006), e que eu saiba, se não “o”, com certeza, um dos maiores releases coordenados de projetos Open Source diferentes …
E considerando que foram 21 projetos, é que o release final não atrasou, é um feito de fazer inveja em muita empresa grande por ai
Uma das coisas mais legais desta nova release do Eclipse, são os bundles prontos para download, coisa que o Netbeans tem desde sempre, mas o eclipse ainda não tinha …
Agora na página de Downloads do Eclipse, existem pacotes prontos para:
|
Eclipse IDE for Java Developers |
|
|
|
Eclipse IDE for Java EE Developers Ferramenta para desenvolvedores Java criando aplicações Java EE, inclui uma IDE Java, ferramentas para Java EE e JSF, Mylyn e muiros outros. Mais detalhes… |
Windows Linux MacOSX |
![]() |
Eclipse IDE for C/C++ Developers Uma IDE para desenvolvedores C/C++. Mais Detalhes… |
Windows Linux MacOSX |
![]() |
Eclipse for RCP/Plug-in Developers Uma ferramenta completa para a criação de plugins ou aplicações baseadas no Eclipse RCP. Inclui o SDK completo, algumas ferramentas e o código fonte. Find out more… |
Windows Linux MacOSX |
|
|
Eclipse Classic Este é o Download tradicional, que inclui o Eclipse SDK que todos ja conhecem. Find out more… |
Windows Linux MacOSX |
(ja com os links para download pra facilitar a vida de vocês)
Bom, acho que é só isto, a lista do que não gostei é pequena mesmo …
| Eclipse Europa Projects | ||||
| Project Name | Homepage | Version | New And Noteworthy | Download |
| AspectJ Development Tools (AJDT) | ![]() |
1.5 | New | Download |
| Business Intelligence and Reporting Tools (BIRT) | ![]() |
2.2.0 | New | Download |
| Buckminster | ![]() |
0.1.0 | Download | |
| C/C++ Development Tools (CDT) | ![]() |
4.0 | New | Download |
| Data Tools Platform (DTP) | ![]() |
1.5 | New | Download |
| Device Software Development Platform – Device Debugging (DSDP.DD) | ![]() |
0.9 | New | Download |
| Device Software Development Platform – Target Management (DSDP.TM) | ![]() |
2.0 | New | Download |
| Dynamic Languages Toolkit (DLTK) | ![]() |
1.0 | Download | |
| Dash (Eclipse Monkey) | ![]() |
1.0 | New | Download |
| Eclipse Communication Framework (ECF) | ![]() |
1.0.0 | New | Download |
| Eclipse Platform, JDT, PDE and Equinox. | ![]() |
3.3 | New | Download |
| Eclipse Modeling Framework (EMF) | ![]() |
2.3 | New | Download |
| Eclipse Modeling Framework – Query, Transaction, Validation (MQ, MT, VF) | ![]() |
1.1 | New | Download |
| Graphical Editing Framework (GEF) | ![]() |
3.3 | - | Download |
| Graphical Modeling Framework (GMF) | ![]() |
2.0 | New | Download |
| Model Development Tools (MDT) | ![]() |
1.0 | New | Download |
| Model to Text (M2T) – JET | ![]() |
0.8 | New | Download |
| Mylyn | ![]() |
2.0 | New | Download |
| SOA Tools Platform (STP) | ![]() |
0.6 | Download | |
| Test and Performance Tools Platform (TPTP) | ![]() |
4.4 | New | Download |
| Web Tools Platform (WTP) | ![]() |
2.0 | New | Download |
Bom, eu ja falei bastante do WTP por aqui, mas eles estão cada vez melhores.
Uma coisa que eu percebi de cara nesta nova versão é que a performance melhorou muito …
Tem muitas novidades, uma das que mais fez diferença para mim pelo menos, é o suporte ao Tomcat 6 (que infelizmente não esta funcionando direito no IntelliJ IDEA).
Ele finalmente inclui suporte a Tag Files que é uma coisa que me irritava muito nas versões anteriores.
Uma coisa que eu achei espetacular, é o auto completar para URIs das Tag Libraries, ou seja, você digita <@ taglib prefix=”c” uri=”
aperta CTRL+SPACE e pronto, ele lista a URI de todas as tag libraries que estiverem no classpath da aplicação …
Alem do CTRL+Click funcionar agora também para as Taglibs ou seja, ele leva para o TLD ou Tag File onde a tag clicada foi declarada, isto facilita bastante a vida
O Suporte a JPA do WTP também melhorou bastante, mas eu ainda acho irritante ele ficar marcando como erro no projeto uma tabela não existir mesmo quando a implementação de JPA esta configurada para criar as tabelas automagicamente …
O DLTK foi uma agradavel surpresa …
Ainda mais agora que estou tomeçando a programar em Ruby também …
O Code Complete do DLTK é perfeito para Ruby pelo menos, des de que sejam adicionadas todas as bibliotecas ao “classpath” do interpretador configurado …
Um problema que encontrei é que pelo menos no windows, ele impede a utilização de um “.bat” como interpretador, ou seja, é impossivel utilizar o JRuby com o DLTK pelo menos por enquanto, mas isto não chega a ser um problema para quem utiliza algum *nix (como o Ubuntu no meu caso).
Uma coisa que ainda esta faltando no DLTK é o suporte a edição de arquivos rhtml, claro, eu posso configurar eles como HTML no eclipse para trabalhar com Rails, mas não funciona tão bem assim por que o eclipse começa a marcar como erros os locais onde existe código Ruby no meio do HTML.
Alem de Ruby o DLTK vem de fabrica com suporte a Tcl/TK, Javascript e tem um tutorial do tipo “faça você mesmo”, para que você crie uma IDE para Python usando o DLTK …
O BIRT é o “gerador de relatórios” para o Eclipse, eu testei ele, fiz algumas palestras sobre ele, utilizei em clientes e achei espetacular …
Nesta nova versão, para mim, a melhor novidade foi o suporte a crosstables, mas a performance melhorou muito também …
Bom, eu não sou o maior expert em Eclipse do planeta, mas ja uso a ferramenta a algum tempo, e o Eclipse é o culpado por eu não conseguir aproveitar a licensa do IntelliJ IDEA que eu ganhei de gratis …
Mesmo eu sabendo de coisas que o IDEA faz que o eclipse não faz, e que facilitam muito a vida, eu não consigo me acostumar com outra IDE sem um esforço consideravel …
Então, recomendo que vocês pelo menos testem esta nova versão do Eclipse, esta muito bom mesmo …
PS.: acho que este review vale uma das camisetas, pena que acho pouco provável ganhar a jaqueta hehehe
Pois é isto mesmo, provavelmente as proximas versões do eclipse ja virão com suporte a Subversion “de fábrica”
Eu lembro de uma discussão a algum tempo, sobre qual seria a implementação a ser incluida por padrão no eclipse (Subclipse ou Subversive).
não sei se é noticia muito velha, mas a discussão ja acabou!
O Subversive, agora é um subprojeto do Eclipse!
O projeto ainda esta incubado, mas tem tudo para sair da incubação rapidinho.
Infelizmente não vai ser a tempo do Europa …
Seguindo a ideia deste, e deste post no GUJ, resolvi postar aqui a minha lista de atalhos favoritos do eclipse, apenas aqueles que eu uso com uma certa frequencia para evitar tirar as mãos do teclado e precisar usar o mouse para realizar pequenas tarefas que são na maioria das vezes, realizadas com mais rapidez e facilidade apenas com o teclado …
Os atalhos não estão em nenhuma ordem especifica, fora os dois primeiros que com certeza são os mais importantes de todos eles: (more…)
Tags: Eclipse
Bom, só pra não parecer que eu abandonei o blog.
Tenho 5 cursos para ministrar no próximo mes, e não terminei o material de todos ainda, por isto não tenho escrito muita coisa por aqui (hoje a noite um post de pura propaganda sobre o próximo curso da Tech Office em Porto Alegre
)
Mas voltando ao assunto, olhem esta imagem:
O Eclipse 3.3, finalmente resolver agrupar todos aqueles jars que adicionamos no classpath do projeto dentro de um único container …
O que deixa muito mais limpo o ambiente, e pelo menos na minha opinião, mais fácil de trabalhar …
Ja estava na hora mesmo, o NetBeans e o IDEA ja trabalham assim há bastante tempo.
Tags: Eclipse
Bom, precisei trocar de maquina no trampo hoje, a maquina que eu estava usando era alugada, e acabou de chegar a maquina que vou usar, então isto significa, instalar o eclipse novamente. Mas como quem me conhece sabe que sou bastante teimoso, e metido a testador de coisas novas
Resolvi ir pelo caminho mais dificil, mas um pouquinho mais divertido
(more…)
É, como eu comentei no outro post, eu estou brincando um pouquinho com o Eclipse 3.3M5, e acabei de testar um esquema nele que esta ficando bem legal …
O webtools 2.0, vem com um editor visual (que até quebra um galho) para páginas WEB, com suporte para JSPs e JSF (pelo menos foi o que eu testei até agora …
O editor é bem parecido com o que vem no Exadel, tem drag`n`drop de componentes de todas as taglibs disponiveis no classpath do projeto (não sei se ele mostra qualquer uma de forma visual, mas as de JSF que eu testei apareciam de forma visual, até mesmo a dataTable do RI-Sandbox que estou usando (ela gera um elemento caption quando se adiciona a facet caption) …
As propriedades da tag podem ser editadas via código ou via a view de properties padrão do eclipse.
Deem uma olhadinha na cara do brinquedo novo
É só clicar na imagem para amplia-la …
PS.: eu sei que o visual pack do netbeans ja faz isto, mas com o visalpack eu tenho que usar a estrutura de código dele, com este eu uso da forma como eu quiser …
O editor ainda não esta perfeito, mas esta prometendo
Pelo menos a aba de preview ja esta bem legal
Alguem mais por ai ja esta testando o eclipse 3.3 com webtools 2.0?