Using JBoss AS 5.0.1 GA

I am trying to write custom deployer that will scan classes for annotation 
during POST_CLASSLOADING phase, save the found classes into metadata and then 
use that to perform some extra steps during REAL phase (similar to WS stuff but 
for QMF protocol).

I have a test enviroment with sample EJB3 app and a custom deployer. However 
when I start JBoss I get the following exception:



  | 10:59:20,213 ERROR [AbstractKernelController] Error installing to Real: 
name=vfszip:/home/gmostizk/java/jboss-5.0.1.GA/server/default/deploy/vdcServer-0.0.1-SNAPSHOT.ear/
 state=PreReal mode=Manual requiredState=Real
  | org.jboss.deployers.spi.DeploymentException: Error deploying 
vdcServer-0.0.1-SNAPSHOT.ear: Container 
jboss.j2ee:ear=vdcServer-0.0.1-SNAPSHOT.ear,jar=vdcServer-0.0.1-SNAPSHOT.ear,name=ConfigManagerBean,service=EJB3
 failed to resolve persistence unit null
  |     at org.jboss.ejb3.deployers.Ejb3Deployer.deploy(Ejb3Deployer.java:201)
  |     at org.jboss.ejb3.deployers.Ejb3Deployer.deploy(Ejb3Deployer.java:103)
  |     at 
org.jboss.deployers.vfs.spi.deployer.AbstractVFSRealDeployer.internalDeploy(AbstractVFSRealDeployer.java:45)
  |     at 
org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
  |     at 
org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
  |     at 
org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
  |     at 
org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
  |     at 
org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
  |     at 
org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
  |     at 
org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1598)
  |     at 
org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
  |     at 
org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1062)
  |     at 
org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
  |     at 
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
  |     at 
org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
  |     at 
org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
  |     at 
org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:698)
  |     at 
org.jboss.system.server.profileservice.ProfileServiceBootstrap.loadProfile(ProfileServiceBootstrap.java:304)
  |     at 
org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:205)
  |     at 
org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:405)
  |     at org.jboss.Main.boot(Main.java:209)
  |     at org.jboss.Main$1.run(Main.java:547)
  |     at java.lang.Thread.run(Thread.java:619)
  | Caused by: java.lang.IllegalArgumentException: Container 
jboss.j2ee:ear=vdcServer-0.0.1-SNAPSHOT.ear,jar=vdcServer-0.0.1-SNAPSHOT.ear,name=ConfigManagerBean,service=EJB3
 failed to resolve persistence unit null
  |     at 
org.jboss.injection.PersistenceUnitHandler.addPUDependency(PersistenceUnitHandler.java:135)
  |     at 
org.jboss.injection.PersistenceContextHandler.loadXml(PersistenceContextHandler.java:76)
  |     at org.jboss.ejb3.EJBContainer.processMetadata(EJBContainer.java:588)
  |     at 
org.jboss.ejb3.Ejb3Deployment.processEJBContainerMetadata(Ejb3Deployment.java:415)
  |     at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:523)
  |     at org.jboss.ejb3.deployers.Ejb3Deployer.deploy(Ejb3Deployer.java:194)
  |     ... 22 more
  | Caused by: java.lang.IllegalArgumentException: Can't find a persistence 
unit named 'null' in 
abstractvfsdeploymentcont...@5463591{vfszip:/home/gmostizk/java/jboss-5.0.1.GA/server/default/deploy/vdcServer-0.0.1-SNAPSHOT.ear/}
  |     at 
org.jboss.jpa.resolvers.BasePersistenceUnitDependencyResolver.resolvePersistenceUnitSupplier(BasePersistenceUnitDependencyResolver.java:107)
  |     at 
org.jboss.ejb3.Ejb3Deployment.resolvePersistenceUnitSupplier(Ejb3Deployment.java:720)
  |     at 
org.jboss.ejb3.EJBContainer.resolvePersistenceUnitSupplier(EJBContainer.java:1428)
  |     at 
org.jboss.injection.PersistenceUnitHandler.addPUDependency(PersistenceUnitHandler.java:130)
  |     ... 27 more
  | 

The exception thrown during deployment of the sample application.

My custom GenericAnnotationDeployer:

  | public class QmfTypeAnnotationDeployer extends GenericAnnotationDeployer {
  |     @Override
  |     protected void visitModule(DeploymentUnit deploymentUnit, Module 
module, GenericAnnotationResourceVisitor genericAnnotationResourceVisitor) {
  |         super.visitModule(deploymentUnit, module, 
genericAnnotationResourceVisitor);
  | 
  |         AnnotationEnvironment annotationEnvironment = 
genericAnnotationResourceVisitor.getEnv();
  |         Set<Element<QMFSeeAlso,Class<?>>> qmfSeeAlsoAnnotations = 
annotationEnvironment.classIsAnnotatedWith(QMFSeeAlso.class);
  | 
  |         QmfRegisteredClassesMetaData metaData = new 
QmfRegisteredClassesMetaData();
  | 
  |         // create metadata for each class we need to register
  |         for (Element<QMFSeeAlso, Class<?>> qmfSeeAlsoAnnotation : 
qmfSeeAlsoAnnotations) {
  | 
  |             // add the root class
  |             Class<?> annotatedClass = 
qmfSeeAlsoAnnotation.getAnnotatedElement();
  |             metaData.add(annotatedClass);
  | 
  |             // add all the children
  |             Class[] subClasses = 
qmfSeeAlsoAnnotation.getAnnotation().value();
  |             for (Class subClass : subClasses) {
  |                 metaData.add(subClass);
  |             }
  |         }
  | 
  |         // attach metadata to unit
  |         deploymentUnit.addAttachment(QmfRegisteredClassesMetaData.class, 
metaData);
  |     }
  | }
  | 

REAL phase deployer:

  |     private void registerQmfTypes(DeploymentUnit unit) {
  |         QmfRegisteredClassesMetaData metadata = 
unit.getAttachment(QmfRegisteredClassesMetaData.class);
  |         if(metadata==null) return;
  | 
  |         for (Class classToRegister : metadata.getAnnotatedClasses()) {
  |             log.info("Exposing "+classToRegister.getSimpleName()+" as 
QMFType");
  |             qmfAgent.registerClass(classToRegister);
  |         }
  |     }
  | 

jboss-beans.xml

  |     <bean name="QmfServiceDeployerEJB" 
class="org.jboss.qmf.core.deployers.QmfServiceDeployerEJB">
  |         <depends>EJB2xDeployer</depends>
  |         <depends>Ejb3Deployer</depends>
  | 
  |         <property name="qmfAgent">
  |             <inject bean="QmfAgent" />
  |         </property>
  |     </bean>
  | 
  | 
  |     <bean name="QmfTypeAnnotationDeployer" 
class="org.jboss.qmf.core.deployers.QmfTypeAnnotationDeployer"/>
  | 

If I comment out the last line from XML everything loads perfectly (without my 
custom work) so it seems there is some potential conflict between 
GenericAnnotationDeployer and normal EJB3 deployment process.

I am stuck on this so I would appreciate your help.

Thanks,
Gregory

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

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4228225
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to