The SLSB and entity is very simple. I've included the relevant SLSB interface
definition and entity code below. The specific issue here is our login() method returns a
Subject - and the Subject, although it has a Role relationship, we do not eagerly load it.
The caller to login() never needs to know the role relationship data, and because of
that, we increase performance by never asking the persistence layer to load that data
before returning the Subject. While this is a very specific example, this design paradigm
is all through our code. In fact, I have to believe this is a general problem everyone
will have (since this is a big reason behind using LAZY vs. EAGER loading).
Not sure how to annotate the entity, because would that mean we can either ALWAYS or NEVER
the data? But we know will we need it sometimes, but not always (i.e. sometimes a caller
will call a different method that returns a Subject and that Subject WILL have the role
information loaded and we thus WILL want that data go through the JAXB engine and returned
to the web client).
I think we need some way to customize the way JAXB processes the returned entity or we
need some annotation on a per-SLSB method. We are looking at @XMLJavaTypeAdapter as a
possible way to do something, but we aren't sure yet until we try it out.
@WebService
| @SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
| public interface SubjectManagerRemote {
| @WebMethod
| Subject login(String user, String password);
@Entity
| @Table(name = "ON_SUBJECT")
| public class Subject implements Externalizable {
| ...
| @ManyToMany
| @JoinTable(name="ON_SUBJECT_ROLE_MAP",
| joinColumns={@JoinColumn(name="SUBJECT_ID")},
| inverseJoinColumns={@JoinColumn(name="ROLE_ID")})
| private java.util.Set<Role> roles;
| ...
| public java.util.Set<Role> getRoles() {
| return this.roles;
| }
|
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4098807#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...