当前位置: 首页 > 知识库问答 >
问题:

无法在Weblogic中解析队列和QueueConnectionFactory的JNDI名称

那利
2023-03-14

我正在研究EJB中消息驱动Bean的示例。我创建了部署在weblogic服务器中的EJB项目和使用JNDI名称向MDB发送消息的客户端项目。我还在weblogic控制台中创建了JMS队列和队列连接工厂。

但问题是客户端无法识别队列的JNDI名称。

Oueelistenermdb。java on EJB项目

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/weblogic.wsee.DefaultQueue")
    },
    mappedName = "mdb")
public class QueueListenerMDB implements IQueueListenerMDB{
public QueueListenerMDB() {
}

public void onMessage(Message message) {
    try {
        if (message instanceof TextMessage) {
            System.out.println("Queue: I received a TextMessage at "
                    + new Date());
            TextMessage msg = (TextMessage) message;
            System.out.println("Message is : " + msg.getText());
        } else if (message instanceof ObjectMessage) {
            System.out.println("Queue: I received an ObjectMessage at "
                    + new Date());
            ObjectMessage msg = (ObjectMessage) message;
            Employee employee = (Employee) msg.getObject();
            System.out.println("Employee Details: ");
            System.out.println(employee);
        } else {
            System.out.println("Not valid message for this Queue MDB");
        }
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

}

QueueSenderDemo。java on客户端项目

public class QueueSenderDemo {
private static final String PROVIDER_URL = "t3://localhost:7002/";

private static final String INITIAL_CONTEXT_FACTORY = "weblogic.jndi.WLInitialContextFactory";

private static Context initialContext;

private static final String QUEUE_LOOKUP = "jms/weblogic.wsee.DefaultQueue"; 
private static final String CONNECTION_FACTORY = "jms/weblogic.jms.ConnectionFactory"; 

public static void main(String[] args) throws NamingException {
    sendMessageToQueue();
}

public static void sendMessageToQueue() {
    try {
        Context context = getInitialContextForClient();

        QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup(CONNECTION_FACTORY);

        QueueConnection connection = factory.createQueueConnection();
        QueueSession session = connection.createQueueSession(false,
                QueueSession.AUTO_ACKNOWLEDGE);
        Queue queue = (Queue) context.lookup(QUEUE_LOOKUP);

        QueueSender sender = session.createSender(queue);
        TextMessage message = session.createTextMessage("Welcome to EJB3 Message Driven Bean.");
        sender.send(message);
        session.close();
    } catch (NamingException e) {
        e.printStackTrace();
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

public static Context getInitialContextForClient()
        throws NamingException {
    if (initialContext == null) {
        Properties prop = new Properties();
        prop.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
        prop.put(Context.PROVIDER_URL, PROVIDER_URL);
        initialContext = new InitialContext(prop);
    }
    return initialContext;
}
}

我在运行这样的客户端程序时出错。

javax.naming.NameNotFoundException: While trying to lookup 'jms.weblogic.wsee.DefaultQueue' didn't find subcontext 'wsee'. Resolved 'jms.weblogic' [Root exception is javax.naming.NameNotFoundException: While trying to lookup 'jms.weblogic.wsee.DefaultQueue' didn't find subcontext 'wsee'. Resolved 'jms.weblogic']; remaining name 'wsee/DefaultQueue'
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:234)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)
at weblogic.jndi.internal.ServerNamingNode_1035_WLStub.lookup(Unknown Source)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:423)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:411)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.mdbclient.utility.QueueSenderDemo.sendMessageToQueue(QueueSenderDemo.java:36)
at com.mdbclient.utility.QueueSenderDemo.main(QueueSenderDemo.java:27)
Caused by: javax.naming.NameNotFoundException: While trying to lookup 'jms.weblogic.wsee.DefaultQueue' didn't find subcontext 'wsee'. Resolved 'jms.weblogic'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139)
at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:247)
at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:182)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:206)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:667)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:518)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:252)
at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:182)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:206)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:667)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:230)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:522)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:518)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:118)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)

共有1个答案

鲁烨熠
2023-03-14

确保子部署/目标指向正确的服务器。您的队列可能托管在托管服务器上,您试图查找错误的托管服务器或管理服务器。如果您可以显示目标或jndi树,那么会更容易提供帮助。

 类似资料:
  • 我有通过jndi名称从WebLogic获取数据源的应用程序。 我在应用程序中配置了jndi数据源名称。yml: 我在WebLogic服务器上配置了它,指定了特定的目标。我测试了这个数据源,WebLogic说测试成功了。但是当我尝试部署应用程序时,我收到以下错误: 我需要确定WebLogic的数据源配置中存在问题,或者在java代码中获取数据源时存在问题。我是否能够在不部署应用程序的情况下测试获取数

  • 在weblogic上部署webapp时,我遇到了以下错误: 有人能告诉我调试这个的方法吗。

  • 我试图将以下代码作为EJB部署到WebLogic12c,但遇到了一个错误:

  • 我正在研究一个示例,其中JMS队列托管在JBoss EAP 6实例上(一个用于请求,另一个用于响应)。我还有一个在Weblogic托管服务器上运行的应用程序。 我想设置一种机制,允许运行在Weblogic上的应用程序能够使用添加到JBoss上的请求队列上的消息。此外,应用程序应该能够将消息发布到请求队列(也托管在JBoss上) 我在Oracle文档中读到了关于外国JNDI提供程序的信息,我找到的大

  • 本文向大家介绍解析Java中的队列和用LinkedList集合模拟队列的方法,包括了解析Java中的队列和用LinkedList集合模拟队列的方法的使用技巧和注意事项,需要的朋友参考一下 API中对队列的说明:   在处理元素前用于保存元素的 collection。除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另

  • 问题内容: 我试图将字符串消息发送到在weblogic服务器中创建的JMS队列中。我使用Eclipse IDE,当我运行Web应用程序时,出现以下错误,tomcat服务器关闭。错误是 请帮助我。谢谢和最诚挚的问候 问题答案: 基于对该问题的一些快速研究,它似乎是由于在应用服务器和客户端之间使用不同的JDK级别引起的。我看到的大多数示例都表明,在Java 5上运行Weblogic时在客户端上使用Ja