2010-06-08 23 views

Respuesta

25

Eso no existía para EJB hasta 3.1. Con EJB 3.1 se puede utilizar un grano de Singleton para simular que:

De Application Startup/Shutdown Callbacks:

@Startup 
    @Singleton 
    public class FooBean { 

     @PostConstruct 
     void atStartup() { ... } 

     @PreDestroy 
     void atShutdown() { ... } 

    } 

De lo contrario, tendrá que confiar en el buen viejo truco de usar un ServletContextInitializer.

Hay alguna extensión específica de la aplicación, p. lifecycle listener para Glassfish. Tal vez haya algo así para JBoss.

Pero si yo fuera usted, trataría de confiar en las características estándar tanto como sea posible. El problema con la extensión no estándar es que nunca se sabe exactamente qué se puede hacer o no, p. Ej. puede iniciar la transacción o no, etc.

+1

Alternativamente, siempre se puede usar un MBean con los métodos de inicio/detención del ciclo de vida. El MBean se inyecta con el EJB necesario y llama a los métodos que sean necesarios. –

+0

Gracias. Dos publicaciones excelentes. Terminé con un "ServletWrapper" en su lugar. Pero un refactor está en la agenda. ¡Salud! – Elijah

+0

Estoy usando jboss 5.1 (no estoy seguro si es compatible con EJB3.1) ¿Puedo utilizar esta técnica para invocar el método en implementación? Gracias. – rayman

1

Los frijoles administrados se pueden usar para hacer algún proceso en el inicio de JBoss, debe agregar la entrada de ese frijol administrado en el archivo de configuración.

1

Usted debe ser capaz de añadir la siguiente línea en la parte superior del método que desea ejecutar en el inicio:

@Observer("org.jboss.seam.postInitialization") 
3

Si usted está apuntando JBoss AS 5.1, y no le importa usar el JBoss EJB 3.0 Extensions, se puede construir un grano de servicio para arrancar el EJB. Si su servicio implementa una interfaz anotada con la anotación @Management y declara un método con la firma public void start() throws Exception, JBoss llamará a este método cuando inicie el servicio. A continuación, puede llamar a un método init() dedicado en el EJB desea inicializar:

@Service 
public class BeanLauncher implements BeanLauncherManagement 
{ 
    @EJB private SessionBeanLocal sessionBean; 

    @Override 
    public void start() throws Exception 
    { 
     sessionBean.init(); 
    } 
} 

@Management 
public interface BeanLauncherManagement 
{ 
    public void start() throws Exception; 
} 

Más información sobre este, incluyendo los eventos del ciclo de vida adicionales, puede ser encontrada here.

Cuestiones relacionadas