001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.geronimo.openejb;
019
020 import java.lang.reflect.Method;
021 import java.util.Set;
022
023 import javax.ejb.EJBHome;
024 import javax.ejb.EJBLocalHome;
025 import javax.ejb.EJBObject;
026 import javax.naming.Context;
027 import javax.security.auth.Subject;
028 import javax.security.auth.login.LoginException;
029
030 import org.apache.geronimo.connector.outbound.connectiontracking.TrackedConnectionAssociator;
031 import org.apache.geronimo.management.EJB;
032 import org.apache.geronimo.security.ContextManager;
033 import org.apache.geronimo.security.jacc.RunAsSource;
034 import org.apache.openejb.BeanType;
035 import org.apache.openejb.Container;
036 import org.apache.openejb.InterfaceType;
037 import org.apache.openejb.core.CoreDeploymentInfo;
038 import org.apache.openejb.core.ivm.EjbObjectProxyHandler;
039
040 public class EjbDeployment implements EJB {
041 private final String objectName;
042 private final String deploymentId;
043 private final String ejbName;
044
045 private final String homeInterfaceName;
046 private final String remoteInterfaceName;
047 private final String localHomeInterfaceName;
048 private final String localInterfaceName;
049 private final String serviceEndpointInterfaceName;
050 private final String beanClassName;
051 private final ClassLoader classLoader;
052
053 private final boolean securityEnabled;
054 private final Subject defaultSubject;
055 private final Subject runAs;
056
057 private final Context componentContext;
058
059 // connector stuff
060 private final Set unshareableResources;
061 private final Set applicationManagedSecurityResources;
062 private final TrackedConnectionAssociator trackedConnectionAssociator;
063
064 private final OpenEjbSystem openEjbSystem;
065
066 private CoreDeploymentInfo deploymentInfo;
067
068 private Context javaCompSubContext;
069
070 public EjbDeployment() throws LoginException {
071 this(null, null, null, null, null, null, null, null, null, null,
072 false, null, null, null, null, null, null, null, null);
073 }
074
075 public EjbDeployment(String objectName,
076 String deploymentId,
077 String ejbName,
078 String homeInterfaceName,
079 String remoteInterfaceName,
080 String localHomeInterfaceName,
081 String localInterfaceName,
082 String serviceEndpointInterfaceName,
083 String beanClassName,
084 ClassLoader classLoader,
085 boolean securityEnabled,
086 String defaultRole,
087 String runAsRole,
088 RunAsSource runAsSource,
089 Context componentContext,
090 Set unshareableResources,
091 Set applicationManagedSecurityResources,
092 TrackedConnectionAssociator trackedConnectionAssociator,
093 OpenEjbSystem openEjbSystem) throws LoginException {
094 this.objectName = objectName;
095 this.deploymentId = deploymentId;
096 this.ejbName = ejbName;
097 this.homeInterfaceName = homeInterfaceName;
098 this.remoteInterfaceName = remoteInterfaceName;
099 this.localHomeInterfaceName = localHomeInterfaceName;
100 this.localInterfaceName = localInterfaceName;
101 this.serviceEndpointInterfaceName = serviceEndpointInterfaceName;
102 this.beanClassName = beanClassName;
103 this.classLoader = classLoader;
104 this.securityEnabled = securityEnabled;
105 if (runAsSource == null) {
106 runAsSource = RunAsSource.NULL;
107 }
108 this.defaultSubject = defaultRole == null? runAsSource.getDefaultSubject(): runAsSource.getSubjectForRole(defaultRole);
109 this.runAs = runAsSource.getSubjectForRole(runAsRole);
110 this.componentContext = componentContext;
111 this.unshareableResources = unshareableResources;
112 this.applicationManagedSecurityResources = applicationManagedSecurityResources;
113 this.trackedConnectionAssociator = trackedConnectionAssociator;
114 this.openEjbSystem = openEjbSystem;
115 }
116
117 public CoreDeploymentInfo getDeploymentInfo() {
118 return deploymentInfo;
119 }
120
121 public String getDeploymentId() {
122 return deploymentId;
123 }
124
125 public String getEjbName() {
126 return ejbName;
127 }
128
129 public String getHomeInterfaceName() {
130 return homeInterfaceName;
131 }
132
133 public String getRemoteInterfaceName() {
134 return remoteInterfaceName;
135 }
136
137 public String getLocalHomeInterfaceName() {
138 return localHomeInterfaceName;
139 }
140
141 public String getLocalInterfaceName() {
142 return localInterfaceName;
143 }
144
145 public String getServiceEndpointInterfaceName() {
146 return serviceEndpointInterfaceName;
147 }
148
149 public String getBeanClassName() {
150 return beanClassName;
151 }
152
153 public ClassLoader getClassLoader() {
154 return classLoader;
155 }
156
157 public boolean isSecurityEnabled() {
158 return securityEnabled;
159 }
160
161 public Subject getDefaultSubject() {
162 return defaultSubject;
163 }
164
165 public Subject getRunAs() {
166 return runAs;
167 }
168
169 public Context getComponentContext() {
170 return javaCompSubContext;
171 }
172
173 public Set getUnshareableResources() {
174 return unshareableResources;
175 }
176
177 public Set getApplicationManagedSecurityResources() {
178 return applicationManagedSecurityResources;
179 }
180
181 public TrackedConnectionAssociator getTrackedConnectionAssociator() {
182 return trackedConnectionAssociator;
183 }
184
185 public EJBHome getEJBHome() {
186 return deploymentInfo.getEJBHome();
187 }
188
189 public EJBLocalHome getEJBLocalHome() {
190 return deploymentInfo.getEJBLocalHome();
191 }
192
193 public Object getBusinessLocalHome() {
194 return deploymentInfo.getBusinessLocalHome();
195 }
196
197 public Object getBusinessRemoteHome() {
198 return deploymentInfo.getBusinessRemoteHome();
199 }
200
201 public EJBObject getEjbObject(Object primaryKey) {
202 return (EJBObject) EjbObjectProxyHandler.createProxy(deploymentInfo, primaryKey, InterfaceType.EJB_HOME);
203 }
204
205 public Class getHomeInterface() {
206 return deploymentInfo.getHomeInterface();
207 }
208
209 public Class getRemoteInterface() {
210 return deploymentInfo.getRemoteInterface();
211 }
212
213 public Class getLocalHomeInterface() {
214 return deploymentInfo.getLocalHomeInterface();
215 }
216
217 public Class getLocalInterface() {
218 return deploymentInfo.getLocalInterface();
219 }
220
221 public Class getBeanClass() {
222 return deploymentInfo.getBeanClass();
223 }
224
225 public Class getBusinessLocalInterface() {
226 return deploymentInfo.getBusinessLocalInterface();
227 }
228
229 public Class getBusinessRemoteInterface() {
230 return deploymentInfo.getBusinessRemoteInterface();
231 }
232
233 public Class getMdbInterface() {
234 return deploymentInfo.getMdbInterface();
235 }
236
237 public Class getServiceEndpointInterface() {
238 return deploymentInfo.getServiceEndpointInterface();
239 }
240
241 public BeanType getComponentType() {
242 return deploymentInfo.getComponentType();
243 }
244
245 public Container getContainer() {
246 return deploymentInfo.getContainer();
247 }
248
249 public boolean isBeanManagedTransaction() {
250 return deploymentInfo.isBeanManagedTransaction();
251 }
252
253 public byte getTransactionAttribute(Method method) {
254 return deploymentInfo.getTransactionAttribute(method);
255 }
256
257 public String getObjectName() {
258 return objectName;
259 }
260
261 public boolean isStateManageable() {
262 return true;
263 }
264
265 public boolean isStatisticsProvider() {
266 return false;
267 }
268
269 public boolean isEventProvider() {
270 return true;
271 }
272
273 protected void start() throws Exception {
274 deploymentInfo = (CoreDeploymentInfo) openEjbSystem.getDeploymentInfo(deploymentId);
275 if (deploymentInfo == null) {
276 throw new IllegalStateException("Ejb does not exist " + deploymentId);
277 }
278
279 javaCompSubContext = (Context) deploymentInfo.getJndiEnc().lookup("java:comp");
280 if (componentContext != null) {
281 javaCompSubContext.bind("geronimo", componentContext);
282 }
283 deploymentInfo.set(EjbDeployment.class, this);
284 }
285
286 protected void stop() {
287 if (deploymentInfo != null) {
288 deploymentInfo.set(EjbDeployment.class, null);
289 deploymentInfo = null;
290 }
291 }
292 }