Issue Type: Feature Request Feature Request
Affects Versions: PLINK_2.5.0.CR2, PLINK_2.5.0.CR1
Assignee: Anil Saldhana
Created: 21/Aug/13 4:02 AM
Description:

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>org.picketlink.idm.jpa.model.sample.simple.AttributedTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.AccountTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.RoleTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.GroupTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.IdentityTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.RelationshipTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.RelationshipIdentityTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.PartitionTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.PasswordCredentialTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.DigestCredentialTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.X509CredentialTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.OTPCredentialTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.AttributeTypeEntity</class>
        
        <class>org.jboss.aerogear.aerodoc.model.SaleAgent</class>
        
        <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.

Fix Versions: PLINK_2.5.0.CR3
Project: PicketLink
Priority: Major Major
Reporter: Bruno Oliveira
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira