- 
        1. Re: Returning Null From Non-Dependent Producer Methodpmuir Jan 29, 2010 9:58 PM (in response to jpleed3.john.leediii.minitmarkets.com)It's in the spec (see 3.3). The reason is we can't proxy null. Anyway, as in your other question, use a session scoped manager bean and the produce the value into dependent scope. 
- 
        2. Re: Returning Null From Non-Dependent Producer Methodjpleed3.john.leediii.minitmarkets.com Jan 29, 2010 10:13 PM (in response to jpleed3.john.leediii.minitmarkets.com)Thanks Pete, that's the direction I was going in. I'm caching the value in the bean and making the producer dependent; I think that will have the same performance. I hope the restriction gets added to the documentation. 
- 
        3. Re: Returning Null From Non-Dependent Producer Methodtaneraruk Nov 12, 2012 9:20 AM (in response to jpleed3.john.leediii.minitmarkets.com)I have the same problem, how did you solve it? Thanks for your help. 
- 
        4. Re: Returning Null From Non-Dependent Producer Methodluksa Nov 12, 2012 9:34 AM (in response to taneraruk)Taner, any of the following solutions should work: 1. make the producer return a null user object instead of null (see Null Object Pattern - http://en.wikipedia.org/wiki/Null_Object_pattern) 2. make the producer always return a non-null UserHolder, which contains user (which can be null) 3. make the producer @Dependent and cache the returned value in another normal-scoped bean (this is what John did) 
- 
        5. Re: Returning Null From Non-Dependent Producer Methodjpleed3 Nov 12, 2012 9:37 AM (in response to taneraruk)Wow... I haven't written any Java for over a year! Still, it's nice to get back into NetBeans for a little while. I followed Pete's suggestion and created a session scoped bean, that, among other things, had a producer method for the user. In my case, the user was an entity class: @Named("intranetContext") 
 @SessionScoped
 public class IntranetContextManager implements Serializable {
 @Inject @IntranetDatabase EntityManager em;private static final Logger logger = Logger.getLogger("com.kroger.thmm.producer.IntranetContextManager"); public IntranetContextManager() { 
 logger.fine("Creating instance of IntranetContextManager");
 }/* 
 * Methods for getting current user
 */private IntranetUser currentUser; 
 private static final Logger currentUserLogger = Logger.getLogger("com.foo.producer.IntranetContextManager.currentUser");@Produces @Named("currentUser") @Dependent 
 public IntranetUser getCurrentUser(HttpServletRequest request) {
 currentUserLogger.fine("ICM.getCurrentUser: entering");
 String remoteUser = request.getRemoteUser();
 if (remoteUser == null || remoteUser.isEmpty()) {
 currentUserLogger.finer("ICM.getCurrentUser: remote user is empty, clearing cached value");
 return (currentUser = null);
 }
 else if (currentUser == null) {
 currentUserLogger.finer("ICM.getCurrentUser: currentUser is null, getting value");
 currentUser = getCurrentUser(remoteUser);
 }
 else if (!(remoteUser.equalsIgnoreCase(currentUser.getEnterpriseId()) ||
 remoteUser.equalsIgnoreCase(currentUser.getUsername()))) {
 currentUserLogger.finer("ICM.getCurrentUser: cached currentUser does not match remote user, getting new value");
 currentUser = getCurrentUser(remoteUser);
 }
 else {
 currentUserLogger.finer("ICM.getCurrentUser: returning cached value");
 }
 return currentUser;
 }public IntranetUser getCurrentUser(String login) { 
 if (login != null && !login.isEmpty()) {
 //...
 }
 return null;
 }
 }In my site, there was anonymous access as well as authenticated, hence the reason I sometime needed to return null. Because the user could run anonymously, then log in at a later point, when I had the user injected I used an Instance instead: @Inject Instance<IntranetUser> currentUserSource; Hope this helps! 
 
     
     
     
    