Excerpt about Java development

Enterview with Martijn Verburg published in:http://www.oracle.com/technetwork/articles/java/martijn-1865077.html

Oracle Technology Network: You were voted by your JavaOne peers as a JavaOne Rock Star for your session on the diabolical developer, in which you identified some “diabolical” practices that Java developers engage in. Tell us about some of the bad practices.

Verburg: I’ll refrain from going overboard, but here are the ones that have left me shaking my head in disbelief most often:

  • A lack of communication: Software development is far more a social activity than a technical one; most projects fail because of communication issues and social dynamics, not because of a bad technical decision. Sadly, many developers never learn this lesson.
  • No source control: Some developers simply store code in local file systems and e-mail the code in order to integrate their changes; yes, this still happens.
  • Design-driven design: Some developers are inclined to cram every design pattern from the Gang of Four (GoF) book into their projects. Of course, by that stage, they’ve actually forgotten why they’re building the software in the first place.

Oracle Technology Network: If these practices are so bad, why do developers engage in them?

Verburg: I’ve seen a wide range of reasons:

  • They were never taught at their high school or university that their bad habits were harmful.
  • They weren’t mentored in their first professional roles.
  • They’ve lost passion for their craft.
  • They think software development is a technical activity and not a social one.
  • They think that they’ll be able to tidy it up later.
  • They’re deliberately being malicious!

Oracle Technology Network: Can you identify any core confusions, assumptions, or misconceptions that lead Java developers to engage in bad practices?

Verburg: With Java and the JVM, in particular, I’ve seen a couple of trends. One is that developers think that the JVM is a magic box that will clean up their memory and make their code run fast, as well as make them cups of coffee. The JVM does help in a lot of cases, but bad code can and will still lead to terrible results!

The other trend is to try to force Java (the language) to do something it’s not very good at, such as rapid Web development. So you get a proliferation of overly complex frameworks, libraries, and techniques trying to get around the fact that Java is a monolithic, statically typed, compiled, OO environment. It’s not a Golden Hammer!

Gerenciamento de Identidades (Identity Management)

Características

  • Ponto central de criação, sincronização, administração e consulta de usuários;
  • Ponto central de provisionamento de usuários. Um software IdM abastece outras aplicações com as informações dos usuários;
  • Self-service;
  • Conectividade com plataformas heterogêneas (trabalha com diversos protocolos, bancos de dados, serviços de diretório, aplicações e sistemas operacionais).

Dimensões

  • Contas: Gerenciamento do ciclo de vida de uma identidade;
  • Autorização: Provisionamento baseado em papeis e regras;
  • Administração: Processo/Fluxo de aprovação;
  • Auditoria e Relatórios: Conformidade e Gestão de risco;

Observação: Single Sign-On (SSO) está relacionado mas não está necessariamente incluído em um projeto IdM.

Configuração da JVM para rodar ColdFusion

1. Internacionalização

Para quem desenvolve aplicações ColdFusion JEE para público alvo brasileiro, é necessário “internacionalizar” a JVM (acentuação e formatos de data, hora e moeda).  Observação: parâmetros válidos para a Sun’s HotSpot™ Java Virtual Machine.

No arquivo run.conf:

JAVA_OPTS=”-Xms1024m -Xmx1024m -Xmn512m -Xss128k -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:MaxPermSize=128m -XX:+UseParallelGC -XX:+UseParallelOldGC -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dsun.lang.ClassLoader.allowArraySyntax=true “

Acrescentar uma linha com:

JAVA_OPTS=%JAVA_OPTS% -Duser.language=pt -Duser.country=BR -Duser.timezone=Etc/GMT+3  -Dfile.encoding=iso_8859_1

Curiosidade: muitos textos em inglês se referem a internacionalização como “i18n”, porque a palavra “internationalization” começa com a letra “i”, termina a letra com “n”, e possui 18 caracteres entre elas.

2. Habilitar o agente jconsole localmente

Acrescentar uma linha com:

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote

3. Habilitar o agente jconsole remotamente sem utilizar seguraça nem ssl

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=12345″

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false”

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false”

Refs:

http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

http://java.sun.com/performance/reference/whitepapers/tuning.html

http://www.jboss.org/community/wiki/UseJDK5JConsole


# Enable the jconsole agent remotely on port 12345
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345″
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false”
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false”

What is a WAR file? / O que é um arquivo WAR?

 

WAR é o acrônimo de Web Archive.

Na plataforma J2EE uma aplicação web pode ser instalada desempacotada em uma estrutura de diretórios, ou empacotada dentro de um arquivo WAR.

Um arquivo WAR é simplesmente uma estrutura de diretórios de uma aplicação web, que foi empacotada em um arquivo ZIP para o qual é dada a extensão .WAR.

Arquivos WAR podem ser criados com qualquer utilitário que seja capaz de criar um arquivo ZIP, como por exemplo, o Winzip (no Windows) Gzip (no Unix) ou o utilitário Jar do JDK.

Deste modo, arquivos WAR são um modo conveniente de instalar uma aplicação J2EE inteira como se fosse um único arquivo.

Um pacote WAR pode conter:

- Arquivos de classe java que os desenvolvedores criaram,

- Arquivo de configuração do pacote – o descritor da instalação / deployment descriptor (web.xml, jboss-web.xml),

- Arquivos fontes para a aplicação (arquivos de configuração, arquivos de imagens, arquivos HTML, arquivos XML, etc).

Subversion

(version control / controle de versão)

http://pt.wikipedia.org/wiki/Subversion

- Baixe e instale o cliente subversion Tortoise (que possui interface gráfica) em:

http://tortoisesvn.net/downloads

Um cliente subversion é útil para podermos baixar frameworks e aplicações-exemplo que somente estão disponíveis através dele.

Caso apareça a mensagem abaixo durante o primeiro checkout após a instalação

svn: PROPFIND of ‘XXXXXXX': could not connect to server (XXXXXXXX)

é porque provavelmente falta você especificar o proxy da sua rede na configuração do Tortoise.