2010-03-04 100 views
0

我想在Weblogic 10.3中使用WorkManagers。我已经在weblogic-ejb-jar.xml中定义了工作管理器。我在ejb-jar.xml中为commonj.work.WorkManager声明了资源引用,res_ref-name与weblogic-ejb-jar.xml中定义的工作管理器相同。我在这里发布的代码如何使用weblogic 10.3工作管理器映射commonj.work.WorkManager

MDB

package test; 

import javax.annotation.Resource; 
import javax.ejb.MessageDriven; 
import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.MessageListener; 
import javax.jms.ObjectMessage; 
import javax.jms.TextMessage; 

import commonj.work.WorkManager; 


@MessageDriven(mappedName="TEST_Q", name="MDBWithWorkManager", activationConfig = { 
@javax.ejb.ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
@javax.ejb.ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
@javax.ejb.ActivationConfigProperty(propertyName = "transactionType", propertyValue = "Container") 
}) 
    public class MDBWithWorkManager implements MessageListener { 

    @Resource(mappedName="TestWorkManager") 
    private WorkManager workManager; 
    @Override 
    public void onMessage(Message arg0) { 
     System.out.println("onMessage() called "); 
     System.out.println("workManager : "+workManager); 
     if(arg0 instanceof TextMessage){ 
     TextMessage msg= (TextMessage)arg0; 
     try { 
     System.out.println("Message received-->"+msg.getText()); 
     } catch (JMSException e) {  
    e.printStackTrace(); 
    } 
} 


} 

    } 

ejb-jar.xml中

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/j2ee/ejb-jar_3_0.xsd" 
version="3.0"> 
<enterprise-beans> 
    <message-driven> 
    <ejb-name>MDBWithWorkManager</ejb-name> 
    <ejb-class>test.MDBWithWorkManager 
    </ejb-class> 
    <resource-ref> 
    <description>Test work manager</description> 
    <res-ref-name>TestWorkManager</res-ref-name> 
    <res-type>commonj.work.WorkManager</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 
    </message-driven> 
    </enterprise-beans> 
    </ejb-jar> 

的weblogic-ejb-jar.xml中

<?xml version = '1.0'?> 
<weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/weblogic-ejb-jar" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-ejb-jar.xsd"> 
<weblogic-enterprise-bean> 
    <ejb-name>MDBWithWorkManager</ejb-name> 
</weblogic-enterprise-bean> 
<work-manager> 
    <name>TestWorkManager</name> 
    <fair-share-request-class> 
<name>TestWorkShare</name> 
<fair-share>70</fair-share> 
</fair-share-request-class> 
<min-threads-constraint> 
<name>TestMinThread</name> 
<count>1</count> 
</min-threads-constraint> 
<max-threads-constraint> 
<name>TestMaxThread</name> 
<count>8</count> 
</max-threads-constraint> 
</work-manager> 
</weblogic-ejb-jar> 

收到以下错误,同时部署

无法从MDBWithWorkManager.jar部署EJB:MDBWithWorkManager:

[EJB:011026]The EJB container failed while creating the java:/comp/env namespace for this EJB deployment. 
weblogic.deployment.EnvironmentException: [EJB:010176]The resource-env- ref 'test.MDBWithWorkManager/workManager' declared in the ejb-jar.xml descriptor or an 
notation has no JNDI name mapped to it. The resource-ref must be mapped to a JNDI name using the resource-description element of the weblogic-ejb-jar.xml des 
criptor or corresponding annotation. 
    at weblogic.ejb.container.deployer.EnvironmentBuilder.addResourceEnvReferences (EnvironmentBuilder.java:639) 
    at weblogic.ejb.container.deployer.EJBDeployer.setupEnvironmentContext (EJBDeployer.java:247) 
    at weblogic.ejb.container.deployer.EJBDeployer.setupEnvironmentFor(EJBDeployer.java:1014) 
    at weblogic.ejb.container.deployer.EJBDeployer.setupBeanInfos(EJBDeployer.java:908) 
    at weblogic.ejb.container.deployer.EJBDeployer.prepare(EJBDeployer.java:1188) 
    at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:425) 
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93) 
    at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37) 
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:58) 
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:42) 
    at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:615) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37) 
    at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:191) 
    at weblogic.application.internal.SingleModuleDeployment.prepare(SingleModuleDeployment.java:16) 
    at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:155) 
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60) 
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.createAndPrepareContainer(ActivateOperation.java:197) 
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doPrepare(ActivateOperation.java:89) 
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.prepare(AbstractOperation.java:217) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentPrepare(DeploymentManager.java:723) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.prepareDeploymentList(DeploymentManager.java:1190) 
    at weblogic.deploy.internal.targetserver.DeploymentManager.handlePrepare(DeploymentManager.java:248) 
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.prepare(DeploymentServiceDispatcher.java:159) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentReceiverCallbackDeliverer.java:157) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer.java:12) 
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$1.run(DeploymentReceiverCallbackDeliverer.java:45) 
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173) 

任何人都可以请帮忙。

在此先感谢!!!!

回答

0

尝试增加资源,裁判在weblogic-ejb-jar.xml中实际的JNDI名称映射MDBWithWorkManager

这样的事情,

<resource-description> 
     <res-ref-name>TestWorkManager</res-ref-name> 
     <jndi-name>jndiNameOfTestWorkManager</jndi-name> 
    </resource-description> 
+0

谢谢你回复!但没有运气的BOSS,获得相同的错误 – 2010-08-12 15:20:19

0

相信你所需要的是定义一个“地图“ - 元素叫你的bean中<dispatch-policy>定义 - 这样的:

<weblogic-enterprise-bean> 
    <ejb-name>MDBWithWorkManager</ejb-name> 
</weblogic-enterprise-bean> 

将其更改为:

<weblogic-enterprise-bean> 
    <ejb-name>MDBWithWorkManager</ejb-name> 
    <dispatch-policy>TestWorkManager</dispatch-policy> 
</weblogic-enterprise-bean>