-
Feature Request
-
Resolution: Done
-
Major
-
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>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.