quarta-feira, 12 de janeiro de 2011

Inserindo um novo registro numa tabela sem sequence

Algumas vezes, precisamos inserir um novo registro em uma tabela, mas que não possui nenhum esquema de atribuição de valor da chave primária.

Para esses casos, poderemos usar um script semelhante a este:


insert into produto(id, nome, valor) select max(id) + 1, 'Televisor', 450 from produto


Perceba que não usamos a cláusula VALUES no comando INSERT.

sexta-feira, 7 de janeiro de 2011

Exibição de PDF em uma JSP

Neste exemplo, uso um iframe para exibir um relatório em PDF em uma área de uma página JSP. Utilizei Struts como framework Web.

Aqui, não abro um arquivo físico, e sim utilizo o stream de dados para escrever o conteúdo do pdf.

Segue o código do método da DispatchAction do Struts:

public ActionForward geraRelatorio(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
try {
Map<String, String> parametros = new HashMap<String, String>();
//recuperacao de imagem para o relatorio
//passagem de parametro
parametros.put("caminhoImagem", request.getSession().getServletContext().getRealPath("/images/relatorio/logo.jpg"));

//recuperacao do arquivo compilado do relatorio
InputStream relatorio = getClass().getResourceAsStream("/br/com/relatorio.jasper");
byte[] pdf = ReportUtil.pdfPrint(relatorio, parametros);
response.setContentType("application/pdf");
response.getOutputStream().write(pdf);
} catch (Exception e) {}

//nao pode fazer forward, uma vez que escreveu no response
return null;
}


E segue o exemplo da página contendo simplesmente um iframe:


quinta-feira, 6 de janeiro de 2011

Recuperando conexão de banco no Tomcat

A configuração de conexão a um banco de dados no Tomcat pode ser feita usando o context.xml. Este arquivo deve ser armazenado na pasta META-INF do projeto web.

Exemplo do arquivo context.xml:







O método para recuperar a conexão é:


private static Connection getConnection() {
try {
InitialContext initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/dataSourceName");

Connection conexao = ds.getConnection();

return conexao;
} catch (Exception e) {}

return null;
}

terça-feira, 9 de novembro de 2010

Configurando o GitHub no Eclipse


Após martelar um tempinho, concluímos a configuração do Eclipse para trabalhar com Git.

Este post aborda apenas esta parte de configuração. Para melhor entender como funciona essa questão de repositório distribuído, leia documentos em http://git-scm.com/.

Para este tutorial, usei o Eclipse Helios SR1 e instalei o EGit no Eclipse Marketplace.

Seguem os passos da configuração:

1. Criar RSA Key no Eclipse, tanto a private como a public.

2. Criar uma conta e um projeto no GitHub (https://github.com/)

3. Armazenar a sua chave pública na área administrativa do projeto. Você pega a chave pública gerada no Eclipse.

4. Clonar o repositório remoto.


5. Definir o endereço do repositório. Este endereço está na aba SSH do painel do projeto no GitHub.
6. Selecionar um branch. Neste caso, não temos nada comitado porque o projeto é novo.


7. Definir o espaço do repositório local.


8. Selecionar o repositório e finalizar.



9. Criar um novo projeto para trabalhar ou importar algum existente.

10. O resultado final é este:


quarta-feira, 3 de novembro de 2010

Configurando do JBoss 6 para Eclipse Helios

Foram utilizadas as seguintes versões dos programas:
JBoss 6.0.0 - M5
Helios - SR1
JBoss Tools - 3.2.0
JBossAS Tools - 2.2.0.v20101016-0359-H111-Beta1

Seguir os passos:

1. Help > Install New Software.
2. Usar 'Work with' com http://download.jboss.org/jbosstools/updates/development/
3. Na lista de resultados, marcar apenas 'JBossAS Tools' em 'All JBoss Tools'.
4. Next, etc, Finish.

Pronto. Reinicie o eclipse e o plugin de controle de servidor já estará disponível.

quinta-feira, 15 de julho de 2010

ClassNotFoundException em Applet

Algumas vezes, nos deparamos com o seguinte erro ao abrir um applet em um navegador:

load: class br.com.certificacao.TokenSignerApplet.class not found.
java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://192.168.0.5:8082/certificaApp/br/com/certificacao/TokenSignerApplet/class.class
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more
Exception: java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class
load: class br.com.certificacao.TokenSignerApplet.class not found.
java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://192.168.0.5:8082/certificaApp/br/com/certificacao/TokenSignerApplet/class.class
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more
Exception: java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class



No meu caso, sofri com isso usando o Internet Explorer. Se isso acontecer com você, tente as seguintes situações:
  1. Utilizar outro browser ( ou outra versão do seu browser);
  2. Tentar desabilitar o uso de proxy (pode ser que o proxy esteja barrando alguma coisa relacionada ao uso de applets, neste caso, você terá que solicitar ao gerente da rede um ajuste no proxy);
  3. Trocar a ordem dos parâmetros java_code e java_archive , deixando o java_archive antes.
    <param name="java_archive" value="TokenSignerApplet.jar, bcprov-jdk14-138.jar, iText-2.0.8.jar">

    <param name="java_code" value="br.com.certificacao.TokenSignerApplet.class">

    <param name="java_codebase" value="<%="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()%>">

terça-feira, 13 de julho de 2010

Código de applet para assinatura digital

Este simples código demonstra como disponibilizar uma applet que lê um token para assinar um documento digitalmente.
Merecem destaque as seguintes informações:

  • Os arquivos bcprov-jdk14-138.jar e iText-2.0.8.jar são utilizados para assinar o pdf gerado.
  • O arquivo TokenSignerApplet.jar contem a classe da applet
  • O parâmetro java_codebase é importante de configurar para não dar erro na localização dos arquivos com as classes.
<object
classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase="" width="130" height="25" name="TokenSignerApplet">
<param name="java_code" value="br.com.certificacao.TokenSignerApplet.class">
<param name="java_codebase" value="<%="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()%>">
<param name="java_archive" value="TokenSignerApplet.jar , bcprov-jdk14-138.jar , iText-2.0.8.jar">
<param name="mayscript" value="true">
<param name="type" value="application/x-java-applet;version=1.5">
<param name="scriptable" value="false">
<param name="signButtonCaption" value="Assinar Documento">
<param name="pinCodeField" value="pinCode">
<comment>
<embed
type="application/x-java-applet;version=1.5"
java_code="br.com.ebiz.funasawf.web.certificacao.TokenSignerApplet.class"
java_codebase="<%="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()%>"
java_archive="TokenSignerApplet.jar , bcprov-jdk14-138.jar , iText-2.0.8.jar"
width="130" height="25" scriptable="true"
pluginspage="http://java.sun.com/products/plugin/index.html#download"
pinCodeField="pinCode"
signButtonCaption="Assinar Documento"
</embed>
<noembed>
Smart card signing applet can not be started because
Java Plugin 1.5 or newer is not installed.
</noembed>
</comment>
</object>