<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: JBoss Seam: Coming to an App Server Near You</title>
	<atom:link href="http://www.michaelyuan.com/blog/2006/12/13/jboss-seam-coming-to-an-app-server-near-you/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.michaelyuan.com/blog/2006/12/13/jboss-seam-coming-to-an-app-server-near-you/</link>
	<description>"Science is a wonderful thing if one does not have to earn one's living at it" -- Albert Einstein</description>
	<pubDate>Wed, 07 Jan 2009 04:44:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: Nadenka Lara</title>
		<link>http://www.michaelyuan.com/blog/2006/12/13/jboss-seam-coming-to-an-app-server-near-you/#comment-64415</link>
		<dc:creator>Nadenka Lara</dc:creator>
		<pubDate>Tue, 20 May 2008 13:57:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.michaelyuan.com/blog/2006/12/13/jboss-seam-coming-to-an-app-server-near-you/#comment-64415</guid>
		<description>Hello Michael,

first of all... i love seam! i have a problem, sadly, i got some troubles. 

i have created a project (ear) with the seam eclipse plugin. I got 4 projects test, ejb, war and the aer containing references to the ejb and war modules. everything ok... after that i created an ejb project where i want to hoard the model/entities, added a reference to this project in the ear application.xml and referenced this project from the ejb project.
The problem is, that seam does not recognize the managed entity beans so i must use things like that:
&lt;code&gt;        

@Name("authenticator")
public @Stateless class AuthenticatorBean implements Authenticator {
    @Logger Log log;
    
    @In Identity identity;
    
    @EJB UserFacade userFacade;
   
    public boolean authenticate() {
        log.info("authenticating #0", identity.getUsername());
        //write your authentication logic here,
        //return true if the authentication was
        //successful, false otherwise
        //TODO: Login Module entwickeln (Factory-Pattern) damit man unterschiedliche Login Arten unterstützen kann
        User user = userFacade.findUserByCredentials(identity.getUsername(), identity.getPassword());              
        
        if(user == null) {
        	return false;
        } 
        
// (needed but don't want to use this)       //Contexts.getSessionContext().set("user", user);
        
        for(Membership m: user.getMemberships()) {
        		identity.addRole(m.getRole().getRolename());
        }                       
        return true;
    }
}
&lt;/code&gt;

The Entity:
&lt;code&gt;
@Entity
@Table(name="USER")
@Name("user")
public class User extends AbstractOrganizationUnit {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@NotNull
	@Column(name="USR_NAME")
	@Min(8)
	private String username;
	@NotNull
	@Column(name="USR_PWD")
	@Min(8)
	private String password;
	@CollectionOfElements
	@JoinTable(name="USER_MEMBERSHIP",
			joinColumns=@JoinColumn(name="USR_ID")
		)
	private Set memberships;
	
	/**
	 * 
	 */
	public User() {}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Set getMemberships() {
		return memberships;
	}

	public void setMemberships(Set memberships) {
		this.memberships = memberships;
	}
	
	/**
	 * @param membership
	 * @return
	 */
	public boolean addMembership(Membership membership) {
		return this.getMemberships().add(membership);
	}
	
	/**
	 * @param membership
	 * @return
	 */
	public boolean removeMembership(Membership membership) {
		return this.getMemberships().remove(membership);
	}

}
&lt;/code&gt;

The Facede/Action Bean:
&lt;code&gt;
@Name("userFacade")
public @Stateless class UserFacadeBean implements UserFacade {

	@PersistenceContext
	private EntityManager em;
		
	@Logger
	private Log log;
		
	public User findUserByCredentials(String username, String password) {
		log.debug("findUserByCredentials() called!");
		try {
		return (User)em.createQuery("from User where username=:username and password=:password")
					.setParameter("username", username)
					.setParameter("password", password)
					.getSingleResult();
		} catch (RuntimeException e) {
			log.error("#0 ocurred.", e.getClass().getSimpleName());
			return null;
		}
	}
}
&lt;/code&gt;

The other beans in the projects created by the plugin are recognized and also showed in the "Seam Components View".

Could you help me?

Thanx in advance,

nadenka</description>
		<content:encoded><![CDATA[<p>Hello Michael,</p>
<p>first of all&#8230; i love seam! i have a problem, sadly, i got some troubles. </p>
<p>i have created a project (ear) with the seam eclipse plugin. I got 4 projects test, ejb, war and the aer containing references to the ejb and war modules. everything ok&#8230; after that i created an ejb project where i want to hoard the model/entities, added a reference to this project in the ear application.xml and referenced this project from the ejb project.<br />
The problem is, that seam does not recognize the managed entity beans so i must use things like that:<br />
<code>        </p>
<p>@Name("authenticator")<br />
public @Stateless class AuthenticatorBean implements Authenticator {<br />
    @Logger Log log;</p>
<p>    @In Identity identity;</p>
<p>    @EJB UserFacade userFacade;</p>
<p>    public boolean authenticate() {<br />
        log.info("authenticating #0", identity.getUsername());<br />
        //write your authentication logic here,<br />
        //return true if the authentication was<br />
        //successful, false otherwise<br />
        //TODO: Login Module entwickeln (Factory-Pattern) damit man unterschiedliche Login Arten unterstützen kann<br />
        User user = userFacade.findUserByCredentials(identity.getUsername(), identity.getPassword());              </p>
<p>        if(user == null) {<br />
        	return false;<br />
        } </p>
<p>// (needed but don't want to use this)       //Contexts.getSessionContext().set("user", user);</p>
<p>        for(Membership m: user.getMemberships()) {<br />
        		identity.addRole(m.getRole().getRolename());<br />
        }<br />
        return true;<br />
    }<br />
}<br />
</code></p>
<p>The Entity:<br />
<code><br />
@Entity<br />
@Table(name="USER")<br />
@Name("user")<br />
public class User extends AbstractOrganizationUnit {<br />
	/**<br />
	 *<br />
	 */<br />
	private static final long serialVersionUID = 1L;<br />
	@NotNull<br />
	@Column(name="USR_NAME")<br />
	@Min(8)<br />
	private String username;<br />
	@NotNull<br />
	@Column(name="USR_PWD")<br />
	@Min(8)<br />
	private String password;<br />
	@CollectionOfElements<br />
	@JoinTable(name="USER_MEMBERSHIP",<br />
			joinColumns=@JoinColumn(name="USR_ID")<br />
		)<br />
	private Set memberships;</p>
<p>	/**<br />
	 *<br />
	 */<br />
	public User() {}</p>
<p>	public String getUsername() {<br />
		return username;<br />
	}</p>
<p>	public void setUsername(String username) {<br />
		this.username = username;<br />
	}</p>
<p>	public String getPassword() {<br />
		return password;<br />
	}</p>
<p>	public void setPassword(String password) {<br />
		this.password = password;<br />
	}</p>
<p>	public Set getMemberships() {<br />
		return memberships;<br />
	}</p>
<p>	public void setMemberships(Set memberships) {<br />
		this.memberships = memberships;<br />
	}</p>
<p>	/**<br />
	 * @param membership<br />
	 * @return<br />
	 */<br />
	public boolean addMembership(Membership membership) {<br />
		return this.getMemberships().add(membership);<br />
	}</p>
<p>	/**<br />
	 * @param membership<br />
	 * @return<br />
	 */<br />
	public boolean removeMembership(Membership membership) {<br />
		return this.getMemberships().remove(membership);<br />
	}</p>
<p>}<br />
</code></p>
<p>The Facede/Action Bean:<br />
<code><br />
@Name("userFacade")<br />
public @Stateless class UserFacadeBean implements UserFacade {</p>
<p>	@PersistenceContext<br />
	private EntityManager em;</p>
<p>	@Logger<br />
	private Log log;</p>
<p>	public User findUserByCredentials(String username, String password) {<br />
		log.debug("findUserByCredentials() called!");<br />
		try {<br />
		return (User)em.createQuery("from User where username=:username and password=:password")<br />
					.setParameter("username", username)<br />
					.setParameter("password", password)<br />
					.getSingleResult();<br />
		} catch (RuntimeException e) {<br />
			log.error("#0 ocurred.", e.getClass().getSimpleName());<br />
			return null;<br />
		}<br />
	}<br />
}<br />
</code></p>
<p>The other beans in the projects created by the plugin are recognized and also showed in the &#8220;Seam Components View&#8221;.</p>
<p>Could you help me?</p>
<p>Thanx in advance,</p>
<p>nadenka</p>
]]></content:encoded>
	</item>
</channel>
</rss>
