001 /*
002 * Copyright (C) The Apache Software Foundation. All rights reserved.
003 *
004 * This software is published under the terms of the Apache Software License
005 * version 1.1, a copy of which has been included with this distribution in
006 * the LICENSE file.
007 *
008 * $Id: MessengerDigester.java 155459 2005-02-26 13:24:44Z dirkv $
009 */
010 package org.apache.commons.messenger;
011
012 import org.apache.commons.digester.Digester;
013
014 /** <p><code>MessengerDigester</code> is a digester of Messenger objects so
015 * that JMS Messengers can be created from an XML config file.</p>
016 *
017 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
018 * @version $Revision: 155459 $
019 */
020 public class MessengerDigester extends Digester {
021
022 // default implementation classes
023 private String messengerManagerClass = "org.apache.commons.messenger.MessengerManager";
024 private String messengerClass = "org.apache.commons.messenger.DefaultMessenger";
025 private String xaMessengerClass = "org.apache.commons.messenger.XAMessenger";
026 private String sessionFactory = "org.apache.commons.messenger.SessionFactory";
027 private String connectionFactory = "org.apache.commons.messenger.DummyConnectionFactory";
028 private String jndiSessionFactory = "org.apache.commons.messenger.JNDISessionFactory";
029
030
031 public MessengerDigester() {
032 }
033
034 // Implementation methods
035 //-------------------------------------------------------------------------
036
037 /** Configure the parsing rules that will be used to process
038 * the cache config file
039 */
040 protected void configure() {
041 if (configured) {
042 return;
043 }
044 else {
045 configured = true;
046 }
047
048 addObjectCreate( "manager", messengerManagerClass, "className" );
049 addSetProperties( "manager" );
050
051 String path = "manager/messenger";
052 addObjectCreate( path, messengerClass, "className" );
053 addSetProperties( path );
054
055 addSetNext( path, "addMessenger",
056 "org.apache.commons.messenger.Messenger"
057 );
058
059 addMessengerPaths(path);
060
061 path = "manager/xaMessenger";
062 addObjectCreate( path, xaMessengerClass, "className" );
063 addSetProperties( path );
064
065 addSetNext( path, "addMessenger",
066 "org.apache.commons.messenger.Messenger"
067 );
068
069 addMessengerPaths(path);
070 }
071
072 protected void addMessengerPaths(String root) {
073
074 String path = root + "/factory";
075 addObjectCreate( path, sessionFactory, "className" );
076 addSetProperties( path );
077 addSetNext( path, "setSessionFactory",
078 "org.apache.commons.messenger.SessionFactory"
079 );
080 addCallMethod( path + "/property", "addProperty", 2);
081 addCallParam( path + "/property/name", 0 );
082 addCallParam( path + "/property/value", 1 );
083
084 path = root + "/factory/connectionFactory";
085 addObjectCreate( path, connectionFactory, "className" );
086 addSetProperties( path );
087 addSetNext( path, "setConnectionFactory",
088 "javax.jms.ConnectionFactory"
089 );
090
091 path = root + "/jndi";
092 addObjectCreate( path, jndiSessionFactory, "className" );
093 addSetProperties( path );
094
095 addSetNext( path, "setSessionFactory",
096 "org.apache.commons.messenger.SessionFactory"
097 );
098
099 addCallMethod( path + "/property", "addProperty", 2);
100 addCallParam( path + "/property/name", 0 );
101 addCallParam( path + "/property/value", 1 );
102 }
103 }