2012-04-28 1 views
-1

Je suis nouveau dans les files d'attente. J'avais installé ma file d'attente dans JBOSS 5.1 EAP et maintenant en essayant d'injecter dans la file j'obtiens un ClassCastException (dans la recherche de JNDI), j'utilise flex sur mon front end et utilise le framework Spring pour flex. Lorsqu'il est injecté dans la file d'attente en utilisant un travail à quartz, il fonctionne bien et bien. Le travail à quartz est un projet distinct et n'a rien à voir avec le flex et le ressort.ClassCastException dans la recherche JMS ConnectionFactory dans JNDI

J'ai lu sur certains où cela pourrait être un problème de pot, j'ai eu des pots JMS dans mon printemps et j'ai essayé de supprimer, en remplaçant tous les types de pots, pas de chance.

 // Step 1. Create an initial context to perform the JNDI lookup. 

     InputStream in = this.getClass().getResourceAsStream(
       "/clv2.properties"); 
     Properties configProp = new Properties(); 
     configProp.load(in); 
     IpAddress = configProp.getProperty("ipaddress"); 
     port = configProp.getProperty("port"); 
     inQueueName = configProp.getProperty("inQueueName"); 
     Properties props = new Properties(); 
     props.setProperty("java.naming.factory.initial", 
       "org.jnp.interfaces.NamingContextFactory"); 
     props.setProperty("java.naming.factory.url.pkgs", 
       "org.jboss.naming"); 
     // props.setProperty("java.naming.provider.url", host + ":" + port); 
     props.setProperty("java.naming.provider.url", "localhost" + ":" 
       + 1099); 
     // props.setProperty("java.naming.provider.url", 
     // "16.181.233.61:1399"); 
     initialContext = new InitialContext(props); 

     // Step 3. Perform a lookup on the Connection Factory 
     QueueConnectionFactory cf = (QueueConnectionFactory) initialContext 
       .lookup("/ConnectionFactory"); 
     Queue queue = (Queue) initialContext 
       .lookup(/* "/queue/CLVInboundQueue" */inQueueName); 
     // Step 4.Create a JMS Connection 
     connection = (QueueConnection) cf.createConnection(); 

     // Step 5. Create a JMS Session 
     session = (QueueSession) connection.createSession(false, 
       Session.AUTO_ACKNOWLEDGE); 

     // Step 6. Create a JMS Message Producer 
     // MessageProducer producer = session.createProducer(queue); 
     QueueSender queueSender = session.createSender(queue); 
     TextMessage textMessage = session.createTextMessage(message); 
     textMessage.setLongProperty("Rejected_Message_ID", 
       rejected_Message_Id); 
     /* 
     * BufferedReader reader = new BufferedReader(new 
     * InputStreamReader(ClassLoader.class.getResourceAsStream(file))); 
     * StringBuilder sb = new StringBuilder(); String line = null; 
     * 
     * 
     * while ((line = reader.readLine()) != null) { sb.append(line + 
     * "\n"); } String announcementmsg = sb.toString(); 
     */ 
     commonlogger.info(textMessage); 
     connection.start(); 
     // producer.send(session.createTextMessage(announcementmsg)); 
     queueSender.send(textMessage); 

Ceci est ma pièce de codage à injecter dans la file d'attente. Je reçois l'exception dans "// Étape 3. Effectuer une recherche sur Connection Factory" et ceci est ma trace de pile.

09:22:20,730 ERROR [STDERR] java.lang.ClassCastException: org.jboss.jms.client.JBossConnectionFactory cannot be cast to javax.jms.QueueConnectionFactory 
09:22:20,731 ERROR [STDERR]  at com.cat.clv.util.InQueueReinjectMessage.sendMessage(InQueueReinjectMessage.java:63) 
09:22:20,731 ERROR [STDERR]  at com.cat.clv.util.RejectedMessageReinject.reProcessedMessage(RejectedMessageReinject.java:65) 
09:22:20,731 ERROR [STDERR]  at com.cat.clv.service.ReinjectMessagesServiceImpl.reinjectRejectedMessages(ReinjectMessagesServiceImpl.java:106) 
09:22:20,731 ERROR [STDERR]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
09:22:20,731 ERROR [STDERR]  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
09:22:20,732 ERROR [STDERR]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
09:22:20,732 ERROR [STDERR]  at java.lang.reflect.Method.invoke(Unknown Source) 
09:22:20,732 ERROR [STDERR]  at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:421) 
09:22:20,732 ERROR [STDERR]  at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183) 
09:22:20,732 ERROR [STDERR]  at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1503) 

Répondre

2

Si vous regardez la source de JBossConnectionFactory alors vous verrez qu'il implémente QueueConnectionFactory.

donc cette exception fonte de classe peut être à cause de:

  1. Une mauvaise installation de JBoss
  2. différents jms.jar dans le client et le serveur

Pouvez-vous d'abord essayer l'option 2 et voir Si cela fonctionne, sinon vous pouvez vérifier si les exemples fonctionnent dans votre installation de jboss.

0

Obtenir exception à classCast recherche: ClassCastException: weblogic.jms.client.JMSconnectionFactory ne peut pas être jeté à javax.jms.QueueConnectionFactory

initialContext = new InitialContext (accessoires);

// Step 3. Perform a lookup on the Connection Factory 
    QueueConnectionFactory cf = (QueueConnectionFactory) initialContext 
      .lookup("/ConnectionFactory"); 
    Queue queue = (Queue) initialContext 
      .lookup(/* "/queue/CLVInboundQueue" */inQueueName); 
    // Step 4.Create a JMS Connection 
    connection = (QueueConnection) cf.createConnection(); 

    // Step 5. Create a JMS Session 
    session = (QueueSession) connection.createSession(false, 
      Session.AUTO_ACKNOWLEDGE); 

    // Step 6. Create a JMS Message Producer 
    // MessageProducer producer = session.createProducer(queue); 
    QueueSender queueSender = session.createSender(queue); 
    TextMessage textMessage = session.createTextMessage(message); 
    textMessage.setLongProperty("Rejected_Message_ID", 
      rejected_Message_Id); 
    /* 
    * BufferedReader reader = new BufferedReader(new 
    * InputStreamReader(ClassLoader.class.getResourceAsStream(file))); 
    * StringBuilder sb = new StringBuilder(); String line = null; 
    * 
    * 
    * while ((line = reader.readLine()) != null) { sb.append(line + 
    * "\n"); } String announcementmsg = sb.toString(); 
    */ 
    commonlogger.info(textMessage); 
    connection.start(); 
    // producer.send(session.createTextMessage(announcementmsg)); 
    queueSender.send(textMessage); 
Questions connexes