4 Replies Latest reply on Jan 18, 2012 12:59 AM by william stephen

    Exception invoking: startup on an @In component

    Y E Newbie


      In my seam application I have an entity bean, corresponding to a table in my DB.

      @Table(name = "MY_TABLE")
      public class MyTable implements java.io.Serializable 
           private String col1;
           private String col2;
           @In     ListHelper listHelper;

      ListHelper is a component that I need in this entity bean. It looks like this:

      public class ListHelper

      The problem I face is that when I deploy the application in JBOSS (4.2.3) I get the following exception
      during startup:

      13:42:52,766 ERROR [[/ABC]] Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener
      org.jboss.seam.InstantiationException: Could not instantiate Seam component: ABCEntityManagerFactory
           at org.jboss.seam.Component.newInstance(Component.java:2106)
           at org.jboss.seam.contexts.Contexts.startup(Contexts.java:304)
           at org.jboss.seam.contexts.Contexts.startup(Contexts.java:278)
           at org.jboss.seam.contexts.ServletLifecycle.endInitialization(ServletLifecycle.java:112)
           at org.jboss.seam.init.Initialization.init(Initialization.java:735)
      Caused by: java.lang.RuntimeException: exception invoking: startup
           at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:154)
           at org.jboss.seam.Component.callComponentMethod(Component.java:2219)
           at org.jboss.seam.Component.callCreateMethod(Component.java:2134)
           at org.jboss.seam.Component.newInstance(Component.java:2094)
           ... 140 more
      Caused by: java.lang.reflect.InvocationTargetException
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
           at java.lang.reflect.Method.invoke(Method.java:597)
           at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
           at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144)
           ... 143 more
      Caused by: java.lang.NoClassDefFoundError: Lcom/app/ListHelper;
           at java.lang.Class.getDeclaredFields0(Native Method)
           at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
           at java.lang.Class.getDeclaredFields(Class.java:1743)
           at org.hibernate.reflection.java.JavaXClass.getDeclaredFieldProperties(JavaXClass.java:76)
           at org.hibernate.reflection.java.JavaXClass.getDeclaredProperties(JavaXClass.java:100)
           at org.hibernate.validator.ClassValidator.initValidator(ClassValidator.java:219)
           at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:134)
           at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:318)
           at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)
           at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1233)
           at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:154)
           at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:869)
           at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:183)
           at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:240)
           at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120)
           at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
           at org.jboss.seam.persistence.EntityManagerFactory.createEntityManagerFactory(EntityManagerFactory.java:85)
           at org.jboss.seam.persistence.EntityManagerFactory.startup(EntityManagerFactory.java:50)
           ... 149 more
      Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: com.app.ListHelper
           at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:306)
           at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:521)
           at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
           at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
           at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
           ... 167 more
      13:42:52,766 ERROR [StandardContext] Error listenerStart
      13:42:52,766 ERROR [StandardContext] Context [/ABC] startup failed due to previous errors

      I'm not quite sure why I get this. I thought it might have something to do with the scope, but even changing  the scope of ListHelper to APPLICATION didn't help. So it's something else.

      Could someone help me with this? Is it actually possible to do this?


        • 1. Re: Exception invoking: startup on an @In component
          Nikos Paraskevopoulos Novice


          JBoss cannot find the class of the listHelper component. Where is this class? Where is the MyTable class? (My guess is that ListHelper is in the war while MyTable is in the ear.)

          Additionally you are injecting a Seam component into a non-seam class (MyTable doesn't have @Name, so it is not a Seam component...unless you have defined it in components.xml). This error will manifest after you solve the classpath problem.

          Last, it is most probably a logic/design error to have your model (the MyTable entity) depend on a service (the ListHelper component).

          • 2. Re: Exception invoking: startup on an @In component
            Arbi Sookazian Master

            It is highly suspect and unusual (and most likely not recommended) to inject anything into a JPA entity class...

            What does ListHelper do and why does the entity class need access to its API?  It's possible to have business methods (active record style) in your entity class like in the Booking entity from the Seam booking example:

               public BigDecimal getTotal()
                  return hotel.getPrice().multiply( new BigDecimal( getNights() ) );

            But there is no injection in that class.  Typically JPA entity classes are JavaBeans with Hibernate Validator annotations.  Very simple.  They may possibly implement an interface (like public class Car implements IVehicle) to implement polymorphic queries, or extend a class, but that's about it.

            What you could do is add a setter method in that entity class (setListHelper(ListHelper listHelper)) instead.

            • 3. Re: Exception invoking: startup on an @In component
              Y E Newbie

              I see.

              Thank you guys, I understand now.

              I was trying to avoid setting  Many-2-One relationship for some of my lookup tables, but apparently I can't do it this way.

              • 4. Re: Exception invoking: startup on an @In component
                william stephen Newbie

                You made several good points there. I did a search on the subject and found nearly all folks will consent with your blog.
                Classification Essay Help