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 public String getJndiName ()
141 {
142 return this.jndiName;
143 }
144
145
146
147
148
149 public Object getObjectToBind()
150 throws NamingException
151 {
152 return this.objectToBind;
153 }
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178 protected void save (Object scope)
179 throws NamingException
180 {
181 InitialContext ic = new InitialContext();
182 NameParser parser = ic.getNameParser("");
183 Name prefix = NamingEntryUtil.getNameForScope(scope);
184
185
186 Name namingEntryName = NamingEntryUtil.makeNamingEntryName(parser, getJndiName());
187 namingEntryName.addAll(0, prefix);
188 namingEntryNameString = namingEntryName.toString();
189 NamingUtil.bind(ic, namingEntryNameString, this);
190
191
192 Name objectName = parser.parse(getJndiName());
193 objectName.addAll(0, prefix);
194 objectNameString = objectName.toString();
195 NamingUtil.bind(ic, objectNameString, objectToBind);
196 }
197
198 }