A simple appender that publishes events to a JMS Topic. The events
are serialized and transmitted as JMS message type
ObjectMessage
.
JMS
topics
and
topic
connection factories
are administered objects that are retrieved
using JNDI messaging which in turn requires the retreival of a JNDI
Context
.
There are two common methods for retrieving a JNDI
Context
. If a file resource named
jndi.properties is
available to the JNDI API, it will use the information found
therein to retrieve an initial JNDI context. To obtain an initial
context, your code will simply call:
InitialContext jndiContext = new InitialContext();
Calling the no-argument
InitialContext()
method
will also work from within Enterprise Java Beans (EJBs) because it
is part of the EJB contract for application servers to provide each
bean an environment naming context (ENC).
In the second approach, several predetermined properties are set
and these properties are passed to the
InitialContext
contructor to connect to the naming service provider. For example,
to connect to JBoss naming service one would write:
Properties env = new Properties( );
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "jnp://hostname:1099");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
InitialContext jndiContext = new InitialContext(env);
where
hostname is the host where the JBoss applicaiton
server is running.
To connect to the the naming service of Weblogic application
server one would write:
Properties env = new Properties( );
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
InitialContext jndiContext = new InitialContext(env);
Other JMS providers will obviously require different values.
The initial JNDI context can be obtained by calling the
no-argument
InitialContext()
method in EJBs. Only
clients running in a separate JVM need to be concerned about the
jndi.properties file and calling
InitialContext.InitialContext()
or alternatively correctly
setting the different properties before calling
InitialContext.InitialContext(java.util.Hashtable)
method.
checkEntryConditions
protected boolean checkEntryConditions()
close
public void close()
Close this JMSAppender. Closing releases all resources used by the
appender. A closed appender cannot be re-opened.
- close in interface Appender
getInitialContextFactoryName
public String getInitialContextFactoryName()
getLocationInfo
public boolean getLocationInfo()
Returns value of the LocationInfo property which
determines whether location (stack) info is sent to the remote
subscriber.
getPassword
public String getPassword()
getProviderURL
public String getProviderURL()
getSecurityCredentials
public String getSecurityCredentials()
getSecurityPrincipalName
public String getSecurityPrincipalName()
getTopicBindingName
public String getTopicBindingName()
Returns the value of the TopicBindingName option.
getTopicConnection
protected TopicConnection getTopicConnection()
Returns the TopicConnection used for this appender. Only valid after
activateOptions() method has been invoked.
getTopicConnectionFactoryBindingName
public String getTopicConnectionFactoryBindingName()
Returns the value of the TopicConnectionFactoryBindingName option.
getTopicPublisher
protected TopicPublisher getTopicPublisher()
Returns the TopicPublisher used for this appender. Only valid after
activateOptions() method has been invoked.
getTopicSession
protected TopicSession getTopicSession()
Returns the TopicSession used for this appender. Only valid after
activateOptions() method has been invoked.
getUserName
public String getUserName()
lookup
protected Object lookup(Context ctx,
String name)
throws NamingException
requiresLayout
public boolean requiresLayout()
The JMSAppender sends serialized events and consequently does not
require a layout.
- requiresLayout in interface Appender
setInitialContextFactoryName
public void setInitialContextFactoryName(String initialContextFactoryName)
Setting the
InitialContextFactoryName method will cause
this
JMSAppender
instance to use the
InitialContext.InitialContext(Hashtable)
method instead of the
no-argument constructor. If you set this option, you should also
at least set the
ProviderURL option.
See also
setProviderURL(String)
.
setLocationInfo
public void setLocationInfo(boolean locationInfo)
If true, the information sent to the remote subscriber will
include caller's location information. By default no location
information is sent to the subscriber.
setPassword
public void setPassword(String password)
The paswword to use when creating a topic session.
setProviderURL
public void setProviderURL(String providerURL)
setSecurityCredentials
public void setSecurityCredentials(String securityCredentials)
setSecurityPrincipalName
public void setSecurityPrincipalName(String securityPrincipalName)
setTopicBindingName
public void setTopicBindingName(String topicBindingName)
The TopicBindingName option takes a
string value. Its value will be used to lookup the appropriate
Topic
from the JNDI context.
setTopicConnectionFactoryBindingName
public void setTopicConnectionFactoryBindingName(String tcfBindingName)
The TopicConnectionFactoryBindingName option takes a
string value. Its value will be used to lookup the appropriate
TopicConnectionFactory
from the JNDI context.
setURLPkgPrefixes
public void setURLPkgPrefixes(String urlPkgPrefixes)
setUserName
public void setUserName(String userName)
The user name to use when
creating a topic session
. If you set this option, you should
also set the
Password option. See
setPassword(String)
.