// Path: people/src/main/java/com/example/people/entities/Person.java
// @Entity
// @Table(name = "PEOPLE_PERSON")
// @NamedQueries({
//     @NamedQuery(name = "selectAllPersons", query = "select o from Person o order by o.id"),
//     @NamedQuery(name = "selectAllPersonsForRole", query = "select o from Person o left join o.roles r where r.id=:roleId"),
//     @NamedQuery(name = "countPersonsForRole", query = "select count(o.id) from Person o left join o.roles r where r.id=:roleId")
// })
// public class Person implements Serializable {
// 
//     private static final long serialVersionUID = -2346897234623746L;
//     
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private int id;
// 
//     @Column(nullable = false)
//     private String firstName;
// 
//     @Column(nullable = false)
//     private String lastName;
// 
//     @ManyToMany
//     @JoinTable(name = "PEOPLE_PERSON_ROLE",
//             joinColumns = @JoinColumn(name = "PERSON_ID", referencedColumnName = "ID"),
//             inverseJoinColumns = @JoinColumn(name = "ROLE_ID", referencedColumnName = "ID"))
//     private Set<Role> roles;
// 
//     protected Person() {
//     }
// 
//     public Person(String firstName, String lastName) {
//         id = 0;
//         this.firstName = firstName;
//         this.lastName = lastName;
//         this.roles = new HashSet<>();
//     }
//     
//     public int getId() {
//         return id;
//     }
// 
//     public String getFirstName() {
//         return firstName;
//     }
// 
//     public void setFirstName(String firstName) {
//         this.firstName = firstName;
//     }
// 
//     public String getLastName() {
//         return lastName;
//     }
// 
//     public void setLastName(String lastName) {
//         this.lastName = lastName;
//     }
// 
//     public Set<Role> getRoles() {
//         return Collections.unmodifiableSet(roles);
//     }
// 
//     public void addRole(Role role) {
//         this.roles.add(role);
//     }
// 
//     public void clearRoles() {
//         roles.clear();
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(firstName)
//                 ^ Objects.hashCode(lastName)
//                 ^ Objects.hashCode(roles);
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == null || getClass() != obj.getClass())
//             return false;
// 
//         final Person other = (Person) obj;
//         return Objects.equals(firstName, other.firstName)
//                 && Objects.equals(lastName, other.lastName)
//                 && Objects.equals(roles, other.roles);
//     }
// 
//     public int[] getRoleIds() {
//         int[] result = new int[roles.size()];
//         int i = 0;
//         for (Role role : roles) {
//             result[i] = role.getId();
//             i++;
//         }
//         return result;
//     }
// 
// }
// 
// Path: people/src/main/java/com/example/people/entities/Role.java
// @Entity
// @Table(name = "PEOPLE_ROLE")
// @NamedQuery(name = "selectAllRoles", query = "select o from Role o order by o.id")
// public class Role implements Serializable {
// 
//     private static final long serialVersionUID = 238947623894234L;
//     
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private int id;
// 
//     @Column(nullable = false)
//     private String name;
//     
//     @Column(nullable = false)
//     private String description;
// 
//     protected Role() {
//     }
// 
//     public Role(String name, String description) {
//         id = 0;
//         this.name = name;
//         this.description = description;
//     }
//     
//     public int getId() {
//         return id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(name) ^ Objects.hashCode(description);
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == null || getClass() != obj.getClass())
//             return false;
// 
//         final Role other = (Role) obj;
//         return Objects.equals(this.name, other.name)
//                 && Objects.equals(this.description, other.description);
//     }
//     
// }


import com.example.people.entities.Person;
import com.example.people.entities.Role;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Remote;
package com.example.people.ejb;


@Remote
public interface PersonRoleManager extends Serializable {
    void createPersonWithRoles(String firstName, String lastName, int[] roleIds);
    Person getPerson(int id);
    List<Person> getAllPersons();
    void deletePerson(int id);
    void updatePerson(int id, String firstName, String lastName, int[] roleIds);

    void createRole(String name, String description);
    Role getRole(int id);
// Path: people/src/main/java/com/example/people/entities/Person.java
// @Entity
// @Table(name = "PEOPLE_PERSON")
// @NamedQueries({
//     @NamedQuery(name = "selectAllPersons", query = "select o from Person o order by o.id"),
//     @NamedQuery(name = "selectAllPersonsForRole", query = "select o from Person o left join o.roles r where r.id=:roleId"),
//     @NamedQuery(name = "countPersonsForRole", query = "select count(o.id) from Person o left join o.roles r where r.id=:roleId")
// })
// public class Person implements Serializable {
// 
//     private static final long serialVersionUID = -2346897234623746L;
//     
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private int id;
// 
//     @Column(nullable = false)
//     private String firstName;
// 
//     @Column(nullable = false)
//     private String lastName;
// 
//     @ManyToMany
//     @JoinTable(name = "PEOPLE_PERSON_ROLE",
//             joinColumns = @JoinColumn(name = "PERSON_ID", referencedColumnName = "ID"),
//             inverseJoinColumns = @JoinColumn(name = "ROLE_ID", referencedColumnName = "ID"))
//     private Set<Role> roles;
// 
//     protected Person() {
//     }
// 
//     public Person(String firstName, String lastName) {
//         id = 0;
//         this.firstName = firstName;
//         this.lastName = lastName;
//         this.roles = new HashSet<>();
//     }
//     
//     public int getId() {
//         return id;
//     }
// 
//     public String getFirstName() {
//         return firstName;
//     }
// 
//     public void setFirstName(String firstName) {
//         this.firstName = firstName;
//     }
// 
//     public String getLastName() {
//         return lastName;
//     }
// 
//     public void setLastName(String lastName) {
//         this.lastName = lastName;
//     }
// 
//     public Set<Role> getRoles() {
//         return Collections.unmodifiableSet(roles);
//     }
// 
//     public void addRole(Role role) {
//         this.roles.add(role);
//     }
// 
//     public void clearRoles() {
//         roles.clear();
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(firstName)
//                 ^ Objects.hashCode(lastName)
//                 ^ Objects.hashCode(roles);
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == null || getClass() != obj.getClass())
//             return false;
// 
//         final Person other = (Person) obj;
//         return Objects.equals(firstName, other.firstName)
//                 && Objects.equals(lastName, other.lastName)
//                 && Objects.equals(roles, other.roles);
//     }
// 
//     public int[] getRoleIds() {
//         int[] result = new int[roles.size()];
//         int i = 0;
//         for (Role role : roles) {
//             result[i] = role.getId();
//             i++;
//         }
//         return result;
//     }
// 
// }
// 
// Path: people/src/main/java/com/example/people/entities/Role.java
// @Entity
// @Table(name = "PEOPLE_ROLE")
// @NamedQuery(name = "selectAllRoles", query = "select o from Role o order by o.id")
// public class Role implements Serializable {
// 
//     private static final long serialVersionUID = 238947623894234L;
//     
//     @Id
//     @GeneratedValue(strategy = GenerationType.AUTO)
//     private int id;
// 
//     @Column(nullable = false)
//     private String name;
//     
//     @Column(nullable = false)
//     private String description;
// 
//     protected Role() {
//     }
// 
//     public Role(String name, String description) {
//         id = 0;
//         this.name = name;
//         this.description = description;
//     }
//     
//     public int getId() {
//         return id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hashCode(name) ^ Objects.hashCode(description);
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == null || getClass() != obj.getClass())
//             return false;
// 
//         final Role other = (Role) obj;
//         return Objects.equals(this.name, other.name)
//                 && Objects.equals(this.description, other.description);
//     }
//     
// }


// Path: people/src/main/java/com/example/people/ejb/PersonRoleManager.java
import com.example.people.entities.Person;
import com.example.people.entities.Role;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Remote;

package com.example.people.ejb;


@Remote
public interface PersonRoleManager extends Serializable {
    void createPersonWithRoles(String firstName, String lastName, int[] roleIds);
    Person getPerson(int id);
    List<Person> getAllPersons();
    void deletePerson(int id);
    void updatePerson(int id, String firstName, String lastName, int[] roleIds);

    void createRole(String name, String description);
    Role getRole(int id);
    List<Role> getAllRoles();