[jboss-user] [JBoss AOP] - JBoss AOP 2.0.0 possible deadlock?

kringdahl do-not-reply at jboss.com
Sat Jun 28 23:13:51 EDT 2008


So, we've been progressing with integrating JBoss AOP 2.0.0 into JBoss AS 4.2.2 out of necessity to pull in JBoss Cache 2.1.1 for  a critical bug fix.  We're not ready to make the move to JBoss AS 5 so that's what brings us here.  We've followed the instructions in the JBoss 4 area of the package by running the ant script appropriately.  Additionally, we found that we needed to pull out the org.jboss.aop package from client/jbossall-client as it was using I presume JBoss AOP 1.5.  We also replaced client/jboss-aop-jdk50-client.jar with the one from lib-50 in the AOP 2.0.0 download.  Since pulling in JBoss AOP 2.0.0 (initially CR8, now updated to CR13), we are seeing an intermittent deadlock upon AS startup.  We use Spring injection in some of our MBeans and there is 1 specific MBean that gets stuck on startup when parsing the Spring XML configuration.  Here is the last line in our log:

21:32:51,653 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from class path resource [spring/applicationContext-policymgr.xml]

When I attach my debugger to JBoss I find that this particular thread (the JBoss main thread) is stuck at AspectManager.java:967.  That seems to relate to this line of code:


  | if (isNonAdvisableClassName(className))
  | 

inside of this method:


  | public synchronized byte[] translate(String className, ClassLoader loader, byte[] classfileBuffer) throws Exception
  | 

After inspecting some of the other threads, I see there is another thread in the same method (even though this is supposedly synchronized).  My thread (Thread-10) is stuck at line 988 in AspectManager which is that same exact method.  So, I'm wondering if someone can give me some insight as to what might be going on here since the method is synchronized.  This is a big problem as it essentially deadlocks the entire AS (everything stops loading and never finishes startup).  Below are the stack traces for the 2 threads in question.  This is an intermittent problem as it appears the timing of the two threads on my side need to enter at almost the same instant.  I'm going to play around with dependencies on my side which could possibly avoid this altogether.


The "main" thread:

  | Thread [main] (Suspended)	
  | 	AspectManager.translate(String, ClassLoader, byte[]) line: 967	
  | 	AspectManager.transform(ClassLoader, String, Class, ProtectionDomain, byte[]) line: 934	
  | 	AOPTransformer.aspectTransform(String, ClassLoader, Class<?>, ProtectionDomain, byte[]) line: 85	
  | 	AOPTransformer.transform(ClassLoader, String, Class<?>, ProtectionDomain, byte[]) line: 73	
  | 	TransformerManager.transform(ClassLoader, String, Class, ProtectionDomain, byte[]) line: 122	
  | 	InstrumentationImpl.transform(ClassLoader, String, Class, ProtectionDomain, byte[]) line: 155	
  | 	CMNodeFactory.getCMLeafNode(int, Object, int, int) line: not available	
  | 	CMBuilder.buildSyntaxTree(XSParticleDecl) line: not available	
  | 	CMBuilder.buildSyntaxTree(XSParticleDecl) line: not available	
  | 	CMBuilder.createDFACM(XSParticleDecl) line: not available	
  | 	CMBuilder.getContentModel(XSComplexTypeDecl) line: not available	
  | 	XSComplexTypeDecl.getContentModel(CMBuilder) line: not available	
  | 	XMLSchemaValidator.handleStartElement(QName, XMLAttributes, Augmentations) line: not available	
  | 	XMLSchemaValidator.startElement(QName, XMLAttributes, Augmentations) line: not available	
  | 	XMLNSDocumentScannerImpl.scanStartElement() line: not available	
  | 	XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook() line: not available	
  | 	XMLNSDocumentScannerImpl$NSContentDispatcher(XMLDocumentFragmentScannerImpl$FragmentContentDispatcher).dispatch(boolean) line: not available	
  | 	XMLNSDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) line: not available	
  | 	XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) line: not available	
  | 	XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) line: not available	
  | 	DOMParser(XMLParser).parse(XMLInputSource) line: not available	
  | 	DOMParser.parse(InputSource) line: not available	
  | 	DocumentBuilderImpl.parse(InputSource) line: not available	
  | 	DefaultDocumentLoader.loadDocument(InputSource, EntityResolver, ErrorHandler, int, boolean) line: 78	
  | 	XmlBeanDefinitionReader.doLoadBeanDefinitions(InputSource, Resource) line: 361	
  | 	XmlBeanDefinitionReader.loadBeanDefinitions(EncodedResource) line: 313	
  | 	XmlBeanDefinitionReader.loadBeanDefinitions(Resource) line: 290	
  | 	XmlBeanDefinitionReader(AbstractBeanDefinitionReader).loadBeanDefinitions(Resource[]) line: 142	
  | 	XmlBeanDefinitionReader(AbstractBeanDefinitionReader).loadBeanDefinitions(String) line: 158	
  | 	XmlBeanDefinitionReader(AbstractBeanDefinitionReader).loadBeanDefinitions(String[]) line: 184	
  | 	ClassPathXmlApplicationContext(AbstractXmlApplicationContext).loadBeanDefinitions(XmlBeanDefinitionReader) line: 112	
  | 	ClassPathXmlApplicationContext(AbstractXmlApplicationContext).loadBeanDefinitions(DefaultListableBeanFactory) line: 79	
  | 	ClassPathXmlApplicationContext(AbstractRefreshableApplicationContext).refreshBeanFactory() line: 97	
  | 	ClassPathXmlApplicationContext(AbstractApplicationContext).obtainFreshBeanFactory() line: 411	
  | 	ClassPathXmlApplicationContext(AbstractApplicationContext).refresh() line: 338	
  | 	ClassPathXmlApplicationContext.<init>(String[], boolean, ApplicationContext) line: 122	
  | 	ClassPathXmlApplicationContext.<init>(String[]) line: 76	
  | 	PolicyManagerDelegateImpl.<init>() line: 28	
  | 	PolicyManagerService.startService() line: 53	
  | 	PolicyManagerService(ServiceMBeanSupport).jbossInternalStart() line: 289	
  | 	PolicyManagerService(ServiceMBeanSupport).jbossInternalLifecycle(String) line: 245	
  | 	GeneratedMethodAccessor3.invoke(Object, Object[]) line: not available	
  | 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
  | 	Method.invoke(Object, Object...) line: 585	
  | 	ReflectedDispatcher.invoke(Invocation) line: 155	
  | 	Invocation.dispatch() line: 94	
  | 	Invocation.invoke() line: 86	
  | 	XMBean(AbstractMBeanInvoker).invoke(String, Object[], String[]) line: 264	
  | 	MBeanServerImpl.invoke(ObjectName, String, Object[], String[]) line: 659	
  | 	ServiceController$ServiceProxy.invoke(Object, Method, Object[]) line: 978	
  | 	$Proxy0.start() line: not available	
  | 	ServiceController.start(ObjectName) line: 417	
  | 	ServiceController.start(ObjectName) line: 435	
  | 	GeneratedMethodAccessor9.invoke(Object, Object[]) line: not available	
  | 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
  | 	Method.invoke(Object, Object...) line: 585	
  | 	ReflectedDispatcher.invoke(Invocation) line: 155	
  | 	Invocation.dispatch() line: 94	
  | 	Invocation.invoke() line: 86	
  | 	XMBean(AbstractMBeanInvoker).invoke(String, Object[], String[]) line: 264	
  | 	MBeanServerImpl.invoke(ObjectName, String, Object[], String[]) line: 659	
  | 	MBeanProxyExt.invoke(Object, Method, Object[]) line: 210	
  | 	$Proxy4.start(ObjectName) line: not available	
  | 	SARDeployer.start(DeploymentInfo) line: 302	
  | 	MainDeployer.start(DeploymentInfo) line: 1025	
  | 	MainDeployer.start(DeploymentInfo) line: 1015	
  | 	MainDeployer.deploy(DeploymentInfo) line: 819	
  | 	MainDeployer.deploy(URL) line: 782	
  | 	GeneratedMethodAccessor20.invoke(Object, Object[]) line: not available	
  | 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
  | 	Method.invoke(Object, Object...) line: 585	
  | 	ReflectedDispatcher.invoke(Invocation) line: 155	
  | 	Invocation.dispatch() line: 94	
  | 	NullInterceptor(AbstractInterceptor).invoke(Invocation) line: 133	
  | 	Invocation.invoke() line: 88	
  | 	ModelMBeanOperationInterceptor.invoke(Invocation) line: 142	
  | 	Invocation.invoke() line: 88	
  | 	XMBean(AbstractMBeanInvoker).invoke(String, Object[], String[]) line: 264	
  | 	MBeanServerImpl.invoke(ObjectName, String, Object[], String[]) line: 659	
  | 	MBeanProxyExt.invoke(Object, Method, Object[]) line: 210	
  | 	$Proxy9.deploy(URL) line: not available	
  | 	URLDeploymentScanner.deploy(URLDeploymentScanner$DeployedURL) line: 421	
  | 	URLDeploymentScanner.scan() line: 634	
  | 	AbstractDeploymentScanner$ScannerThread.doScan() line: 263	
  | 	URLDeploymentScanner(AbstractDeploymentScanner).startService() line: 336	
  | 	URLDeploymentScanner(ServiceMBeanSupport).jbossInternalStart() line: 289	
  | 	URLDeploymentScanner(ServiceMBeanSupport).jbossInternalLifecycle(String) line: 245	
  | 	GeneratedMethodAccessor3.invoke(Object, Object[]) line: not available	
  | 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
  | 	Method.invoke(Object, Object...) line: 585	
  | 	ReflectedDispatcher.invoke(Invocation) line: 155	
  | 	Invocation.dispatch() line: 94	
  | 	Invocation.invoke() line: 86	
  | 	XMBean(AbstractMBeanInvoker).invoke(String, Object[], String[]) line: 264	
  | 	MBeanServerImpl.invoke(ObjectName, String, Object[], String[]) line: 659	
  | 	ServiceController$ServiceProxy.invoke(Object, Method, Object[]) line: 978	
  | 	$Proxy0.start() line: not available	
  | 	ServiceController.start(ObjectName) line: 417	
  | 	GeneratedMethodAccessor9.invoke(Object, Object[]) line: not available	
  | 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
  | 	Method.invoke(Object, Object...) line: 585	
  | 	ReflectedDispatcher.invoke(Invocation) line: 155	
  | 	Invocation.dispatch() line: 94	
  | 	Invocation.invoke() line: 86	
  | 	XMBean(AbstractMBeanInvoker).invoke(String, Object[], String[]) line: 264	
  | 	MBeanServerImpl.invoke(ObjectName, String, Object[], String[]) line: 659	
  | 	MBeanProxyExt.invoke(Object, Method, Object[]) line: 210	
  | 	$Proxy4.start(ObjectName) line: not available	
  | 	SARDeployer.start(DeploymentInfo) line: 302	
  | 	MainDeployer.start(DeploymentInfo) line: 1025	
  | 	MainDeployer.deploy(DeploymentInfo) line: 819	
  | 	MainDeployer.deploy(URL) line: 782	
  | 	MainDeployer.deploy(String) line: 766	
  | 	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
  | 	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
  | 	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
  | 	Method.invoke(Object, Object...) line: 585	
  | 	ReflectedDispatcher.invoke(Invocation) line: 155	
  | 	Invocation.dispatch() line: 94	
  | 	NullInterceptor(AbstractInterceptor).invoke(Invocation) line: 133	
  | 	Invocation.invoke() line: 88	
  | 	ModelMBeanOperationInterceptor.invoke(Invocation) line: 142	
  | 	Invocation.invoke() line: 88	
  | 	XMBean(AbstractMBeanInvoker).invoke(String, Object[], String[]) line: 264	
  | 	MBeanServerImpl.invoke(ObjectName, String, Object[], String[]) line: 659	
  | 	MBeanProxyExt.invoke(Object, Method, Object[]) line: 210	
  | 	$Proxy5.deploy(String) line: not available	
  | 	ServerImpl.doStart() line: 482	
  | 	ServerImpl.start() line: 362	
  | 	Main.boot(String[]) line: 200	
  | 	Main$1.run() line: 508	
  | 	Thread.run() line: 595
  | 

"Thread 10"

  | Thread [Thread-10] (Suspended)	
  | 	ClassLoader.findBootstrapClass(String) line: not available [native method]	
  | 	Launcher$ExtClassLoader(ClassLoader).findBootstrapClass0(String) line: 891	
  | 	Launcher$ExtClassLoader(ClassLoader).loadClass(String, boolean) line: 301	
  | 	Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: 299	
  | 	Launcher$AppClassLoader.loadClass(String, boolean) line: 268	
  | 	NoAnnotationURLClassLoader(ClassLoader).loadClass(String, boolean) line: 299	
  | 	UnifiedClassLoader3(ClassLoader).loadClass(String, boolean) line: 299	
  | 	UnifiedClassLoader3(RepositoryClassLoader).loadClassLocally(String, boolean) line: 200	
  | 	ClassLoadingTask$ThreadTask.run() line: 131	
  | 	LoadMgr3.nextTask(Thread, ClassLoadingTask, UnifiedLoaderRepository3) line: 399	
  | 	UnifiedClassLoader3(RepositoryClassLoader).loadClassImpl(String, boolean, int) line: 527	
  | 	UnifiedClassLoader3(RepositoryClassLoader).loadClass(String, boolean) line: 415	
  | 	UnifiedClassLoader3(ClassLoader).loadClass(String) line: 251	
  | 	JBossClassPool.toClass(CtClass, ClassLoader, ProtectionDomain) line: 109	
  | 	CtNewNestedClass(CtClass).toClass(ClassLoader, ProtectionDomain) line: 1094	
  | 	TransformerCommon$ToClassAction$2.toClass(CtClass, ClassLoader, ProtectionDomain) line: 293	
  | 	TransformerCommon.compileOrLoadClass(CtClass, CtClass, boolean) line: 103	
  | 	TransformerCommon.compileOrLoadClass(CtClass, CtClass) line: 64	
  | 	FieldJoinPointGenerator$WriteBaseClassGenerator(FieldJoinPointGenerator$BaseClassGenerator).generate() line: 265	
  | 	FieldJoinPointGenerator.createWriteJoinpointBaseClass(GeneratedAdvisorInstrumentor, CtClass, CtField, String, int) line: 221	
  | 	GeneratedAdvisorFieldAccessTransformer.createWriteJoinPointClass(CtField, String, int) line: 184	
  | 	GeneratedAdvisorFieldAccessTransformer.addWriteJoinPoint(CtField, String, int) line: 172	
  | 	GeneratedAdvisorFieldAccessTransformer.addFieldWriteInfoFieldToGeneratedAdvisor(CtField, int) line: 161	
  | 	GeneratedAdvisorFieldAccessTransformer.doBuildFieldWrappers(CtClass, CtField, int, boolean, JoinpointClassification, JoinpointClassification) line: 77	
  | 	GeneratedAdvisorFieldAccessTransformer(FieldAccessTransformer).buildFieldWrappers(CtClass, ClassAdvisor, boolean) line: 103	
  | 	GeneratedAdvisorInstrumentor(Instrumentor).transform(CtClass, ClassAdvisor) line: 771	
  | 	GeneratedAdvisorInstrumentor.transform(CtClass, ClassAdvisor) line: 117	
  | 	SuperClassesFirstWeavingStrategy.instrumentClass(AspectManager, AOPClassPool, CtClass, boolean) line: 204	
  | 	SuperClassesFirstWeavingStrategy.translate(AspectManager, String, ClassLoader, byte[]) line: 70	
  | 	AspectManager.translate(String, ClassLoader, byte[]) line: 988	
  | 	AspectManager.transform(ClassLoader, String, Class, ProtectionDomain, byte[]) line: 934	
  | 	AOPTransformer.aspectTransform(String, ClassLoader, Class<?>, ProtectionDomain, byte[]) line: 85	
  | 	AOPTransformer.transform(ClassLoader, String, Class<?>, ProtectionDomain, byte[]) line: 73	
  | 	TransformerManager.transform(ClassLoader, String, Class, ProtectionDomain, byte[]) line: 122	
  | 	InstrumentationImpl.transform(ClassLoader, String, Class, ProtectionDomain, byte[]) line: 155	
  | 	ClassLoader.defineClass1(String, byte[], int, int, ProtectionDomain, String) line: not available [native method]	
  | 	UnifiedClassLoader3(ClassLoader).defineClass(String, byte[], int, int, ProtectionDomain) line: 620	
  | 	UnifiedClassLoader3(SecureClassLoader).defineClass(String, byte[], int, int, CodeSource) line: 124	
  | 	UnifiedClassLoader3(URLClassLoader).defineClass(String, Resource) line: 260	
  | 	URLClassLoader.access$100(URLClassLoader, String, Resource) line: 56	
  | 	URLClassLoader$1.run() line: 195	
  | 	AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method]	
  | 	UnifiedClassLoader3(URLClassLoader).findClass(String) line: 188	
  | 	UnifiedClassLoader3(RepositoryClassLoader).findClassLocally(String) line: 682	
  | 	UnifiedClassLoader3(RepositoryClassLoader).findClass(String) line: 662	
  | 	UnifiedClassLoader3(ClassLoader).loadClass(String, boolean) line: 306	
  | 	UnifiedClassLoader3(RepositoryClassLoader).loadClassLocally(String, boolean) line: 200	
  | 	ClassLoadingTask$ThreadTask.run() line: 131	
  | 	LoadMgr3.nextTask(Thread, ClassLoadingTask, UnifiedLoaderRepository3) line: 399	
  | 	UnifiedClassLoader3(RepositoryClassLoader).loadClassImpl(String, boolean, int) line: 527	
  | 	UnifiedClassLoader3(RepositoryClassLoader).loadClass(String, boolean) line: 415	
  | 	UnifiedClassLoader3(ClassLoader).loadClass(String) line: 251	
  | 	UnifiedClassLoader3(ClassLoader).loadClassInternal(String) line: 319	
  | 	Class<T>.getDeclaredFields0(boolean) line: not available [native method]	
  | 	Class<T>.privateGetDeclaredFields(boolean) line: 2259	
  | 	Class<T>.getDeclaredField(String) line: 1852	
  | 	FieldInfo.doGet(Class<?>, String) line: 181	
  | 	FieldInfo.access$000(FieldInfo, Class, String) line: 42	
  | 	FieldInfo$GetDeclaredFieldAction$2.get(FieldInfo, Class<?>, String) line: 232	
  | 	FieldInfo.<init>(Class<?>, int, String, long, Advisor, boolean) line: 67	
  | 	Domain$DomainAdvisor.initialiseFieldReads(Collection) line: not available	
  | 	GeneratedClassAdvisor$ClassAdvisorStrategy.initialise(Class<?>, AspectManager) line: 1267	
  | 	Domain$DomainAdvisor(GeneratedClassAdvisor).initialise(Class<?>, AspectManager) line: 141	
  | 	Domain$DomainAdvisor.initialise(AspectManager, boolean) line: not available	
  | 	Domain$DomainAdvisor.<init>() line: not available	
  | 	Domain.<clinit>() line: not available	
  | 	Class<T>.forName0(String, boolean, ClassLoader) line: not available [native method]	
  | 	Class<T>.forName(String) line: 164	
  | 	$Proxy79.<clinit>() line: not available	
  | 	NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]	
  | 	NativeConstructorAccessorImpl.newInstance(Object[]) line: 39	
  | 	DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27	
  | 	Constructor<T>.newInstance(Object...) line: 494	
  | 	Proxy.newProxyInstance(ClassLoader, Class<?>[], InvocationHandler) line: 588	
  | 	FabricDelegateProvider.getFabricDelegate() line: 49	
  | 	FabricDelegateProvider.<clinit>() line: 30	
  | 	ActiveDirectoryRefresh.refreshCache() line: 150	
  | 	ActiveDirectoryRefresh.run() line: 115	
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4161371#4161371

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4161371



More information about the jboss-user mailing list