私はキューが初めてです。JBOSS 5.1 EAP でキューをセットアップしましたが、ClassCastException
(JNDI のルックアップで) キューに注入しようとしているときに、フロントエンドでフレックスを使用し、フレックスに Spring フレームワークを使用しています。Quartz ジョブを使用してキューに挿入すると、正常に実行されます。クォーツの仕事は別のプロジェクトであり、フレックスやスプリングとは何の関係もありません。
これがjarの問題である可能性がある場所をいくつか読みました。春にJMS jarがあり、すべてのタイプのjarを削除して置き換えようとしましたが、運がありませんでした。
// 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);
これは、キューに挿入する私のコーディングです。「//ステップ 3. 接続ファクトリーでルックアップを実行する」で例外が発生します。これが私のスタック トレースです。
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)