(no commit message)
[utils] / support / cdi / src / main / java / org / wamblee / cdi / BeanManagerLookup.java
1 /*
2  * Copyright 2005-2010 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.cdi;
17
18 import java.util.logging.Logger;
19
20 import javax.enterprise.inject.spi.BeanManager;
21 import javax.naming.InitialContext;
22 import javax.naming.NamingException;
23
24 /**
25  * Class that encapsulates beanmanager lookup in a way so that the lookup can be
26  * explicitly overriden (for instance for unit test).
27  * 
28  * In case no bean manager is found the beanmanager is set to null and the
29  * problem is logged.
30  * 
31  * This class does caching of the obtained reference to the bean manager. As a
32  * result, it is necessary to call {@link #setBeanManager(BeanManager)} in the
33  * setup phase of unit tests to make sure that the lookup is done again.
34  * 
35  * @author Erik Brakkee
36  */
37 public class BeanManagerLookup {
38
39     private static final Logger LOGGER = Logger
40         .getLogger(BeanManagerLookup.class.getName());
41
42     public static final String BEAN_MANAGER_JNDI = "java:comp/BeanManager";
43     private static BeanManager BEAN_MANAGER = null;
44
45     /**
46      * Sets the bean manager (mainly for testability).
47      * 
48      * @param aMgr
49      *            Bean manager.
50      */
51     public static void setBeanManager(BeanManager aMgr) {
52         BEAN_MANAGER = aMgr;
53     }
54
55     /**
56      * Looks up the bean manager if not already cached and returns it.
57      * 
58      * @return Bean manager.
59      */
60     public static BeanManager lookup() {
61         if (BEAN_MANAGER == null) {
62             try {
63                 InitialContext ctx = new InitialContext();
64                 BEAN_MANAGER = (BeanManager) ctx.lookup(BEAN_MANAGER_JNDI);
65                 LOGGER.info("Beanmanager successfully located");
66             } catch (NamingException e) {
67                 LOGGER.warning("No beanmanager was found, using null");
68                 BEAN_MANAGER = null;
69             }
70         }
71         return BEAN_MANAGER;
72     }
73 }