Inicialização de Classe

Pessoal,

estou desenvolvendo um framework que monitora os bancos de dados disponíveis para uma aplicação. Até aí tudo bem… mas o caso é que eu gostaria de inicializar o sistema sem necessidade de intervenção do programador, ou seja:

Não vale Class.forName();
Não vale usar AOP para detectar método main (o framework pode ser embutido em sistema J2SE ou J2EE);
Não quero obrigar o desenvolvedor a estender nenhuma classe, implementar alguma interface, etc.

Alguém se habilita?

Procure algo sobre “Java Agents”

Quer dizer… alguma coisa como usar JADE?

Não sei o que é JADE.

Eu sei o que é um “Java Agent”, veja aqui:

http://java.sun.com/javase/6/docs/api/java/lang/instrument/package-summary.html

Eles são usados, por exemplo, na implementação de JPA do Toplink Essentials.

Olá, thingol!

Bom… fiz um “olá, mundo” com os agentes, e funcionou, e tal… só que eu tive que usar a opção -javaagent, pra executar por linha de comando. Você sabe de alguma maneira de executar sem isso? Quer dizer… inicializou um jar, tem outro jar no classpath que já tme as devidas opções no Manifest, é só inicializar?

Trocando em miúdos… tem alguma maneira automatizada de fazer a invocação do agente, sem precisar modificar a chamada ao Jar?

Obrigado!

Pq nao fazer um driver JDBC que serve de wrapper, e apita em algum lugar quando o banco cai?

Porque o sistema não seria “meu”; estou desenvolvendo um framework. Esse framework trata não só de monitorar o banco de dados, mas também de redirecionar automaticamente um EntityManager, Connection, qualquer coisa assim, para um banco de dados disponível. Percebe o tamanho da encrenca que seria fazer um driver JDBC wrapper?

Leia a mesma referência que lhe passei, mas no título “Starting Agents After VM Startup”. Obviamente a sua versão da JVM deve aceitar esses tais agents.

Já lí, mas o caso é que, mesmo usando tudo, o agente não é inicializado, só o método main.

Meu código está assim:
Agente:

[code]package teste;

import java.lang.instrument.Instrumentation;

public class Agente {

public static void agentmain (String agentArgs, Instrumentation inst) {
	System.out.println("Olá, meu agente!");
}

}[/code]

Classe main:

[code]package teste;

public class Main {

/**
 * @param args
 */
public static void main(String[] args) {
	System.out.println("Classe main");

}

}[/code]

manifest:

Manifest-Version: 1.0
Main-Class: teste.Main
Agent-Class: teste.Agente

e estou executando com o comando java -jar teste.jar

Minha JVM é a 6.
Tem idéias?