KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > injection > EjbEncInjector


1 /*
2 * JBoss, Home of Professional Open Source
3 * Copyright 2005, JBoss Inc., and individual contributors as indicated
4 * by the @authors tag. See the copyright.txt in the distribution for a
5 * full listing of individual contributors.
6 *
7 * This is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as
9 * published by the Free Software Foundation; either version 2.1 of
10 * the License, or (at your option) any later version.
11 *
12 * This software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this software; if not, write to the Free
19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21 */

22 package org.jboss.injection;
23
24 import org.jboss.logging.Logger;
25 import org.jboss.naming.Util;
26
27 import javax.naming.NameNotFoundException JavaDoc;
28 import javax.naming.LinkRef JavaDoc;
29 import javax.naming.NamingException JavaDoc;
30
31 /**
32  * Comment
33  *
34  * @author <a HREF="mailto:bill@jboss.org">Bill Burke</a>
35  * @version $Revision: 58121 $
36  */

37 public class EjbEncInjector implements EncInjector
38 {
39    private static final Logger log = Logger.getLogger(EjbEncInjector.class);
40    
41    private String JavaDoc ejbLink;
42    private Class JavaDoc refClass;
43    private String JavaDoc jndiName;
44    private String JavaDoc error;
45    private String JavaDoc encName;
46
47    public EjbEncInjector(String JavaDoc name, String JavaDoc mappedName, String JavaDoc error)
48    {
49       this.jndiName = mappedName;
50       this.error = error;
51       this.encName = name;
52    }
53
54    public EjbEncInjector(String JavaDoc name, Class JavaDoc refClass, String JavaDoc ejbLink, String JavaDoc error)
55    {
56       this.refClass = refClass;
57       String JavaDoc refClassName = refClass == null ? "NULL" : refClass.getName();
58       this.ejbLink = ejbLink;
59       this.error = error;
60       this.encName = name;
61       if (refClass == null && ejbLink == null) throw new RuntimeException JavaDoc("cannot have null refClass and ejbLink for encName: " + name);
62    }
63
64
65    public void inject(InjectionContainer container)
66    {
67       if (jndiName == null || jndiName.equals(""))
68       {
69          if (ejbLink != null && !"".equals(ejbLink))
70          {
71             jndiName = container.getEjbJndiName(ejbLink, refClass);
72          }
73          else
74          {
75             try
76             {
77                if (refClass != null)
78                {
79                   jndiName = container.getEjbJndiName(refClass);
80                }
81                else
82                {
83                   throw new RuntimeException JavaDoc("searching for @EJB" + encName + " has null refClass and null ejbLink.");
84                }
85             }
86             catch (NameNotFoundException JavaDoc e)
87             {
88                throw new RuntimeException JavaDoc("could not resolve global JNDI name for " + error + " for container " + container.getIdentifier() + ": reference class: " + refClass.getName() + " ejbLink: " + ejbLink + " " + e.getMessage());
89             }
90          }
91       }
92       try
93       {
94          if (jndiName == null) throw new RuntimeException JavaDoc("Failed to populate ENC: " + encName + " global jndi name was null");
95          log.debug(" " + encName + " --> " + jndiName);
96          Util.rebind(container.getEnc(), encName, new LinkRef JavaDoc(jndiName));
97       }
98       catch (NamingException JavaDoc e)
99       {
100          throw new RuntimeException JavaDoc("could not bind enc name '" + encName + "' for " + error + " for container " + container.getIdentifier() + ": reference class: " + refClass.getName() + " ejbLink: " + ejbLink + " " + e.getMessage());
101       }
102    }
103 }
104
Popular Tags