quinta-feira, 19 de março de 2009

iBatis e uma Query com IN

Depois de andar às cabeçadas aqui vai a solução para como realizar uma query com IN no iBatis.

A classe ClasseParametros contém:
  • params_2 -> java.util.ListList
  • param_1 -> String

<update id="updateXpto"
parameterClass="ClasseParametros">
UPDATE tabela_xpto
SET param_1 = #param_1#
WHERE param_2 IN(
<iterate conjunction="," property="params_2">#params_2[]#</iterate>
)
</update>

segunda-feira, 12 de janeiro de 2009

Alternativa à Amazon

Eis aqui uma alternativa à Amazon.

http://www.bookdepository.co.uk

Tem portes grátis para vários países do mundo, inclusive Portugal :-D
Além disso os preços são geralmente mais baixos do que na Amazon.

quinta-feira, 27 de novembro de 2008

Axis2 no Eclipse

Quando se corre o Axis2 Code Generator no eclipse e se obtém uma InvocationTargetException, pensa-se que é um problema nosso. Por incrível que pareça, até pode não ser. Depois de ter perdido horas neste erro, eis aqui a solução.

São necessários vários "artifícios" para se conseguir colocar o Axis2 Code Generator (versão 1.4.1) a funcionar no eclipse (versão europa).

Antes de mais referir que na realidade a versão 1.4.1 que se descarrega do site do Axis2 é a versão 1.3.0. E isto é um problema.

Para se conseguir gerar algo é necessário efectuar os seguintes passos no local onde está instalado o plugin no eclipse (...\eclipse\plugins\Axis2_Codegen_Wizard_1.3.0):
  • Copiar para a pasta lib os jars seguintes:
- backport-util-concurrent-3.1.jar
- geronimo-stax-api_1.0_spec-1.0.1.jar
- jsr173_1.0_api.jar
  • Copiar o seguinte para o ficheiro plugin.xml

<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/jsr173_1.0_api.jar">
<export name="*"/>
</library>
  • Mudar no ficheiro plugin.xml a versão de 1.3.0 para 1.4.0
<plugin
id="Axis2_Codegen_Wizard"
name="Axis2 Codegen Wizard Plug-in"
version="1.4.0"
  • Alterar o nome da pasta do plugin para o número da nova versão (de Axis2_Codegen_Wizard_1.3.0 para Axis2_Codegen_Wizard_1.4.0)
E pronto adeus excepção e temos o eclipse a gerar que nem um doido. :-D

Actualização

Links para as libs

sexta-feira, 21 de novembro de 2008

Em que jar estás tu ó classe?

Há alturas em que é preciso descobrir em que jar está uma certa classe.
Para essas alturas temos o sítio web seguinte:

http://www.findjar.com/

Dá jeito. Dá mesmo muito jeito.

quinta-feira, 20 de novembro de 2008

Target runtime Apache Tomcat v5.5 is not defined - Parte II

Ás vezes quando se importa um projecto de eclipse, que tenha já uma configuração de Tomcat associada, o erro seguinte aparece:

Target runtime Apache Tomcat v5.5 is not defined

Para corrigir este erro é necessário um dos dois passos seguintes:
  1. Se no eclipse ainda não se tiver nenhum servidor configurado, então configurar um (Window->Preferences->Server->Installed Runtimes). Em princípio o problema fica resolvido quando se correr o projecto com o Run As -> Run on Server.
  2. Se o erro continuar, então efectuar o seguinte: sobre o projecto, carregando com o botão da direita, escolher Properties->Targeted Runtimes, e selecionar a checkbox ao lado do servidor Tomcat. Em princípio o erro desaparece.
  3. Se nenhum dos passos anteriores resultar então recorrer ao seguinte: Quando o eclipse se passa...

quarta-feira, 15 de outubro de 2008

Configurando o Eclipse Ganymede com o Weblogic

O servidor aplicacional Weblogic não vem com uma configuração disponível no eclipse Ganymede. Para ter o Weblogic disponível na configuração dos Servers no eclipse, é necessário fazer um update que está disponível no site:

https://eclipse-plugin.projects.dev2dev.bea.com/update

Depois de instalado, o eclipse já encontrará os servidores Weblogic.

segunda-feira, 13 de outubro de 2008

Cálculo de espaço ocupado na Base de Dados Oracle

A Base de Dados da Oracle, tem algumas ferramentas úteis que permitem calcular o espaço em disco que tabelas e índices virão a ocupar.

Cálculo de Espaço em Disco de Um Index

O código seguinte permite saber quanto espaço em disco irá ocupar um índice depois de criado.

set serveroutput on

DECLARE
ub NUMBER;
ab NUMBER;

BEGIN

DBMS_SPACE.CREATE_INDEX_COST('CREATE INDEX t_id ON ESQUEMA.NOME_DE_TABELA(id)',ub, ab, NULL);

DBMS_OUTPUT.PUT_LINE('Used Bytes: ' || TO_CHAR(ub));
DBMS_OUTPUT.PUT_LINE('Alloc Bytes: ' || TO_CHAR(ab));
END;
/

A tabela tem de existir previamente.

Substituir ESQUEMA e NOME_TABELA, pelo esquema e nome da tabela onde irá ser criado o índice.


Cálculo de Espaço em Disco Ocupado por uma Tabela

Quando se está a tentar saber quanto armazenamento é necessário para acomodar uma tabela, os códigos seguintes ajudam a determinar quanto espaço é necessário.

Cálculo Feito com Base no Tamanho Médio de uma Linha

O código seguinte permite saber, com base no tamanho médio de um registo na base de dados e no número de registos estimados, o tamanho de armazenamento necessário (em bytes) para acomodar uma tabela.

set serveroutput on

DECLARE
ub NUMBER;
ab NUMBER;

BEGIN

DBMS_SPACE.CREATE_TABLE_COST('USERS',45000,2000000,0,ub,ab);

DBMS_OUTPUT.PUT_LINE('Used Bytes: ' || TO_CHAR(ub));
DBMS_OUTPUT.PUT_LINE('Alloc Bytes: ' || TO_CHAR(ab));
END;
/

Onde,

USERS - Tablespace onde a tabela irá ser criada.
45000 - Tamanho médio de uma linha em bytes.
2000000 - Número total de linhas que a tabela irá conter.
0 - Espaço livre que a tabela deverá ter para novos inserts e updates.


Cálculo Feito com Base na Especificação de uma Tabela

O código seguinte permite saber o tamanho de armazenamento necessário para uma tabela, com a especificação fornecida e com o número de registos estimados.

set serveroutput on

DECLARE
ub NUMBER;
ab NUMBER;
cl sys.create_table_cost_columns;
BEGIN
cl := sys.create_table_cost_columns(
sys.create_table_cost_colinfo('VARCHAR2',100),
sys.create_table_cost_colinfo('CHAR',1),
sys.create_table_cost_colinfo('DATE',NULL),
sys.create_table_cost_colinfo('NUMBER',4)
);

DBMS_SPACE.CREATE_TABLE_COST('USERS',cl,2000000,0,ub,ab);

DBMS_OUTPUT.PUT_LINE('Used Bytes: ' || TO_CHAR(ub));
DBMS_OUTPUT.PUT_LINE('Alloc Bytes: ' || TO_CHAR(ab));
END;
/

Onde,

USERS - Tablespace onde a tabela irá ser criada.

cl - Definição da tabela cujo espaço é pretendido calcular.

2000000 - Número total de linhas que a tabela irá conter.

0 - Espaço livre que a tabela deverá ter para novos inserts e updates.