package multimonster.systemadministration;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.QueueConnectionFactory;
import javax.jms.TopicConnectionFactory;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.log4j.Logger;
import multimonster.common.setting.SettingID;
import multimonster.common.setting.SettingValue;
import multimonster.systemadministration.exceptions.SettingNotExistsException;
/**
* Receives Message when SettingValue was changed.
* Distributes ChangeEvent to SettingProxies
*
* @ejb.bean
* name="SettingChangeController"
* type="MDB"
* acknowledge-mode="Auto-acknowledge"
* destination-type="javax.jms.Queue"
* subscription-durability="NonDurable"
* jndi-name = "multimonster/systemadministration/SettingChangeController"
*
* @jboss.destination-jndi-name
* name="queue/multimonster/systemadministration/SettingQueue"
*
*/
public class SettingChangeControllerBean
implements MessageDrivenBean, MessageListener {
MessageDrivenContext ctx = null;
Logger log = null;
public final static String JMS_QUEUE_NAME =
"queue/multimonster/systemadministration/SettingQueue";
public static String TEST = "TEST1";
private void publishSettingChange(
SettingID settingID,
SettingValue value) {
try {
Context ctx = new InitialContext();
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");
TopicConnectionFactory topicConnectionFactory =
(TopicConnectionFactory) ctx.lookup("TopicConnectionFactory");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Required creation method for message-driven beans.
*
* @ejb.create-method
*/
public void ejbCreate() {
this.log = Logger.getLogger(this.getClass());
log.debug("SettingChangeController was created!");
}
/* (non-Javadoc)
* @see javax.ejb.MessageDrivenBean#ejbRemove()
*/
public void ejbRemove() throws EJBException {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see javax.ejb.MessageDrivenBean#setMessageDrivenContext(javax.ejb.MessageDrivenContext)
*/
public void setMessageDrivenContext(MessageDrivenContext arg0)
throws EJBException {
this.ctx = arg0;
this.log = Logger.getLogger(this.getClass());
log.debug("SettingChangeController was instanciated!");
}
/* (non-Javadoc)
* @see javax.jms.MessageListener#onMessage(javax.jms.Message)
* wird beim Erhalt einer Message aufgerufen und leitet die Wert�nderung
* an den entsprechenden SettingProxy weiter
*/
public void onMessage(Message msg) {
log.info("Message received!");
Object obj = null;
SettingID settingID = extractID(msg);
short prefix = 0;
SettingValue setValue = null;
SettingProxy proxy = null;
if (settingID != null) {
// Den zugeh�rigen SettingProxy benachrichtigen
SettingAdministration settingAdmin = new SettingAdministration();
// zu dem Setting das Prefix aus der DB holen ...
prefix = settingAdmin.getPrefix(settingID);
log.debug("Prefix ist: " + prefix);
// ... und dem SettingID-Object das Prefix zuweisen
settingID.setPrefix(prefix);
try {
// Wert aus DB holen
setValue = settingAdmin.getValue(settingID);
log.debug("Neues Setting Value ist: " + setValue.getValueCont().toString());
} catch (SettingNotExistsException e2) {
log.error("Verwendetes Setting existiert nicht!");
}
// Referenz auf zugeh�rigen SettingProxy holen
proxy = settingAdmin.getSettingProxy(prefix);
// Wert�nderung dem Proxy bekannt geben
if (proxy != null) {
proxy.updateValue(settingID, setValue);
} else {
log.error("SettingProxy-Referenz ist null!");
}
}
// try {
// String classname = (new MOSearch()).getClass().getName();
// String fieldname = "TEXT";
// log.info("Klassenname lautet: " + classname);
//
//
// //Class searchClass = (new MOSearch()).getClass();
// Class searchClass = null;
//
// searchClass = Class.forName(classname);
//
// Field test = searchClass.getField(fieldname);
// test.set(null, "Der ersetzte Text");
//
// // log.info("Typ des Felds: " + test.getType());
// // log.info("Name des Felds: " + test.getName());
// // log.info("Name der deklarierenden Klasse: " + test.getDeclaringClass());
// } catch (SecurityException e1) {
// log.error("SecurityException:" + e1);
// } catch (NoSuchFieldException e) {
// log.error("NoSuchFieldException" + e);
// } catch (IllegalArgumentException e) {
// log.error(e);
// } catch (IllegalAccessException e) {
// log.error(e);
// } catch (ClassNotFoundException e) {
// log.error(e);
// }
}
//**************** Helper Methods ********************
private SettingID extractID(Message msg) {
Object obj = null;
SettingID settingID = null;
try {
obj = ((ObjectMessage) msg).getObject();
} catch (JMSException e) {
log.error(e);
return null;
} catch (ClassCastException e) {
log.error(e);
return null;
}
if (obj != null) {
try {
settingID = (SettingID) obj;
} catch (ClassCastException e) {
log.error(e);
return null;
}
}
log.debug("SettingID is " + settingID.getId());
log.debug("SettingPrefix is " + settingID.getPrefix());
return settingID;
}
}