hi i'm a newbie, and i'm trying to use jboss cache but when i eliminate
everything from the cache, and then try to put a new object in it, a timeout
exception happens.
the code is as follows:
private void initCache( ) throws UnexpectedException {
// 1. DDBB access
ArrayList workingModulesCacheable = getWorkingModuleSensors( );
ArrayList alarmsToValidateCacheable = getAlarmsToValidate( );
// 2. Store this information in the CACHE.
// JBoss CACHE functionality
server = MBeanServerLocator.locateJBoss( );
try {
cache = ( PojoCacheMBean ) MBeanProxyExt.create(
PojoCacheMBean.class,
"jboss.cache:service=DesaladoraPojoCache",
server );
cache.putObject( "/stpd/adquisition/workingModules",
workingModulesCacheable );
cache.putObject(
"/stpd/alarms/alarmswatchdog/alarmsToValidate", alarmsToValidateCacheable );
}
catch ( MalformedObjectNameException e ) {
UnexpectedException ue = new UnexpectedException(
e.getMessage( ), e );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
catch ( CacheException e1 ) {
UnexpectedException ue = new UnexpectedException(
e1.getMessage( ), e1 );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
}
private void removeCache( ) throws Exception {
server = MBeanServerLocator.locateJBoss( );
try {
cache = ( PojoCacheMBean ) MBeanProxyExt.create(
PojoCacheMBean.class,
"jboss.cache:service=DesaladoraPojoCache",
server );
cache.remove( "/" );
}
catch ( MalformedObjectNameException e ) {
UnexpectedException ue = new UnexpectedException(
e.getMessage( ), e );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
catch ( CacheException e1 ) {
UnexpectedException ue = new UnexpectedException(
e1.getMessage( ), e1 );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
}
this are the two functions i use to control the cache, the problem happens in
this line:
cache.putObject( "/stpd/adquisition/workingModules",
workingModulesCacheable );
i know that my request is very generic, so if the answer isn't known i would
appreciatte guidance on where to rely, what to read, etc... because the api's
documentation hasn't been much of a help for me
thank you in advance, if further information is required please tell me,
another thing after the timeout i try again and it doesn't let me because it
tells me that the lock couldn't be acquired, i think this is consecuence of the
first problem, please confirm.
i'm using the -> jboss-cache-jdk50.jar
this is the complete file:
package stpd.component.coodinator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import org.apache.log4j.Logger;
import org.jboss.cache.CacheException;
import org.jboss.cache.aop.PojoCacheMBean;
import org.jboss.mx.util.MBeanProxyExt;
import org.jboss.mx.util.MBeanServerLocator;
import stpd.common.dto.alarms.AlarmCatalogDTO;
import stpd.common.dto.sensors.ConnectedSensorFullDTO;
import stpd.common.dto.sensors.DAHModuleDTO;
import stpd.common.dto.sms.PhoneNumberDTO;
import stpd.common.dto.sms.SmsCatalogFullDataDTO;
import stpd.common.exceptions.UnexpectedException;
import stpd.common.util.enums.plant.State;
import stpd.component.cache.data.AlarmData;
import stpd.component.cache.data.WorkingModuleSensors;
import stpd.component.common.data.alarms.ActiveAlarm;
import stpd.component.common.data.alarms.AlarmUtils;
import stpd.component.common.data.alarms.ValidatedAlarm;
import stpd.component.interfaces.adquisition.DataReadingsTimer;
import stpd.component.interfaces.alarms.AlarmManagerService;
import stpd.component.interfaces.coordinator.Coordinator;
import stpd.component.interfaces.sensors.SensorManagerService;
import stpd.component.interfaces.sms.SmsManagerService;
@Stateless
@Local(Coordinator.class)
public class CoordinatorBean implements Coordinator {
private String infoTimer;
private long milisg;
static final Logger logger = Logger.getLogger(
"stpd.component.coordinator" );
@EJB
private SensorManagerService sensorMs;
@EJB
private AlarmManagerService aMs;
@EJB
private SmsManagerService smsMs;
@EJB
private DataReadingsTimer dataReadingsTimer;
private MBeanServer server;
private PojoCacheMBean cache;
public CoordinatorBean( ) {
super( );
infoTimer = new String( "system_adquisition_timer" );
milisg = 10000;
}
@SuppressWarnings("unchecked")
public ActiveAlarm getActiveAlarms() throws UnexpectedException {
ActiveAlarm activeAlarms = new ActiveAlarm("Lista de alarmas
monitorizadas y que se encuentran activas");
ArrayList sensors = null;
try {
server = MBeanServerLocator.locateJBoss( );
cache = ( PojoCacheMBean ) MBeanProxyExt.create(
PojoCacheMBean.class,
"jboss.cache:service=DesaladoraPojoCache",
server );
sensors = ( ArrayList ) cache.getObject(
"/stpd/adquisition/workingModules" );
if ( sensors != null ) {
// se introducen todas al principio y
posteriormente se eliminan las que no estan activas
activeAlarms = ( ActiveAlarm ) cache.getObject(
"/stpd/alarms/alarmswatchdog/lastMonitoredAlarms" );
if ( activeAlarms != null){
logger.debug( "GETTING ALARMS" );
Collection alarms =
activeAlarms.getAlarmList( ).values( );
for ( ValidatedAlarm alarm : alarms ) {
if ( !alarm.getCurrentlyActive(
) ) {
activeAlarms.getAlarmList( ).remove( alarm.getIdAlarm( ) );
}
}
}
}
}
catch ( CacheException ce ) {
UnexpectedException ue = new UnexpectedException(
ce.getMessage( ), ce );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
catch ( MalformedObjectNameException e ) {
UnexpectedException ue = new UnexpectedException(
e.getMessage( ), e );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
return activeAlarms;
}
/**
* Start the System and subprocess. Steps: 1. Start System Timer 2.
Init Cache Data
* @throws UnexpectedException
*/
public void startSystem( ) throws UnexpectedException {
logger.debug( "Entering 'startSystem' to START timer [" +
infoTimer + "]" );
// 1. Start System Timer
dataReadingsTimer.scheduleDataAdquisitionTimer( infoTimer,
milisg );
// 2. Init Cache Data
initCache( );
}
/**
* Stop the System and subprocess. Steps: 1. Stop System Timer 2.
Remove any stored Cache
* Data
*/
public void stopSystem( ) throws Exception {
logger.debug( "Entering 'stopSystem' to STOP timer and remove
any data from de cache" );
// 1. Stop System Timer
dataReadingsTimer.stopTimer( infoTimer );
// 2. Remove any stored Cache Data
removeCache( );
}
private void initCache( ) throws UnexpectedException {
// 1. DDBB access
ArrayList workingModulesCacheable = getWorkingModuleSensors( );
ArrayList alarmsToValidateCacheable = getAlarmsToValidate( );
// 2. Store this information in the CACHE.
// JBoss CACHE functionality
server = MBeanServerLocator.locateJBoss( );
try {
cache = ( PojoCacheMBean ) MBeanProxyExt.create(
PojoCacheMBean.class,
"jboss.cache:service=DesaladoraPojoCache",
server );
cache.putObject( "/stpd/adquisition/workingModules",
workingModulesCacheable );
cache.putObject(
"/stpd/alarms/alarmswatchdog/alarmsToValidate", alarmsToValidateCacheable );
}
catch ( MalformedObjectNameException e ) {
UnexpectedException ue = new UnexpectedException(
e.getMessage( ), e );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
catch ( CacheException e1 ) {
UnexpectedException ue = new UnexpectedException(
e1.getMessage( ), e1 );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
}
private void removeCache( ) throws Exception {
server = MBeanServerLocator.locateJBoss( );
try {
cache = ( PojoCacheMBean ) MBeanProxyExt.create(
PojoCacheMBean.class,
"jboss.cache:service=DesaladoraPojoCache",
server );
cache.remove( "/" );
}
catch ( MalformedObjectNameException e ) {
UnexpectedException ue = new UnexpectedException(
e.getMessage( ), e );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
catch ( CacheException e1 ) {
UnexpectedException ue = new UnexpectedException(
e1.getMessage( ), e1 );
logger.error("[" + ue.getClass().getName() + "]: " +
ue.getMessage(), ue);
}
}
/**
* DDBB access.
* Steps:
* 1. Get IP of all the connected modules (DAH)
* 2. For every module, get all the connected sensors (installed) whose
state is ON
*/
private ArrayList getWorkingModuleSensors( ) {
// /// DDBB access //////////////////////////////////////////
// 1. Get IP of all the connected modules (DAH).
ArrayList listOfWorkingModules = new ArrayList( );
ArrayList listOfModules = sensorMs.findAllModules( );
Iterator moduleIter = listOfModules.iterator( );
// 2. From every module, get all the connected sensor
(installed) which
// state is ON.
while ( moduleIter.hasNext( ) ) {
DAHModuleDTO module = moduleIter.next( );
ArrayList listOfConnectedSensors =
sensorMs.findAllConnectedWorkingSensors( module.getId( ) );
if ( !listOfConnectedSensors.isEmpty( ) )
listOfWorkingModules.add( new
WorkingModuleSensors( module.getId( ),
module.getInputNumber( ),
listOfConnectedSensors ) );
}
// /// END OF DDBB ACCESS ///////////////////////////////////
return listOfWorkingModules;
}
/**
* DDBB access.
* Steps:
* 1. Get all alarms to validate (with State of ON).
* 2. From every alarm, get all relevant data.
* @throws UnexpectedException
*/
private ArrayList getAlarmsToValidate( ) throws UnexpectedException {
// /// DDBB access //////////////////////////////////////////
// 1. Get all alarms to validate (with State of ON).
ArrayList listOfAlarmToValidate = new ArrayList( );
ArrayList listOfAlarm = aMs.findAllAlarmsToValidate( );
Iterator iter = listOfAlarm.iterator( );
// 2. From every alarm, get all relevant data
while ( iter.hasNext( ) ) {
AlarmCatalogDTO alarm = iter.next( );
AlarmData alarmToValidate =new AlarmData(
alarm.getName( ),
alarm.getActivationRules( ),
AlarmUtils.getActivationRules( alarm.getActivationRules( ) ),
alarm.getAlarmRules( ),
AlarmUtils.getAlarmRules( alarm.getAlarmRules( ) ),
alarm.getSensorComparissonRules( ),
AlarmUtils.getSensorComparissonRules(
alarm.getSensorComparissonRules( ) ) );
//Añadimos la info del SMS a enviar
Integer smsId = alarm.getSms( );
if ( smsId != 0 ) {
SmsCatalogFullDataDTO smsFullDto =
smsMs.findSmsFullData( smsId );
alarmToValidate.setSmsText(
smsFullDto.getContent( ) );
if ( !smsFullDto.getPhonesList( ).isEmpty( ) )
{
List phones = new ArrayList();
for ( PhoneNumberDTO phone :
smsFullDto.getPhonesList( ) ) {
//Only phone with the state of
ON
if ( phone.getState( ) ==
State.ON )
phones.add(
phone.getPhone( ) );
}
alarmToValidate.setPhoneNumbers( phones
);
}
}
logger.debug( alarmToValidate.toString( ) );
listOfAlarmToValidate.add( alarmToValidate );
}
// /// END OF DDBB ACCESS ///////////////////////////////////
return listOfAlarmToValidate;
}
}
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4175394#4175394
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4175394
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user