Archive

Posts Tagged ‘Java’

Oracle Corporation compra a Sun Microsystems

April 20th, 2009 No comments

Estava-se a ver. Após o colapso das negociações da Sun com a IBM, a primeira ficava numa  posição fraca como fornecedor credível perante os respectivos clientes.

oracle_logo                        sun_logo

Com esta compra a Oracle fica com a linguagem Java, a popular base de dados MySQL (Oracle já detinha o “engine” InnoDB usado pelo MySQL) e, finalmente, um sistema operativo (Solaris) que poderá ajustar para a máxima performance das suas bases de dados e outros processos de negócios.

Essencialmente adquiriu as ferramentas necessárias para competir directamente com a IBM: hardware servidor, sistema operativo, bases de dados para diferentes níveis e uma linguagem de programação e plataforma para ligar tudo.

Certamente isto fará que a Oracle não fique tão dependente da RedHat  para oferecer soluções no mundo Linux/UNIX.

A luta continua: Microsoft vs Oracle vs IBM.

Quanto ao futuro de MySQL, acho que não vale a pena ter ilusões. O seu destino é a de ser uma base de dados para brincar, e como forma de captar alguns “hippies”, para logo os viciar em sistemas de bases de dados que rendem dinheiro à sério. Qual poderia ser a motivação para a Oracle promover MySQL?

August 16th, 2008 No comments

Ao tentar correr um pequeno teste de persistence, encontro o seguinte erro:

SEVERE: Application class mypack.TestJPA failed to launch
Local Exception Stack:
Exception [TOPLINK-4003] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))):
 oracle.toplink.essentials.exceptions.DatabaseException
Exception Description: Configuration error.  Class [com.mysql.jdbc.Driver] not found.
...

A solução? Acrescentar a livraria do MySQL ao projecto.

Categories: Tecnologia Tags: ,

JPA: Toplink Essentials vs Hibernate

August 14th, 2008 No comments

É práctica estabelecida criar uma solução de software dividindo em diversas camadas: uma para interacção com bases de dados outra que suporte o modelo de negócio e outra com o interface para o utilizador. É claro que o número de camadas pode variar de 1 para ‘n’. Cada camada está isolada das restante, fornecendo um desenho modular, com interfaces entre elas claramente definidas.

A interacção com bases de dados obriga a lançar montes de SQLs contra a base de dados para qualquer actividade. Estas instruções SQL  devem ser modificadas manualmente, e há sempre oportunidades para erro quando se modificam as entidades na base de dados ou as classes no código ou as próprias instruções SQL (nem vale a pena falar já nos diferentes dialectos SQL para cada vendedor).

Por isso, são sempre bem-vindas as ferramentas que automatizam estas interações, eliminando pontos de falha. Para evitar introduzir mais instabilidades, essas ferramentas deveriam ser o mais sólidas e consensuadas possíveis.

Java oferece JPA, Java Persistence API, que, atravês de certas classes e anotações permitem abstrair o programador  das tarefas mais repetitivas. Ainda, Netbeans 6.1 permite criar classes automaticamente a partir das tabelas nas bases de dados. Apesar de ser útil para qualquer aplicação, JPA parece entrincherado no J2EE (bem podia estar no J2SE), e só falam nesta especificação em conjunto com EJB (Enterprise Java Beans).

Esta persistência pode ser fornecida por qualquer vendedor. Actualmente estão Toplink Essentials, Hibernate e JDO.

JDO não parece a opção mais habitual, por isso vou deixâ-lo de lado.

Toplink Essential é uma livraria opensource da Oracle. A empresa tomou conta de este produto atravês de certas aquisições. Inicialmente havia um custo nas licenças para uso comercial, mas a determinada altura resolveram oferecer esta versão aberta. É a que Netbeans e GlassFish (e portanto SUN Application Server 9.1) incorporam “de série”.

Hibernate é uma livraria alternativa e opensource. Há muitos livros sobre ela, mas é preciso fazer downloads separados para a usar em Netbeans e GlassFish.

Isto deixa-me num dilema: com quê versão trabalhar? Hibernate tem muita documentação, mas não vem de série, ou Toplink, que tem pouca documentação.

Acho que vou começar com http://java.sun.com/developer/technicalArticles/J2EE/jpa/.

Queria experimentar com cada tecnologia de forma individual, mas está a ser difícil.

Deixo aqui alguns dos links que encontrei. Espero que sejam de utilidade a alguém:

*UPDATE 2008-08-15*

Já localizei alguma informação “oficial” sobre o TopLink Essentials: http://www.oracle.com/technology/products/ias/toplink/jpa/index.html e https://glassfish.dev.java.net/javaee5/persistence/.

:-)

August 14th, 2008 No comments

Arranjar títulos para os posts é uma seca!

Após instalar o Sun Application Server 9.1 (J2EE) e mais outros produtos que vêm com ele, e depois das diversas tentativas de instalar GlashFish e outros, acabei com mais do que uma instalação de Java DB e de GlashFish em vários directórios. A SUN disponibiliza uns tutorias para o J2EE, mas requerem certas bases de dados, cuja instalação não é para nada simples. Os tutorias são para aprender, mas para poder seguir os tutoriais parecia que já tinha que saber bastantes coisas (não faz sentido). O facto de ter mais do que um servidor de bases de dados é capaz de ter complicado a coisa. Acabei por desistir dos tutoriais, vou seguir outros roteiros.

Uma das áreas de interesse é o Java Persistence (O Java tem inúmeros termos e acrónimos, que para os leigos torna a coias confusa. Acho que fazem de propósito.). Java Persistence é uma especificação que os fornecedores devem seguir. Os dois fornecedores (ou implementações) em destaque são Toplink e Hibernate (Sempre a complicar. Em qualque outra linguagem chamavem-lhes módulos ou livrarias e a coisa ficava por aqui …). Aaaaaanyway, lá fui aos plugins do Netbeans para instalar os referidos suspeitos. Aparentemente o Toplink já está instalado e não é opcional (???). O Hibernate é que deve ser bom, porque a malta de Netbeans criaram duas entradas para ele: Hibernate Support e Hibernate 3.2.5. Descrições semelhantes e sem mais detalhes. Isto é que eu chamo tomar decisões informadas. Acho porreiro que facilitem tantas betas e que se preocupem em disponibilizar produtos, mas podia haver alguém que fornecesse uma base sólida e com um mínimo de qualidade para o desenvolvimento.

Voltando ao que interessa, lá instalei os dois plugins para o Hibernate. Reiniciei o Netbeans e … nada. Morreu. No arranque só mostrava uma mensagem a dizer que crashou e que se quero enviar os dados para Netbeans, que prontamente me informava que estava com sorte porque o erro já está resolvido no Netbeans 6.5 … que agora ainda e beta e que sai em Outubro (o tempo correcto nesse caso é futuro, não presente nem passado: desde quando os produtos beta se tornaram tão normais e permitem desculpar a falta de controlo de qualidade?).

Desinstalei tudo Netbeans, J2EE, etc, apaguei os directórios .nbi, .netbeans, etc. Fui ao site de Netbeans e fiz download da versão 6.1 com tudo  o que tivesse (incluído J2EE). Instalei e parece funcionar. Vamos lá ver até quando.

A viagem continua.

Categories: Tecnologia Tags: ,

Um dia perdido nos labirintos de Sun/Java

August 12th, 2008 No comments

Após um tempo a programar para criar uma aplicação em Swing, com o JDK1.6, resolvi dar o salto para J2EE.

Esta é uma de aquelas áreas nas quais nunca entrei, porque de cada vez que tentava ficava liado na jungla de documentação e links.

Engraçado que nunca tive problemas (isto é, não mais do habitual) a administrar servidores Apache com PAM, LDAP, PHP4 e PHP5, MySQL, etc. Sei trabalhar com estas tecnologias e pôr aplicações a trabalhar. J2EE supostamente envolve tecnologias equivalentes, só que em Java. Mas sempre me escapou.

Não ia passar de hoje. Estive à beira de desistir ao longo do dia. Sou persistente, mas Sun e a comunidade Java fazem um excelente trabalho a ocultar a informação e a dispersar. :-(

Ora, quero instalar J2EE (isto é, o conjunto de APIs que me permitirão desenvolver aplicações web com diferentes níveis de complexidade, etc). Vou ao site da Sun, e encontro os seguintes downloads (http://java.sun.com/javaee/downloads/index.jsp):

  • GlassFish + MySQL
  • Java EE (New! Sun Java System Application Server 9.1 Update 1 with MySQL Community Server is Sun’s supported distribution of GlassFish v2 Update Release (UR) 1 bundled with the MySQL Community Server open-source database.)
  • Java EE + JDK (Java EE 5 SDK is a free integrated development kit used to build, test, and deploy Java EE 5-based applications. Multilingual support is available.)
  • App Platform + JDK (Java EE 5 SDK + JDK adds support for Java Platform, Standard Edition (Java SE) 6 (JDK). Multilingual support is available.)
  • Java EE + Tools (Java Application Platform SDK + JDK includes support for Java Platform, Standard Edition (Java SE) 6 (JDK). Multilingual support is available.)

Cada um deles, uma combinação dos seguintes elementos individuais:
GlassFish v2 UR2*, MySQL, Samples, BluePrints, Tutorial, Documentation, Java SE (JDK), Open ESB, Access Manager, Portlet Container, WSRP, Portal Pack, NetBeans IDE.

Ora, já tenho instalado o Netbeans IDE, e o Java JDK, não quero instalar o MySQL agora, e talvez queira instalar um outro Application Server … e quê significam os outros elementos???

Sou obrigado a tomar uma decisão com elementos incompletos e contraditórios. Não muito animador para quem se tenta iniciar nesta área.

Como já tinha ouvido falar no GlassFish, fui ao seu site (https://glassfish.dev.java.net/), e faço download da versão estável (GlassFish v2) e primeira sorpresa: um ficheiro .JAR??? Nem um miserável .BAT a acompanhar para tornar a instalação minimamente simples? Bom, lá faço o download e sigo as instruções (a sério, nem um simples script? por favor!). Seguinte sorpresa: a suposta instalação não passa duma simples descompressão num directório, bravo! Podiam ter fornecido um .ZIP, mas tinham que complicar. Seguinte sorpresa: como é que se arranca esta coisa? O directório /bin/  só contem um DLL, e não encontro informação nenhuma na net. Vou ao Netbeans, e no apartado de Serviços>Servers vou ao Add Server… , escolho Glassfish V2 e aponto ao directório onde está a instalação. Nada. Não reconhece esse directório nem nenhum outro. Google, Google, click, click durante 1 hora. Resultado: SUN 1, eu 0.

O download da versão V3_TP2 (Technology Preview 2, AKA Good Luck, You’re on your own) foi pelo mesmo caminho. Mais google,  e encontro um artigo onde falam em instalar no Netbeans o plugin “GlassFish V3 JavaEE Integration”. Faço isso e no processo o Netbeans faz o download, instala e configura este servidor …

Nem acredito. Então, a instalação de uma versão pre-alfa é facilitada, e curiosamente não há equivalente para a versão que supostamente é estável e apta para produção … A malta de GlassFish/Netbeans/Sun deveriam falar algum dia e pôr em ordem as suas prioridades.

Lá crio o primeiro exemplo, um pequeno projecto JSP. Ok, funciona. Tento com Servlets e … BUM! não encontra o pacote javax.servlet! As coisas estavam a correr demasiado bem.

Nova procura, google, google, click, click, volta ao site de GlassFish, volta ao site de Sun.

Com uma dica de aqui, e uma dica de lá, chego à conclusão de que preciso de uma livraria servlet<qualquer coisa>.jar. Encontro uma que adiciono ao projecto (ad-hoc) e lá funciona. Mas não parece uma solução fiável.

Por fim, desisto disto tudo e acabo por fazer download da opção menos má: o Java EE + JDK da Sun. Este já sim instala, dá para configurar no Netbeans e já fornece todas as livrarias necessárias.

Portanto, se alguém andar às voltas com este assunto, como eu andei, que vá directamente para o site de Sun, para se poupar a sarilhos.

Categories: Tecnologia Tags: ,

Pequenos sucessos

August 10th, 2008 No comments

Prefácio

Ao longo dos anos tenho andado a tentar programar em Java. Comecei por ler alguma documentação online, arranjar os SDK e com o Notepad e o javac na linha de comandos lá ia eu testar o código dos exemplos. É claro que este caminho tem limitações, não teóricas, mas sim práticas, ao nível de edição e das ajudas disponíveis. Havia poucos editores livres e não forneciam grande ajuda. Como não via um claro retorno do investimento, virei para o Visual Basic, que contava com um editor excelente e um conjunto de controlos que permitiam criar uma solução profissional em tempo razoável.
Em 2002 a Microsoft lançou a plataforma .NET, apontando o fim do Visual Basic, e a Sun lançava a versão 1.4 do Java. Era tempo de ré-avaliar a situação. Novas tentativas frustradas com o Java. Experimentei com o VB.NET, mas claramente era uma plataforma imatura na altura, com muita teoria por  aprender e as bases ainda a mudar. Finalmente resolvi agarrar o toro pelos cornos e aprender Java ou .NET. Apostei no Java, por causa da portabilidade entre plataformas (trabalho tanto no Windows como no Linux). Não partia do zero, mas precisava consolidar o que já sabia e incorporar as novas tendências.

Solução e tecnologias usadas

Já com o Java 1.6u7 no meu portátil, fiz download do Netbeans 6.1.
Como estou inscrito na Universidade Aberta, aproveitei para desenvolver diagarams UML nesta plataforma, e fui ganahando confiança. Fui desenvolvendo pequenos projectos para fazer testes unitários de algumas tecnologias. Finalmente desenvolvi uma aplicação para consolidar conhecimentos. Tentei usar a maior parte do que tinha aprendido, mesmo que fosse um pouco forçado neste contexto.
Criei uma “Java Desktop Application”, baseada no “Swing Application Framework” (mais informação em https://appframework.dev.java.net/).
Criei componentes re-utilizáveis (acabei por criar uma livraria aparte onde consolidar estas classes) e incorporei diversos componentes Swing, incluíndo o componente Outline (só disponível no Netbeans 6.5M1, ver um artigo meu anterior).

Incorporei Drag’nDrop, para facilitar a trasnferência de ficheiros.
Utilizei Threads para optimizar o rendimento de determinadas funções, mas também aprendi a usar Threads como forma de tornar a aplicação mais flexível e interactiva. Posteriormente aprendi que o “Swing Application Framework” também tem facilidades para tal, com as suas Tasks. Isto é importante para evitar que a execução de determinadas tarefas bloqueie completamente a aplicação. Permite, ainda, o feedback ao utilizador sobre o progresso das tarefas, dando-lhe a oportunidade de cancelar se assim o decidir.
O uso de acções (funções com a notação @Action) também ajuda a tornar o layout do código mais fluído e limpo, separando as interacções de componentes da lógica do processo: [comp.Swing] -> [@Action] -> [Models] / [Business Objects].
Aprendi a lidar com os Models, um conceito com o qual tive dificuldades no passado, e por culpa dos quais desisti de avançar no conhecimento do Java.
Incorporei Logging num dos componentes, mas preciso de ver mais exemplos quanto ao seu uso (faz sentido incorporar Logging em todos os componentes? uso para medir performance ou só para registar erros?).
Testei algumas partes com JUnit, mas tenho que ver bem qual é a melhor estratégia com o apartado de testes de aplicações. Foi fácil gerar os testes, mas a gestão de objectos externos para fazer os testes parece manual (?), e acho que não todos os testes são necessários.
Internacionalizei a aplicação em Inglês e Português. Isto serve-me para que a próxima vez pense bem a organização do texto. Não foi complicado e permite alargar o mercado de utilizadores.

Art

Criei os meus próprios icons (o que só me ajuda a apreciar e dar valor aos desenhadores que se dedicam a esta tarefa), primeiro por gosto, e segundo para me evitar infracções de direitos de autor e afins, para além de ser complicado encontrar todos os icons necessários e que sigam o mesmo estilo (que conduz a uma aparêcia inconsistente). Desenvolvidos no Adobe Illustrator e exportados com as dimensões adequadas.

Distribução

Depois de todo o trabalho é preciso criar um embrulho adequado. O Netbeans permite criar um pacote pronto para distribuir via WebStart (cria um ficheiro .jnlp e uma página html com o link).
Para a distribuição tradicional quis criar um executável a partir da aplicação.
Encontrei o Launch4J (http://launch4j.sourceforge.net/). Permite criar um ficheiro .exe a partir do nosso .jar, o que evita que um utilizador em Windows tenha que executar o “java -jar …” desde uma linha de comandos ou ter que fornecer um .bat para fazer isso. Inconveniente: só embrulha um .jar, sendo necessário que os .jars de outras livrarias sejam ainda disponibilizadas. Sendo esse o caso, optei por criar só o .exe para lançar o .jar principal.
Como só tinha uma solução parcial, procurei outras soluções: um instalador completo. Encontrei o InstallJammer (http://www.installjammer.com/), que faz o que queria e mais. Ainda por cima, é open source, corre em várias plataformas e permite criar instaladores para essas mesmas plataformas. :-)
Claro que para além de incluir o ficheiro .exe criado com o Launch4J, também criei à mão um ficheiro .bat para Windows e um script equivalente para Linux.
Lá criei e testei pacotes de instalação para Windows e Linux … e funcionou.
O instalador parece muito complexo para os meus objectivos imediatos, mas contem um Wizard que facilita a criação de projectos.
Entretanto, encontrei ainda outros posts que falam sobre a criação de um único ficheiro .jar para incluir todo um projecto: Deliver Your Java Application in One-JAR!. Aparentemente o processo é tecnicamente possível mas nem sempre funciona e, portanto, não é uma solução válida a longo prazo.

Conclusão

Foram 2 semanas intensas e esgotadoras, ultrapassando alguns obstáculos que no início via como insuperáveis. Satisfeito com os resultados, mas o Java contem tantas livrarias e projectos que é difícil
dominar tudo. A viagem e os desafios continuam. Nos próximos tempos tenciono atacar o apartado Web (JSP,Glassfish,Struts framework,etc).

Categories: Tecnologia Tags:

Mudar o icon de um executável em Java?

August 5th, 2008 No comments

Há problemas que são mesmo ridículos. Uma aplicação criada com Netbeans não consegue mudar o seu icon (a pequena imagem que no Windows aparece na janela ao lado do seu nome, e na barra de tarefas).

icon-executavel

Após muito tempo no Google, as respostas conduziam ao mesmo: não há forma de fazer isso “oficialmente”, mas há hacks. Não é a resposta que procurava. Como referência, aqui fica o endereço: http://wiki.netbeans.org/DevFaqExecutableIcon

Categories: Tecnologia Tags:

Como dar um tiro no próprio pé

August 5th, 2008 No comments

É o que pensei depois de horas às voltas com um erro no Java.

Este é parte do código original.

// Obter lista de entradas
for (DupeEntryFile def:de.getDupeEntryFileList()) {
    if (def.isChecked()) {
        // Se a entrada foi marcada, apagar o ficheiro ...
        def.getFile().delete();
        // ... e retirar a entrada da lista
        de.removeDupeEntryFile(def);
    }
}

A variável de agrupa um conjunto de objectos que actuam como invólucros de ficheiros. O método getDupeEntryFileList() devolve a lista interna de esses objectos. A seguir percorremos a lista, tomando um objecto de cada vez e inspeccionando-o. Se é para apagar, apagamos o ficheiro no sistema e retiramos o objecto do grupo.

Tão simples e tão errado!

:-(

Acontece que quando o objecto é retirado da lista com de.removeDupeEntryFile(def), é retirado da lista original, o que faz que o ciclo for salte sobre o seguinte elemento.

O erro era pior porque a mesma construção era aplicada a outras listas no programa.

Reorganizei o código, e a versão final ficou da seguinte forma:

Deque<DupeEntryFile> defs = new ArrayDeque<DupeEntryFile>(dupeEntryFiles);
while (!defs.isEmpty()) {
    DupeEntryFile def = defs.pop();
    if (def.isChecked()) {
        def.delete();
        dupeEntryFiles.remove(def);
    }
}

Igualmente simples, mas desta vez verifiquei os resultados até confirmar que o processamento era o correcto. O uso da classe Deque em lugar de List e o facto de trabalhar sobre uma cópia e não sobre a lista original resolve o assunto.

Não pude deixar de me lembrar do famoso “Como dar um tiro no próprio pé” em cada linguagem de programação. Não deixem de ler este post com o tradicional “How to Shoot Yourself in the Foot in Any Programming Language”. É tão bom o post como os comentários dos utilizadores.

Categories: Tecnologia Tags:

JavaFX preview

August 5th, 2008 No comments

Encontrei este artigo sobre a última versão disponibilizada de JavaFX: JavaFX Preview SDK Interview and Demo

Contem dois vídeos: um com uma entrevista e outro com uma demonstração ao vivo do que se poderá esperar.Para além da importância do próprio JavaFX, também se deverão beneficiar outras áreas de Java com as novas librerias disponibilizadas.

Para quem achava que o Java era lento e aborrecido, é engraçado ver uma aplicação Java a mostrar diversos vídeos a correr simultaneamente e a rodopiar no écran.

JavaFX deverá concorrer contra Microsoft Silverlight e Adobe AIR / Flash. Será interessante ver se a quantidade de programadores com experiência em Java consegue compensar o arranque tardio.

Para mais informação sobre JavaFX, visitem o site http://www.javafx.com/.

Categories: Tecnologia Tags: ,

Listas de Cores Alternadas

August 2nd, 2008 Comments off

Mais simples do que parecia: cria-se um novo ListCellRenderer, modifica-se ligeiramente e adicionamos à lista.  Aqui está o código.

class MyListCellRenderer extends javax.swing.DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList list, Object value,
      int index, boolean isSelected, boolean cellHasFocus) {
        Component comp = super.getListCellRendererComponent(list, value, index,
          isSelected, cellHasFocus);

        if (index%2 > 0) {
            if (isSelected) {
                comp.setBackground(Color.LIGHT_GRAY);
            } else {
                comp.setBackground(new Color(204,255,255));
            }
        } else {
            if (isSelected) {
                comp.setBackground(Color.LIGHT_GRAY);
            } else {
                comp.setBackground(Color.WHITE);
            }
        }

        return comp;
    }
}

E na inicialização de componentes aplicamos o CellRenderer.

...
    initComponents();
    <JList object>.CellRenderer(new MyListCellRenderer());
...

Eis o resultado.

Categories: Tecnologia Tags: