Problemas com MDB no Weblogic

9 respostas
R

Estou migrando um sistema que rodava no jboss para que utilize o weblogic.

O sistema tem um módulo que processa relatórios através de MDBs. O usuário faz a solicitação do relatório e ao final do processamento do mesmo, ele é enviado para o email do solicitante.

O problema é que já estou há mais de 3 dias tentando configurar para que rode no weblogic, sem sucesso. Após pesquisar bastante na internet e não obter êxito, resolvi pedir ajuda aqui no GUJ.

Abaixo listo o erro verfiicado ao fazer deploy da aplicação, e os fontes…

Agradeço qualquer ajuda!

java.lang.IllegalArgumentException: Registered more than one instance with the same objectName : com.bea:ServerRuntime=AdminServer,Name=ControleRelatorio_queue/GRCRelatorio,ApplicationRuntime=_appsdir_grc_ear,Type=MessageDrivenEJBRuntime,EJBComponentRuntime=grc.jar new:weblogic.ejb.container.monitoring.MessageDrivenEJBRuntimeMBeanImpl@1f26a0e existing weblogic.ejb.container.monitoring.MessageDrivenEJBRuntimeMBeanImpl@73023d
	at weblogic.management.jmx.ObjectNameManagerBase.registerObject(ObjectNameManagerBase.java:168)
	at weblogic.management.mbeanservers.internal.WLSObjectNameManager.lookupObjectName(WLSObjectNameManager.java:131)
	at weblogic.management.jmx.modelmbean.WLSModelMBeanFactory.registerWLSModelMBean(WLSModelMBeanFactory.java:87)
	at weblogic.management.mbeanservers.internal.RuntimeMBeanAgent$1.registered(RuntimeMBeanAgent.java:104)
	at weblogic.management.provider.core.RegistrationManagerBase.invokeRegistrationHandlers(RegistrationManagerBase.java:180)
	Truncated. see log file for complete stacktrace
> 
<11/01/2012 11h41min22s BRST> <Error> <JMX> <BEA-149500> <An exception occurred while registering the MBean null.
java.lang.IllegalArgumentException: Registered more than one instance with the same objectName : com.bea:ServerRuntime=AdminServer,MessageDrivenEJBRuntime=ControleRelatorio_queue/GRCRelatorio,Name=ControleRelatorio_queue/GRCRelatorio,ApplicationRuntime=_appsdir_grc_ear,Type=EJBTransactionRuntime,EJBComponentRuntime=grc.jar new:weblogic.ejb.container.monitoring.EJBTransactionRuntimeMBeanImpl@19c45da existing weblogic.ejb.container.monitoring.EJBTransactionRuntimeMBeanImpl@1116f61
	at weblogic.management.jmx.ObjectNameManagerBase.registerObject(ObjectNameManagerBase.java:168)
	at weblogic.management.mbeanservers.internal.WLSObjectNameManager.lookupObjectName(WLSObjectNameManager.java:131)
	at weblogic.management.jmx.modelmbean.WLSModelMBeanFactory.registerWLSModelMBean(WLSModelMBeanFactory.java:87)
	at weblogic.management.mbeanservers.internal.RuntimeMBeanAgent$1.registered(RuntimeMBeanAgent.java:104)
	at weblogic.management.provider.core.RegistrationManagerBase.invokeRegistrationHandlers(RegistrationManagerBase.java:180)
	Truncated. see log file for complete stacktrace
> 
<11/01/2012 11h41min22s BRST> <Error> <JMX> <BEA-149500> <An exception occurred while registering the MBean null.
java.lang.IllegalArgumentException: Registered more than one instance with the same objectName : com.bea:ServerRuntime=AdminServer,MessageDrivenEJBRuntime=ControleRelatorio_queue/GRCRelatorio,Name=ControleRelatorio_queue/GRCRelatorio,ApplicationRuntime=_appsdir_grc_ear,Type=EJBPoolRuntime,EJBComponentRuntime=grc.jar new:weblogic.ejb.container.monitoring.EJBPoolRuntimeMBeanImpl@ae08c2 existing weblogic.ejb.container.monitoring.EJBPoolRuntimeMBeanImpl@1a76ec1
	at weblogic.management.jmx.ObjectNameManagerBase.registerObject(ObjectNameManagerBase.java:168)
	at weblogic.management.mbeanservers.internal.WLSObjectNameManager.lookupObjectName(WLSObjectNameManager.java:131)
	at weblogic.management.jmx.modelmbean.WLSModelMBeanFactory.registerWLSModelMBean(WLSModelMBeanFactory.java:87)
	at weblogic.management.mbeanservers.internal.RuntimeMBeanAgent$1.registered(RuntimeMBeanAgent.java:104)
	at weblogic.management.provider.core.RegistrationManagerBase.invokeRegistrationHandlers(RegistrationManagerBase.java:180)
	Truncated. see log file for complete stacktrace

Classe responsável por receber as mensagens:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "messageListenerInterface", propertyValue = "javax.jms.MessageListener"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "MaxDeliveryCnt", propertyValue = "1"),
    @ActivationConfigProperty(propertyName = "ConnectionFactoryName", propertyValue="ConnectionFactory-GRC")
    
},mappedName="queue/GRCRelatorio")
public class ControleRelatorio implements MessageListener{

	@Override
	public void onMessage(Message message) {
		
		System.out.println("Chegou");
		
	}

9 Respostas

A

Não tenho experiência com JMS no WebLogic, mas acredito que se você trocar isso:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "messageListenerInterface", propertyValue = "javax.jms.MessageListener"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "MaxDeliveryCnt", propertyValue = "1"),
    @ActivationConfigProperty(propertyName = "ConnectionFactoryName", propertyValue="ConnectionFactory-GRC")
    
},mappedName="queue/GRCRelatorio")
public class ControleRelatorio implements MessageListener{

	@Override
	public void onMessage(Message message) {
		
		System.out.println("Chegou");
		
	}

Por isso:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "messageListenerInterface", propertyValue = "javax.jms.MessageListener"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "destination", propertyValue ="queue/GRCRelatorio"),
    @ActivationConfigProperty(propertyName = "MaxDeliveryCnt", propertyValue = "1"),
    @ActivationConfigProperty(propertyName = "ConnectionFactoryName", propertyValue="ConnectionFactory-GRC")
    
},mappedName="controleRelatorioMDB")
public class ControleRelatorio implements MessageListener{

	@Override
	public void onMessage(Message message) {
		
		System.out.println("Chegou");
		
	}

Deve funcionar. Note que, no stack trace, a reclamação dele era de que o bean com o mesmo nome estava registrado duas vezes. Provavelmente tem a ver com o mappedName.

[]'s

R

Muito obrigado pela resposta, asaudate.

Tentei proceder conforme o sugerido e mesmo assim não obtive suscesso.

Da forma como você sugeriu, retorna o erro:

<11/01/2012 12h16min56s BRST> <Error> <JMX> <BEA-149500> <An exception occurred while registering the MBean null.
java.lang.IllegalArgumentException: Registered more than one instance with the same objectName : com.bea:ServerRuntime=AdminServer,Name=ControleRelatorio_controleRelatorioMDB,ApplicationRuntime=_appsdir_grc_ear,Type=MessageDrivenEJBRuntime,EJBComponentRuntime=grc.jar new:weblogic.ejb.container.monitoring.MessageDrivenEJBRuntimeMBeanImpl@c6dfb5 existing weblogic.ejb.container.monitoring.MessageDrivenEJBRuntimeMBeanImpl@25d4f7
	at weblogic.management.jmx.ObjectNameManagerBase.registerObject(ObjectNameManagerBase.java:168)
	at weblogic.management.mbeanservers.internal.WLSObjectNameManager.lookupObjectName(WLSObjectNameManager.java:131)
	at weblogic.management.jmx.modelmbean.WLSModelMBeanFactory.registerWLSModelMBean(WLSModelMBeanFactory.java:87)
	at weblogic.management.mbeanservers.internal.RuntimeMBeanAgent$1.registered(RuntimeMBeanAgent.java:104)
	at weblogic.management.provider.core.RegistrationManagerBase.invokeRegistrationHandlers(RegistrationManagerBase.java:180)
	Truncated. see log file for complete stacktrace
> 
<11/01/2012 12h16min56s BRST> <Error> <JMX> <BEA-149500> <An exception occurred while registering the MBean null.
java.lang.IllegalArgumentException: Registered more than one instance with the same objectName : com.bea:ServerRuntime=AdminServer,MessageDrivenEJBRuntime=ControleRelatorio_controleRelatorioMDB,Name=ControleRelatorio_controleRelatorioMDB,ApplicationRuntime=_appsdir_grc_ear,Type=EJBTransactionRuntime,EJBComponentRuntime=grc.jar new:weblogic.ejb.container.monitoring.EJBTransactionRuntimeMBeanImpl@159db4f existing weblogic.ejb.container.monitoring.EJBTransactionRuntimeMBeanImpl@11d6278
	at weblogic.management.jmx.ObjectNameManagerBase.registerObject(ObjectNameManagerBase.java:168)
	at weblogic.management.mbeanservers.internal.WLSObjectNameManager.lookupObjectName(WLSObjectNameManager.java:131)
	at weblogic.management.jmx.modelmbean.WLSModelMBeanFactory.registerWLSModelMBean(WLSModelMBeanFactory.java:87)
	at weblogic.management.mbeanservers.internal.RuntimeMBeanAgent$1.registered(RuntimeMBeanAgent.java:104)
	at weblogic.management.provider.core.RegistrationManagerBase.invokeRegistrationHandlers(RegistrationManagerBase.java:180)
	Truncated. see log file for complete stacktrace
> 
<11/01/2012 12h16min56s BRST> <Error> <JMX> <BEA-149500> <An exception occurred while registering the MBean null.
java.lang.IllegalArgumentException: Registered more than one instance with the same objectName : com.bea:ServerRuntime=AdminServer,MessageDrivenEJBRuntime=ControleRelatorio_controleRelatorioMDB,Name=ControleRelatorio_controleRelatorioMDB,ApplicationRuntime=_appsdir_grc_ear,Type=EJBPoolRuntime,EJBComponentRuntime=grc.jar new:weblogic.ejb.container.monitoring.EJBPoolRuntimeMBeanImpl@4d58a5 existing weblogic.ejb.container.monitoring.EJBPoolRuntimeMBeanImpl@2bb5e0
	at weblogic.management.jmx.ObjectNameManagerBase.registerObject(ObjectNameManagerBase.java:168)
	at weblogic.management.mbeanservers.internal.WLSObjectNameManager.lookupObjectName(WLSObjectNameManager.java:131)
	at weblogic.management.jmx.modelmbean.WLSModelMBeanFactory.registerWLSModelMBean(WLSModelMBeanFactory.java:87)
	at weblogic.management.mbeanservers.internal.RuntimeMBeanAgent$1.registered(RuntimeMBeanAgent.java:104)
	at weblogic.management.provider.core.RegistrationManagerBase.invokeRegistrationHandlers(RegistrationManagerBase.java:180)
	Truncated. see log file for complete stacktrace
>

Tentei então sua sugestão, porém removendo o mappedName:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "messageListenerInterface", propertyValue = "javax.jms.MessageListener"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "MaxDeliveryCnt", propertyValue = "1"),
    @ActivationConfigProperty(propertyName = "ConnectionFactoryName", propertyValue="ConnectionFactory-GRC")
    
})

Porém, novamente o retorno foi erro:

<11/01/2012 12h28min16s BRST> <Error> <Deployer> <BEA-149265> <Failure occurred in the execution of deployment request with ID '1326292087479' for task '0'. Error is: 'weblogic.application.ModuleException: Exception preparing module: EJBModule(grc.jar)


Unable to deploy EJB: ControleRelatorio from grc.jar:

[EJB:011113]Error: The Message Driven Bean 'ControleRelatorio(Application: _appsdir_grc_ear, EJBComponent: grc.jar)', does not have a message destination configured. The message destination must be set using a message-destination-link, destination-resource-link, destination-jndi-name or a resource-adapter-jndi-name.

'
weblogic.application.ModuleException: Exception preparing module: EJBModule(grc.jar)


Unable to deploy EJB: ControleRelatorio from grc.jar:

[EJB:011113]Error: The Message Driven Bean 'ControleRelatorio(Application: _appsdir_grc_ear, EJBComponent: grc.jar)', does not have a message destination configured. The message destination must be set using a message-destination-link, destination-resource-link, destination-jndi-name or a resource-adapter-jndi-name.


	at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:469)
	at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199)
	at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:517)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
	at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:159)
	Truncated. see log file for complete stacktrace
Caused By: [EJB:011113]Error: The Message Driven Bean 'ControleRelatorio(Application: _appsdir_grc_ear, EJBComponent: grc.jar)', does not have a message destination configured. The message destination must be set using a message-destination-link, destination-resource-link, destination-jndi-name or a resource-adapter-jndi-name.
	at weblogic.ejb.container.deployer.MessageDrivenBeanInfoImpl.ensureMDBHasDestinationConfigured(MessageDrivenBeanInfoImpl.java:1584)
	at weblogic.ejb.container.deployer.MessageDrivenBeanInfoImpl.prepare(MessageDrivenBeanInfoImpl.java:1277)
	at weblogic.ejb.container.deployer.EJBDeployer.setupBeanInfos(EJBDeployer.java:1031)
	at weblogic.ejb.container.deployer.EJBDeployer.prepare(EJBDeployer.java:1288)
	at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:442)
	Truncated. see log file for complete stacktrace
> 
<11/01/2012 12h28min16s BRST> <Warning> <Deployer> <BEA-149004> <Failures were detected while initiating deploy task for application '_appsdir_grc_ear'.> 
<11/01/2012 12h28min16s BRST> <Warning> <Deployer> <BEA-149078> <Stack trace for message 149004
weblogic.application.ModuleException: Exception preparing module: EJBModule(grc.jar)


Unable to deploy EJB: ControleRelatorio from grc.jar:

[EJB:011113]Error: The Message Driven Bean 'ControleRelatorio(Application: _appsdir_grc_ear, EJBComponent: grc.jar)', does not have a message destination configured. The message destination must be set using a message-destination-link, destination-resource-link, destination-jndi-name or a resource-adapter-jndi-name.


	at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:469)
	at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199)
	at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:517)
	at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
	at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:159)
	Truncated. see log file for complete stacktrace
Caused By: [EJB:011113]Error: The Message Driven Bean 'ControleRelatorio(Application: _appsdir_grc_ear, EJBComponent: grc.jar)', does not have a message destination configured. The message destination must be set using a message-destination-link, destination-resource-link, destination-jndi-name or a resource-adapter-jndi-name.
	at weblogic.ejb.container.deployer.MessageDrivenBeanInfoImpl.ensureMDBHasDestinationConfigured(MessageDrivenBeanInfoImpl.java:1584)
	at weblogic.ejb.container.deployer.MessageDrivenBeanInfoImpl.prepare(MessageDrivenBeanInfoImpl.java:1277)
	at weblogic.ejb.container.deployer.EJBDeployer.setupBeanInfos(EJBDeployer.java:1031)
	at weblogic.ejb.container.deployer.EJBDeployer.prepare(EJBDeployer.java:1288)
	at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:442)
	Truncated. see log file for complete stacktrace
>

Vou continuar tentando, qualquer ajuda é bem vinda.

A

Tente remover o mappedName, então, mas sem tirar a propriedade “destination” da configuração…

R

Mantendo a propriedade “destination”, sem o mappedName, obtive o segundo erro mencionado no post anterior.

Muito obrigado pelas tentativas em ajudar !!!

R

Ninguém mais?

A

Me parece um bug do do Weblogic… pesquisei em vários fóruns, algumas pessoas tiveram o mesmo problema, mas ninguém teve respostas. :frowning:

R

Pois é…
Já pesquisei bastante na internet e não encontro nada que resolva.

De toda forma, muito obrigado pela ajuda !!

Continuarei tentando…

R

Alguém já criou MDBs para rodar no weblogic?
Em caso positivo, poderiam me ajudar nisso?

Nenhuma referência que encontro na internet resolve os problemas aqui descritos…

Desde já, agradeço por qualquer ajuda!

B
@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "messageListenerInterface", propertyValue = "javax.jms.MessageListener"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "MaxDeliveryCnt", propertyValue = "1"),
    @ActivationConfigProperty(propertyName = "ConnectionFactoryName", propertyValue="ConnectionFactory-GRC")
    
},mappedName="queue/GRCRelatorio")
public class ControleRelatorio implements MessageListener{

	@Override
	public void onMessage(Message message) {
		
		System.out.println("Chegou");
		
	}

Tente fazer essas alterações:

@MessageDriven(activationConfig = {
		@ActivationConfigProperty(propertyName="initialContextFactory", propertyValue="weblogic.jndi.WLInitialContextFactory"),
		@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
		@ActivationConfigProperty(propertyName = "connection-factory-jndi-name", propertyValue = "ConnectionFactory-GRC"),
		@ActivationConfigProperty(propertyName = "destinationJNDIName", propertyValue = "queue/GRCRelatorio")})
Criado 11 de janeiro de 2012
Ultima resposta 11 de mar. de 2013
Respostas 9
Participantes 3