1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mortbay.jetty.plus.naming;
17
18 import javax.naming.Context;
19 import javax.naming.InitialContext;
20 import javax.naming.LinkRef;
21 import javax.naming.Name;
22 import javax.naming.NameParser;
23 import javax.naming.NamingException;
24
25 import org.mortbay.log.Log;
26 import org.mortbay.naming.NamingUtil;
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public abstract class NamingEntry
42 {
43 public static final String __contextName = "__";
44 protected String jndiName;
45 protected Object objectToBind;
46 protected String namingEntryNameString;
47 protected String objectNameString;
48
49
50
51
52
53 public NamingEntry (Object scope, String jndiName, Object object)
54 throws NamingException
55 {
56 this.jndiName = jndiName;
57 this.objectToBind = object;
58 save(scope);
59 }
60
61
62
63
64
65
66
67
68
69
70
71
72
73 public NamingEntry (String jndiName, Object object)
74 throws NamingException
75 {
76 this (null, jndiName, object);
77 }
78
79
80
81
82
83
84
85
86
87 public void bindToENC(String localName)
88 throws NamingException
89 {
90
91 InitialContext ic = new InitialContext();
92 Context env = (Context)ic.lookup("java:comp/env");
93 Log.debug("Binding java:comp/env/"+localName+" to "+objectNameString);
94 NamingUtil.bind(env, localName, new LinkRef(objectNameString));
95 }
96
97
98
99
100 public void unbindENC ()
101 {
102 try
103 {
104 InitialContext ic = new InitialContext();
105 Context env = (Context)ic.lookup("java:comp/env");
106 Log.debug("Unbinding java:comp/env/"+getJndiName());
107 env.unbind(getJndiName());
108 }
109 catch (NamingException e)
110 {
111 Log.warn(e);
112 }
113 }
114
115
116
117
118 public void release ()
119 {
120 try
121 {
122 InitialContext ic = new InitialContext();
123 ic.unbind(objectNameString);
124 ic.unbind(namingEntryNameString);
125 this.jndiName=null;
126 this.namingEntryNameString=null;
127 this.objectNameString=null;
128 this.objectToBind=null;
129 }
130 catch (NamingException e)
131 {
132 Log.warn(e);
133 }
134 }
135
136
137
138
139
140
141 public String getJndiName ()
142 {
143 return this.jndiName;
144 }
145
146
147
148
149
150 public Object getObjectToBind()
151 throws NamingException
152 {
153 return this.objectToBind;
154 }
155
156
157
158
159
160
161
162 public String getJndiNameInScope ()
163 {
164 return objectNameString;
165 }
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188 protected void save (Object scope)
189 throws NamingException
190 {
191 InitialContext ic = new InitialContext();
192 NameParser parser = ic.getNameParser("");
193 Name prefix = NamingEntryUtil.getNameForScope(scope);
194
195
196 Name namingEntryName = NamingEntryUtil.makeNamingEntryName(parser, getJndiName());
197 namingEntryName.addAll(0, prefix);
198 namingEntryNameString = namingEntryName.toString();
199 NamingUtil.bind(ic, namingEntryNameString, this);
200
201
202 Name objectName = parser.parse(getJndiName());
203 objectName.addAll(0, prefix);
204 objectNameString = objectName.toString();
205 NamingUtil.bind(ic, objectNameString, objectToBind);
206 }
207
208 }