Thanks a lot for your reply. It is very clear to me what I need to do.
Here is partial code of the servlet. I compiled it and there is no error:
// Initialize JNDI
Context ctx = new InitialContext(System.getProperties());
// 1: Lookup ConnectionFactory via JNDI
TopicConnectionFactory factory =
(TopicConnectionFactory)
ctx.lookup("javax.jms.TopicConnectionFactory");
// 2: Use ConnectionFactory to create JMS connection
TopicConnection connection =
factory.createTopicConnection();
// 3: Use Connection to create session
TopicSession session = connection.createTopicSession(
false, Session.AUTO_ACKNOWLEDGE);
// 4: Lookup Desintation (topic) via JNDI
Topic topic = (Topic) ctx.lookup("logtopic");
// 5: Create a Message Producer
TopicPublisher publisher = session.createPublisher(topic);
// 6: Create a text message, and publish it
TextMessage msg = session.createTextMessage();
// 1: Lookup ConnectionFactory via JNDI
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory)
ctx.lookup("javax.jms.QueueConnectionFactory");
// 2: Use ConnectionFactory to create JMS connection
QueueConnection queueConnection =
queueConnectionFactory.createQueueConnection();
// 3: Use Connection to create session
QueueSession qSession = queueConnection.createQueueSession(
false, Session.AUTO_ACKNOWLEDGE);
Queue replyQueue = qSession.createTemporaryQueue();
QueueReceiver qReceiver = qSession.createReceiver(replyQueue);
queueConnection.start();
userName = request.getParameter("userName");
userPw = request.getParameter("Password");
if (userName.equals("")||userPw.equals("")){
response.sendRedirect("/CourseWebApp/login.jsp?message=novalue");
}
else{
msg.setText(userName+"$"+userPw);
msg.setJMSReplyTo(replyQueue);
publisher.publish(msg);
session.commit();
Message inMessage = (Message)qReceiver.receive();
System.out.println("message in: "+ inMessage.getStringProperty("match"));
In the onMessage() method, here is code:
protected MessageDrivenContext ctx;
protected int match = 0;
public void setMessageDrivenContext(MessageDrivenContext ctx) {
this.ctx = ctx;
}
public void onMessage(Message msg) {
try {
TextMessage tm = (TextMessage) msg;
String text = tm.getText();
System.out.println("message is: " + text);
String user1Name ="";
String user1Pw = "";
//String patternStr = "$";
StringTokenizer user1 = new StringTokenizer(text,"$");
int count = 1;
while (user1.hasMoreTokens()){
if (count == 1){
user1Name = user1.nextToken();
count++;
}
else {
user1Pw = user1.nextToken();
}
}
System.out.println("reach context: ");
ctx2 = new InitialContext(System.getProperties());
LoginHome home = (LoginHome)
PortableRemoteObject.narrow(
ctx2.lookup("LoginHome"), LoginHome.class);
System.out.println("find loginHome: ");
Login login = home.findByPrimaryKey(user1Name);
match = login.verify(user1Name, user1Pw);
System.out.println("match is: " + match);
// 1: Lookup ConnectionFactory via JNDI
ConnectionFactory cF = (ConnectionFactory) ctx.lookup("javax.jms.ConnectionFactory");
// 2: Use ConnectionFactory to create JMS connection
Connection connection = cF.createConnection();
// 3: Use Connection to create session
Session session2 = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Message msg2 = session2.createMessage();
Queue replyQueue = (Queue)msg2.getJMSReplyTo();
MessageProducer producer = session2.createProducer(replyQueue);
if (match==1){
msg2.setStringProperty("match","1");
}
else{
msg2.setStringProperty("match","0");
}
}
catch(JMSException e) {
e.printStackTrace();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
producer.send(msg2);
session2.commit();
}
}
When I compiled it, there are 7 error message. I checked JMS API, they are fine to me. Why does the compiler complain?
src\LogBean.java:106: cannot resolve symbol
symbol : method lookup (java.lang.String)
location: interface javax.ejb.MessageDrivenContext
ConnectionFactory cF = (ConnectionFactory) ctx.lookup("javax.jms.ConnectionF
actory");
^
src\LogBean.java:109: cannot resolve symbol
symbol : method createConnection ()
location: interface javax.jms.ConnectionFactory
Connection connection = cF.createConnection();
^
src\LogBean.java:111: cannot resolve symbol
symbol : method createSession (boolean,int)
location: interface javax.jms.Connection
Session session2 = connection.createSession(false, Session.AUTO_ACKNOWLEDGE)
;
^
src\LogBean.java:115: cannot resolve symbol
symbol : method createProducer (javax.jms.Queue)
location: interface javax.jms.Session
MessageProducer producer = session2.createProducer(replyQueue);
^
src\LogBean.java:143: cannot resolve symbol
symbol : variable msg2
location: class examples.LogBean
producer.send(msg2);
^
src\LogBean.java:143: cannot resolve symbol
symbol : variable producer
location: class examples.LogBean
producer.send(msg2);
^
src\LogBean.java:144: cannot resolve symbol
symbol : variable session2
location: class examples.LogBean
session2.commit();
^
7 errors
Could you please help me take a look at the code and let me know whether I am in the right track? Many thanks.