Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] java.lang.VerifyError: (class: MyAspect, method: <init> signature: ()V) Illegal type in constant pool

Hi, Andy. I'm still using @Aspectj, and also the signature is fine (since it
worked as soon as I removed the @Configurable annotation so that it's not
being managed by spring). For the lack of a better example, below is what I
have. To re-iterate, this aspect works fine without
@Configurable/@Autowired.


package ramin.aj;

import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;

//@Configurable(dependencyCheck = true)
@Aspect
public abstract class AspectCache {

	public AspectCache() {
		logger = Logger.getLogger("CSSOPASPECTLOGGER");

		// these values will be set by spring, however we need to have values
		// for as long as spring has not initialized us
		exprationPeriod = 300;
		cleanupPeriod = 3600;
		ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
		threadExecutor.execute(new Runnable() {
			public void run() {
				while (true) {
					try {
						Thread.sleep(cleanupPeriod * 1000);
						for (Object k : cache.keySet()) {
							Value v = cache.get(k);
							if (System.currentTimeMillis() - v.whenCached > exprationPeriod *
1000) {
								if (logger.isDebugEnabled()) {
									logger.debug("expiring cache entry key = "
											+ k + " value = " + v);
								}
								cache.remove(k);
							}
						}
						if (logger.isDebugEnabled()) {
							logger.debug("cache[" + exprationPeriod + ","
									+ cleanupPeriod + "] has " + cache.size()
									+ " elements");
						}
					} catch (Throwable e) {
						logger.error("caching aspect cleanup thread: " + e);
					}

				}
			}
		});
	}

	protected final Logger logger;

	private ConcurrentMap<Object, Value> cache = new ConcurrentHashMap<Object,
Value>();
	
//	@Autowired
//	private ConfigManager cf;
	
	private long exprationPeriod; // in seconds needs to be set through config
	private long cleanupPeriod; // in seconds needs to be set through config

	@Pointcut
	protected abstract void caching();

	@Around("caching()")
	public Object doProcess(final ProceedingJoinPoint pjp) throws Throwable {
		Object[] arguments = pjp.getArgs();
		Object k = arguments[0];

		Value v = cache.get(k);
		if (v == null
				|| System.currentTimeMillis() - v.whenCached > exprationPeriod * 1000) {
			cache.remove(k);
			Callable eval = new Callable() {
				public Object call() throws InterruptedException {
					try {
						return pjp.proceed();
					} catch (Throwable e) {
						logger.error("caching aspect: " + e);
						throw new InterruptedException();
					}
				}
			};
			FutureTask ft = new FutureTask(eval);
			Value newValue = new Value();
			newValue.whenCached = System.currentTimeMillis();
			newValue.futureValue = ft;
			v = cache.putIfAbsent(k, newValue);
			if (v == null) {
				v = newValue;
				newValue.futureValue.run();
				if (logger.isDebugEnabled()) {
					logger.debug("caching value from cache key = " + k
							+ " value = " + v);
				}
			} else {
				if (logger.isDebugEnabled()) {
					logger.debug("retrieving value from cache key = " + k
							+ " value = " + v);
				}
			}
		}
		return v.futureValue.get();
	}

	private class Value {
		private FutureTask futureValue;
		private long whenCached;

		@Override
		public String toString() {
			String s = "";
			try {
				s = "Value[" + futureValue.get().toString() + "," + whenCached
						+ "]";
			} catch (Exception e) {
				logger.error("caching aspect: " + e);
			}
			return s;
		}
	}

}



The Pointcut as catching some method which is in the form of 

"SomeType computeTheValueOf(SomeOtherType)"
-- 
View this message in context: http://aspectj.2085585.n4.nabble.com/java-lang-VerifyError-class-MyAspect-method-init-signature-V-Illegal-type-in-constant-pool-tp3209499p3209728.html
Sent from the AspectJ - users mailing list archive at Nabble.com.


Back to the top