Uploaded image for project: 'PicketLink'
  1. PicketLink
  2. PLINK-244

Query returning always empty for custom entities

XMLWordPrintable

    • Icon: Feature Request Feature Request
    • Resolution: Done
    • Icon: Major Major
    • PLINK_2.5.1.Final
    • PLINK_2.5.0.CR1, PLINK_2.5.0.CR2
    • None
    • None

      Good morning, we tried the approach suggested on https://issues.jboss.org/browse/PLINK-240.

      persistence.xml
      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   version="2.0"
                   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
          <persistence-unit name="picketlink-default"
                            transaction-type="JTA">
              <description>PicketLink Persistence Unit</description>
              <provider>org.hibernate.ejb.HibernatePersistence</provider>
              <jta-data-source>java:jboss/datasources/DefaultDS</jta-data-source>
      
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.AttributedTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.AccountTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.RoleTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.GroupTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.IdentityTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.RelationshipTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.RelationshipIdentityTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.PartitionTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.PasswordCredentialTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.DigestCredentialTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.X509CredentialTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.OTPCredentialTypeEntity</class&gt;
              <class&gt;org.picketlink.idm.jpa.model.sample.simple.AttributeTypeEntity</class&gt;
              
              <class&gt;org.jboss.aerogear.aerodoc.model.SaleAgent</class&gt;
              
              <exclude-unlisted-classes>true</exclude-unlisted-classes>
              <properties>
                  <property name="hibernate.hbm2ddl.auto" value="update"/>
                  <property name="hibernate.show_sql" value="true"/>
                  <property name="hibernate.transaction.flush_before_completion" value="true"/>
              </properties>
          </persistence-unit>
      </persistence>
      
      Resources.java
      public class Resources {
      
          @SuppressWarnings("unused")
          @PicketLink
          @PersistenceContext(unitName = "picketlink-default")
          @Produces
          private EntityManager picketLinkEntityManager;
      }
      
      SaleAgent.java
      import org.picketlink.idm.model.Attribute;
      import org.picketlink.idm.model.sample.Agent;
      
      import javax.persistence.Entity;
      import java.io.Serializable;
      
      @Entity
      public class SaleAgent extends User implements Serializable {
      
          @Id
          @GeneratedValue(strategy = GenerationType.AUTO)
          @Column(name = "id", updatable = false, nullable = false)
          private Long id;
      
          private String status;
      
          private String password;
      
          private String location;
      
          public void setId(Long id) {
              this.id = id;
          }
          public String getStatus() {
              return this.getAttribute("status").getValue().toString();
          }
      
          public void setStatus(final String status) {
              this.setAttribute(new Attribute("status", status));
          }
      
          public String getLocation() {
              return this.getAttribute("location").getValue().toString();
          }
      
          public void setLocation(final String location) {
              this.setAttribute(new Attribute("location", location));
          }
      
          public String getPassword() {
              return password;
          }
      
          public void setPassword(String password) {
              this.password = password;
          }
      }
      
      PicketLinkDefaultUsers.xml
      import org.picketlink.idm.IdentityManager;
      import org.picketlink.idm.PartitionManager;
      import org.picketlink.idm.RelationshipManager;
      import org.picketlink.idm.credential.Password;
      import org.picketlink.idm.model.sample.Agent;
      import org.picketlink.idm.model.sample.Role;
      import org.picketlink.idm.model.sample.SampleModel;
      import org.picketlink.idm.model.sample.User;
      
      import javax.annotation.PostConstruct;
      import javax.ejb.Singleton;
      import javax.ejb.Startup;
      import javax.inject.Inject;
      
      @Singleton
      @Startup
      public class PicketLinkDefaultUsers {
      
          @Inject
          private PartitionManager partitionManager;
      
          private IdentityManager identityManager;
          private RelationshipManager relationshipManager;
      
          @PostConstruct
          public void create() {
      
              this.identityManager = partitionManager.createIdentityManager();
              this.relationshipManager = partitionManager.createRelationshipManager();
      
              final String DEFAULT_USER = "john";
              User adminUser = findByUsername(DEFAULT_USER);
              //Will always be null even if it already exists into the database
              if (adminUser == null) {
                  SaleAgent john = new SaleAgent();
                  john.setLocation("New York");
                  john.setStatus("PTO");
                  john.setLoginName("john");
      
                  this.identityManager.add(john);
                  this.identityManager.updateCredential(john, new Password("123"));
      
                  Role admin = new Role("admin");
                  this.identityManager.add(admin);
      
                  Role simple = new Role("simple");
                  this.identityManager.add(simple);
                  grantRoles(john, admin);
                  grantRoles(john, simple);
      
              }
          }
      
          private void grantRoles(Agent agent, Role role) {
              SampleModel.grantRole(relationshipManager, agent, role);
          }
          
          private SaleAgent findByUsername(String username) {
              List<SaleAgent> list = identityManager.createIdentityQuery(SaleAgent.class)
                      .setParameter(SaleAgent.LOGIN_NAME, username).getResultList();
              return list.isEmpty() ? null : list.get(0);
          }
      }
      

      Looks like no matter what the query above will return empty.

            anil.saldhana Anil Saldanha (Inactive)
            boliveir_managed_kafka_security (inactive user) Bruno Oliveira Silva (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: