Can I still use the default connection factories
supported in WebLogic Release 5.1?
Yes. The following two names for the default connection
factories have been deprecated:
javax.jms.QueueConnectionFactory
javax.jms.TopicConnectionFactory.
However, these connection factories are still defined
and usable in this release for backwards compatibility.
WebLogic JMS 6.1 defines one connection factory, by
default:
weblogic.jms.ConnectionFactory
You have to Enable the JMS default connection factories.
Go to the console->your server->tuning->click on the
check box Enable Default JMS Connection Factories.
You can also specify user-defined connection factories
using the Administration Console.
Why does JMSSession.createTopic or
JMSSession.createQueue fail to create a destination in
WLS JMS 6.1 (it worked in 5.1)?
In WLS 5.1 createTopic() or createQueue() creates the
destination permanently in the database if it doesn't
already exist, but does not modify the
weblogic.properties file.
According to the JavaSoft JMS specification version
1.0.2 regarding createQueue() and createTopic(), they
are not for creating destinations dynamically. They are
used to retrieve the destination referenced by using a
string name instead of using JNDI lookup. The
destination has to be in your config.xml file first.
This change is documented in WLS 6.0 since it behaves
differently than the previous release. You can use the
WLS JMS helper class (weblogic.jms.extensions.JMSHelper)
or the console to create destinations at the run time
(note that there was a bug in 6.0 that caused a problem
when the server restarted; this is fixed in Service Pack
1). These mechanisms create the destination and also
modify the configuration file.
For more information on the JMSHelper classes, see the
subsection called Creating Destinations Dynamically in
Programming WebLogic JMS.
The following program creates a Topic.
import java.io.*;
import java.util.Hashtable;
import javax.jms.*;
import javax.naming.*;
import weblogic.jms.extensions.JMSHelper;
class t {
public final static String
JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
public final static String JMS_SERVER_NAME="TestJMSServer";
public final static String DEST_JNDI_PREFIX="javax.destination.";
static public void main(String [] args) throws Exception
{
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context ctx = new InitialContext(env);
String topicName = "JMSHelperTestQueue01";
String topicJNDI = DEST_JNDI_PREFIX + topicName;
System.out.println("topic name=" + topicName + ", jndi="
+
topicJNDI);
JMSHelper.createPermanentTopicAsync(ctx, JMS_SERVER_NAME,
topicName,
topicJNDI);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
How do I programmatically get a list of Queues or
Topics?
The following program uses Mbeans:
import weblogic.management.*;
import weblogic.management.configuration.*;
InitialContext ic = new InitialContext();
MBeanhome home = (MBeanhome)ic.lookup(MBeanhome.ADMIN_JNDI_NAME);
for(Iterator i = o.getMBeansByType("JMSTopic").iterator();
i.hasNext(); ){
WebLogicMBean wmb = (WebLogicMBean)i.next();
System.out.println("topic name found: " + wmb.getName());
}
for(Iterator i = o.getMBeansByType("JMSQueue").iterator();
i.hasNext(); ){
WebLogicMBean wmb = (WebLogicMBean)i.next();
System.out.println("queue name found: " + wmb.getName());
}
How do I use a temporary destination?
You must create a template on every JMSServer where you
want to be able to create temporary destinations. You
can specify multiple JMSServer entries to support
TemporaryTemplate and the system will load balance among
those JMS servers to setup the temporary destination.
See How do I start WLS and configure JMS? for a
description about how to configure JMS. The resulting
template definition looks something like the following:
<JMSTemplate Name="MyTemplate"/>
The JMSServer is defined something like:
<JMSServer Name="MyJMSServer" TemporaryTemplate="MyTemplate"
Targets="MyServer" >
After the template name, you can set any queue/topic
attribute you want in the template (not including a JNDI
name or topic multicast settings). The template is at
the outer most level; that is, it should not be nested
in your <JMSServer>.
Temporary destinations can only be consumed by the
creating connection. Using topics, you create your
temporary topic and subscribe to that temporary topic.
If you want someone to publish to that temporary topic,
you need to tell that someone what your topic is. You
can send them a message and include your temporary topic
in the JMSReplyTo field. The creator of the
TemporaryTopic and the subscriber must be one in the
same.
import javax.jms.TopicSession;
TemporaryTopic myTopic = mySession.createTemporaryTopic();
TopicSubscriber = mySession.createSubscriber(myTopic);
Temporary topics do not get names and cannot be
subscribed to by other connections. When you create a
temporary topic, the JMS provider returns a
javax.jms.Topic. You then need to advertise that topic
to other parties (those who want to publish to the
topic), putting it in your JMSReplyTo field so that they
can respond. In general, no one else can subscribe to
the topic. You advertise the topic any way you want.
Topics are serializable (or, in our case, externalizable),
which allows you to pass them around in RMI calls,
through a file, binding it to a name in JNDI, etc. In
short, create the topic at the subscriber side and
advertise so that others can publish. You can get
multiple subscribers on the same connection and get
concurrent processing using multiple sessions.
Can two JMS servers share the same persistent store?
No. Each JMS server must have its own unique persistent
store. Two file-based JMS persistent stores may share
the same directory, but their messages will be stored in
different files. In this case, the filenames will
contain different prefixes.
Two JDBC-based JMS persistent stores may share the same
database, but they must be configured to use a different
Prefix Name which will be prepended to the database
tables. For more information on configuring the JDBC
Prefix Name, see "JMS JDBC Stores" in the Administration
Console Online Help. If they are configured with the
same Prefix Name, persistent messages will be corrupted
and/or lost.
Which types of JDBC databases does WebLogic JMS support?
The JMS database can be any database that is accessible
through a JDBC driver. WebLogic supports and provides
JDBC drivers for the following databases:
* Cloudscape
* Informix
* Microsoft SQL (MSSQL) Server (Versions 6.5 and 7)
* Oracle (Version 8.1.6)
* Sybase (Version 12)
Page Numbers :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18