14 Replies Latest reply: Jun 22, 2012 8:28 AM by Clément Lalanne RSS

    Application Framework: EntityHome and EntityQuery

    Karsten Wutzke Expert

      There has been a discussion some time ago:


      Seam Application Framework (EntityHome, QueryHome)


      I wonder what the status is today. Can anyone help? I'd really like to have an improved version of that framework. Especially EntityQuery could need better handling of WHERE conditions.


      So what's the status of the AF?


      Karsten

        • 1. Re: Application Framework: EntityHome and EntityQuery
          Jason Porter Master

          We're still debating it a bit. We actually need to get a sticky in place with the info. You can look through archives of the seam-dev mailing list for what we have talked about.

          • 2. Re: Application Framework: EntityHome and EntityQuery
            Bernard Labno Master

            Check this out
            http://artifactory.it-crowd.com.pl/libs-snapshot-local/pl/com/it-crowd/seam3-persistence-framework/1.0.0-SNAPSHOT/seam3-persistence-framework-1.0.0-SNAPSHOT.jar


            We've ported classes from seam2 and added some minor enhencements. In 2 weeks I will blog about new features and how to use EntityHome and EntityQuery as real DAO decoupled from view layer.


            • 4. Re: Application Framework: EntityHome and EntityQuery
              can kara Newbie
              Bernard, i can not use your library with seam 3 booking-example. Can i exclude some of your dependencies or all of them because they are used in booking example too. I need your help please!

              Dependencies, which seam booking-example uses:

                      <dependency>
                          <groupId>org.jboss.solder</groupId>
                          <artifactId>solder-tooling</artifactId>
                          <scope>provided</scope>
                          <optional>true</optional>
                      </dependency>

                      <dependency>
                          <groupId>org.jboss.solder</groupId>
                          <artifactId>solder-impl</artifactId>
                      </dependency>

                      <dependency>
                          <groupId>org.hibernate</groupId>
                          <artifactId>hibernate-jpamodelgen</artifactId>
                          <version>${jpamodelgen.version}</version>
                          <scope>provided</scope>
                          <!-- Excluded Hibernate-provided JPA API because it's provided by the Java EE 6 dependencies -->
                          <exclusions>
                              <exclusion>
                                  <groupId>org.hibernate.javax.persistence</groupId>
                                  <artifactId>hibernate-jpa-2.0-api</artifactId>
                              </exclusion>
                          </exclusions>
                      </dependency>
                 
                      <dependency>
                          <groupId>org.jboss.seam.faces</groupId>
                          <artifactId>seam-faces</artifactId>
                          <scope>compile</scope><!-- Temporary workaround for GLASSFISH-17184 -->
                      </dependency>
                     
                      <dependency>
                          <groupId>org.jboss.seam.international</groupId>
                          <artifactId>seam-international</artifactId>
                      </dependency>
                     
                      <dependency>
                         <groupId>org.jboss.seam.security</groupId>
                         <artifactId>seam-security</artifactId>
                         <scope>compile</scope>
                      </dependency>
                     
                      <dependency>
                         <groupId>org.jboss.seam.transaction</groupId>
                         <artifactId>seam-transaction</artifactId>
                         <scope>compile</scope>
                      </dependency>
                     
                      <dependency>
                          <groupId>org.picketlink.idm</groupId>
                          <artifactId>picketlink-idm-core</artifactId>
                          <version>1.5.0.Alpha02</version>
                      </dependency>
                     
                      <dependency>
                          <groupId>com.ocpsoft</groupId>
                          <artifactId>ocpsoft-pretty-time</artifactId>
                          <version>1.0.6</version>
                      </dependency>

                      <dependency>
                          <groupId>com.ocpsoft</groupId>
                          <artifactId>prettyfaces-jsf2</artifactId>
                          <version>3.2.0</version>
                      </dependency>
                     
                      <dependency>
                          <groupId>commons-digester</groupId>
                          <artifactId>commons-digester</artifactId>
                          <version>2.1</version>
                      </dependency>
                     
                      <!-- Bean Validation Implementation; provides portable constraints @NotEmpty, @Email and @Url -->
                      <!-- Hibernate Validator is the only JSR-303 implementation at the moment, so we can assume it's provided -->
                      <!-- TODO Move Hibernate Validator to app server specific sections -->
                      <dependency>
                          <groupId>org.hibernate.</groupId>
                          <artifactId>hibernate-validator</artifactId>
                          <version>4.1.0.Final</version>
                          <scope>provided</scope>
                      </dependency>

                      <dependency>
                          <groupId>joda-time</groupId>
                          <artifactId>joda-time</artifactId>
                      </dependency>

                      <dependency>
                          <groupId>org.jboss.spec</groupId>
                          <artifactId>jboss-javaee-6.0</artifactId>
                          <type>pom</type>
                          <scope>provided</scope>
                      </dependency>  
              • 5. Re: Application Framework: EntityHome and EntityQuery
                can kara Newbie
                I get this exception, if i deploy my applicaton:

                Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject private pl.com.it_crowd.seam.framework.converter.EntityConverter.entityManager]
                • 6. Re: Application Framework: EntityHome and EntityQuery
                  Bernard Labno Master

                  If you have in your app a different version of one of those artifacts then you may exclude them.


                  As to the exception you have no SMPC defined i guess.

                  • 7. Re: Application Framework: EntityHome and EntityQuery
                    can kara Newbie
                    Thank you for your reply.

                    I changed the annotation in class pl.com.it_crowd.seam.framework.converter.EntityConverter as follows:

                    from

                    @Inject
                    private EntityManager entityManager;

                    to

                    @PersistenceContext
                    private EntityManager entityManager;

                    I could deploy it.

                    But now i get this exception, if i want to persist something which extends EntityHome:

                    org.jboss.weld.exceptions.UnsatisfiedResolutionException: WELD-001308 Unable to resolve any beans for Types: [interface javax.persistence.EntityManager]; Bindings: [@javax.enterprise.inject.Default()]
                         at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:707)
                         at org.jboss.weld.bean.builtin.InstanceImpl.get(InstanceImpl.java:96)
                         at de.persistence.EntityHome.getEntityManager(EntityHome.java:55)
                         at de.persistence.EntityHome.joinTransaction(EntityHome.java:125)
                         at de.persistence.Home.getInstance(Home.java:124)


                    I use @PersistenceContext to inject an EntityManager, because the seam 3 booking-example uses it and because i have only one persistence unit.

                    Should i change it to SMPC and how?
                    • 8. Re: Application Framework: EntityHome and EntityQuery
                      Bernard Labno Master

                      You should inject the EntityManager as you do in other beans. It should work with @PersistenceContext if you use it.

                      • 9. Re: Application Framework: EntityHome and EntityQuery
                        Clément Lalanne Newbie

                        Hello Bernard and Can.

                        I'm trying to migrate a Seam 2 application to Seam 3 and I have the same issues as Can had. So I changed :

                         

                        @Inject

                        private EntityManager entityManager;

                         

                        to

                        @PersistenceContext

                        private EntityManager entityManager;

                         

                        in EntityConverter.java, and

                         

                        @Inject

                        protected Instance<EntityManager> entityManagerInstance;

                         

                        to

                        @PersistenceContext

                        protected Instance<EntityManager> entityManagerInstance;

                         

                        in EntityHome.java.

                         

                        When running my code I get the following exception :

                         

                        java.lang.IllegalArgumentException: Can not set javax.enterprise.inject.Instance field pl.com.it_crowd.seam.framework.EntityHome.entityManagerInstance to org.jboss.as.jpa.container.TransactionScopedEntityManager

                         

                        Here is my beanHome declaration :

                         

                        @Named("clientHome")   

                        @ConversationScoped

                        public class ClientHome extends EntityHome<Client> {

                        ...

                        }

                         

                        do you have any ideas?

                         

                        Thanks,

                         

                        Clément

                        • 10. Re: Application Framework: EntityHome and EntityQuery
                          Gurcan Karakoc Newbie

                          Hi Clément,

                           

                          if you use seam managed persistence context (SMPC) you don't need change the annotation to @PersistenceContext.

                           

                          http://seamframework.org/Seam3/PersistenceModule

                           

                          http://docs.jboss.org/seam/3/persistence/latest/reference/en-US/html_single/#d0e211

                          • 11. Re: Application Framework: EntityHome and EntityQuery
                            Clément Lalanne Newbie

                            Thanks for your fast answer Gurcan.

                            I tried to set a SMPC but I get the same exceptions as before.

                             

                            Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject private pl.com.it_crowd.seam.framework.converter.EntityConverter.entityManager]

                             

                            maybe I'm doing it wrong :

                             

                            public class EntityManagerProducer

                            {

                                @ExtensionManaged

                                @Produces

                                @PersistenceUnit(unitName = "oraclePU")

                                @Dependent

                                EntityManagerFactory producerField;

                             

                            }

                            Do I have to declare something in beans.xml or web.xml ?

                             

                            I tried many things according to topics on the forum, but none of them worked..

                             

                            what do you think ?

                             

                            Clément

                            • 12. Re: Application Framework: EntityHome and EntityQuery
                              Bernard Labno Master

                              No beans.xml nor web.xml modifications are required. Are you sure that you bundle seam-persistence-impl with your app?

                              • 13. Re: Application Framework: EntityHome and EntityQuery
                                Clément Lalanne Newbie

                                Thanks,

                                actually yes, seam-persistence-impl was missing...
                                Now I'm fighting against several exceptions at deployment. I think they are dependencies exceptions like this one :


                                org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [ELContext] with qualifiers [@Default] at injection point [[parameter 1] of [constructor] @Inject public org.jboss.solder.el.Expressions(ELContext, ExpressionFactory)]. Possible dependencies [[Producer Method [ELContext] with qualifiers [@Any @Default] declared as [[method] @Produces org.jboss.solder.el.ELContextProducer.createELContext()], Producer Method [ELContext] with qualifiers [@Any @Default] declared as [[method] @Produces org.jboss.seam.solder.el.ELContextProducer.createELContext()]]

                                 

                                ... I'm working on it

                                 

                                 

                                • 14. Re: Application Framework: EntityHome and EntityQuery
                                  Clément Lalanne Newbie

                                  I realized that my pom.xml was a terrible mess. After fixing it, everything is working fine !

                                   

                                  Thanks for your help !