Tag Archive for 'java'

com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! Application was not properly initialized at startup, could not find Factory: javax.faces.context.ExceptionHandlerFactory

O título do post é grande mas preferi deixar ele assim mesmo por ser autoexplicativo.

Ao tentar rodar uma aplicação no JBoss 5.1 usando JSF 2.0 obtive o erro do título:

com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! Application was not properly initialized at startup, could not find Factory: javax.faces.context.ExceptionHandlerFactory

Esse erro aconteceu mesmo com as libs “jsf-api-2.0.4-b09.jar” e “jsf-impl-2.0.4-b09.jar” na pasta WEB-INF/lib. A solução eu encontrei nesse link:

https://community.jboss.org/wiki/UpgradeJBossASToJSF2

Basicamente só é preciso entrar na pasta do servidor e copiar o arquivo jboss-faces.jar para a pasta lib do projeto.

No meu caso a pasta do servidor é: C:\java\jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\jsf-libs

É isso.

iText: Gerando PDF’s em Java ou C#

Recentemente em alguns estudos me deparei com a biblioteca iText, uma API para geração de PDF’s que pode ser usada em JAva ou C#.

Essa API é gratuita e Open source, podendo ser baixada no seguinte endereço: itextpdf.com, eu baixei a versão 5.4.3 (itextpdf-5.4.3.jar).

Crie um projeto Java (Java Project) no Eclipse (estou usando a versão Juno). Clique com o botão direito em cima do projeto e vá em Build Path -> Configure Build Path. Vá na aba Libraries e clique no botão “ADd External JARs”. Selecione o JAR do iText e clique em OK.

Em Source crie uma classe qualquer (eu coloquei o nome de ImpressaoPDF.java). Abaixo colocarei o código fonte e em seguida explicações sobre algumas linhas:


import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

public class ImpressaoPdf {
public static void main(String[] args) throws Exception {
Document doc = null;
FileOutputStream os = null;
try {
doc = new Document(PageSize.A4);
os = new FileOutputStream("arquivo.pdf");
PdfWriter.getInstance(doc, os);
doc.open();
Font f = new Font(FontFamily.COURIER, 20, Font.BOLD);
Paragraph p = new Paragraph("Meu primeiro arquivo PDF!", f);
p.setAlignment(Element.ALIGN_CENTER);
doc.add(p);
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (doc != null) {
doc.close();
}
if (os != null) {
os.close();
}
}
}
}

Document representa o documento PDF a ser gerado, por isso é criado logo no início do código.
É preciso “abrir” o documento para poder escrever nele, isso é feito no trecho “doc.open();”, após isso é possível adicionar texto ao documento, como a configuração de fonte, criação de parágrafo e alinhamento:


Font f = new Font(FontFamily.COURIER, 20, Font.BOLD);
Paragraph p = new Paragraph("Meu primeiro arquivo PDF!", f);
p.setAlignment(Element.ALIGN_CENTER);
doc.add(p);

E por fim é preciso fechar o Document e o OutPutStream.
Após isso é só rodar o projeto como Java Application mesmo, o arquivo será gerado na pasta raiz do projeto dentro do seu workspace.

Enfim, existem inúmeros posts na internet sobre a biblioteca e eu quis contribuir com mais um, além da própria documentação presente no site.

É isso! []s

Promoção de Voucher para Certificação Oracle Java

Hoje fiquei sabendo através de um colega aqui na Cobra que está rolando uma promoção desde o dia 16/11/2010 (será que estou desatualizado?! rs). Enfim, a promo trata da compra de voucher na Oracle com retake grátis. Do dia 16/11/2010 ao dia 31/01/2011 todo mundo que comprar um voucher para certificação na Oracle, ganhará gratuitamente o retake se não forem aprovados na primeira prova.

O site da Oracle está assim:

As pessoas que adquirirem um voucher de exame de certificação entre 16 de novembro e 31 de janeiro de 2011, e que não forem aprovadas no exame, se qualificarão para a sua repetição gratuita. Basta entrar em contato com o Centro de Testes Prometric Autorizado da mesma forma que na tentativa inicial do exame e fornecer o número do seu voucher de exame de certificação original.

Depois de fazer o exame inicial, aguarde 72 horas antes de agendar a repetição gratuita de exame. Lembre-se também de que, de acordo com as diretrizes de certificação da Oracle University, é preciso aguardar pelo menos 14 dias para repetir qualquer exame.

A repetição gratuita deve ser utilizada no prazo de 12 meses a partir da data de compra do voucher de certificação original. Não é necessário entrar em contato com a Oracle University para agendar a repetição do exame. Os exames são realizados em Centros de Testes Prometric Autorizados, localizados no mundo todo.

Depois de adquirir seu voucher de exame, entre em contato com o centro de testes desejado para agendar a data, a hora e o local do exame.

O voucher custa atualmente R$ 272,00.

Link: http://goo.gl/MnvqK

Nesse link é possível verificar as certificações que fazem parte da promoção. Estou estudando pro OCJP, então irei aproveitar e comprar o meu. Se quiser aproveitar faça o mesmo: RUN!!

Calendar getDisplayName()

Escrevo este post por um problema que enfrentei hoje.

Precisei em uma aplicação desenvolvida aqui no trabalho pegar o nome por extenso do mês de uma determinada data recuperada do banco de dados e mostrar este mês em um relatório.

No decorrer do desenvolvimento utilizei a API GregorianCalendar do java.util.GregorianCalendar, e usei o método getDisplayName() mais ou menos assim:

Locale locale = new Locale(“pt”,”BR”);
//Define um calendar
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(new Date());
//Obter o nome do mês por extenso para o locale brasileiro. Caso quisesse somente a abreviatura do mês
//Por ex.: (Ago, Set) em vez do parâmetro 2 usaria o 1.
String mesExtenso = calendar.getDisplayName(Calendar.MONTH, 2, locale);

Bem, mas essa solução ocorre sem problemas no JDK 6.0, caso esteja usando JDK 5.0 você terá problemas (o servidor aqui no trabalho usa o 5.0)

A solução foi usar o DateFormatSymbols, como abaixo:

Locale locale = new Locale(“pt”,”BR”);
//Construtor usando o locale passado
DateFormatSymbols dateFormatSymbols = new DateFormatSymbols(locale);
String[] meses = dateFormatSymbols.getMonths();
//Define um calendar
GregorianCalendar calendar = new GregorianCalendar();
Calendar.setTime(new Date());
String mesExtenso  = meses[calendar.get(Calendar.MONTH)];

É isso.