use of org.apache.openejb.jee.SessionBean in project tomee by apache.
the class MappedNameBuilderTest method testShouldCreateJndiEntryForBeanWithMappedName.
public void testShouldCreateJndiEntryForBeanWithMappedName() throws Exception {
AppModule appModule = new AppModule(new FakeClassLoader(), "");
final EjbJar ejbJar = new EjbJar();
final OpenejbJar openejbJar = new OpenejbJar();
final SessionBean sessionBean = new SessionBean("SessionBean", "org.superbiz.SessionBean", SessionType.STATELESS);
sessionBean.setMappedName("MappedName");
ejbJar.addEnterpriseBean(sessionBean);
final EjbDeployment ejbDeployment = new EjbDeployment("containerId", "deploymentId", "SessionBean");
openejbJar.addEjbDeployment(ejbDeployment);
appModule.getEjbModules().add(new EjbModule(ejbJar, openejbJar));
appModule = new MappedNameBuilder().deploy(appModule);
final EjbDeployment retrievedDeployment = appModule.getEjbModules().get(0).getOpenejbJar().getDeploymentsByEjbName().get("SessionBean");
final List<Jndi> jndiList = retrievedDeployment.getJndi();
assertNotNull(jndiList);
assertEquals(1, jndiList.size());
assertEquals("MappedName", jndiList.get(0).getName());
assertEquals("Remote", jndiList.get(0).getInterface());
}
use of org.apache.openejb.jee.SessionBean in project tomee by apache.
the class EjbJarInfoBuilder method buildInfo.
public EjbJarInfo buildInfo(final EjbModule jar) throws OpenEJBException {
deploymentIds.clear();
securityRoles.clear();
final Map<String, EjbDeployment> ejbds = jar.getOpenejbJar().getDeploymentsByEjbName();
final int beansDeployed = jar.getOpenejbJar().getEjbDeploymentCount();
final int beansInEjbJar = jar.getEjbJar().getEnterpriseBeans().length;
if (beansInEjbJar != beansDeployed) {
for (final EnterpriseBean bean : jar.getEjbJar().getEnterpriseBeans()) {
if (!ejbds.containsKey(bean.getEjbName())) {
ConfigUtils.logger.warning("conf.0018", bean.getEjbName(), jar.getJarLocation());
}
}
final String message = messages.format("conf.0008", jar.getJarLocation(), String.valueOf(beansInEjbJar), String.valueOf(beansDeployed));
logger.warning(message);
throw new OpenEJBException(message);
}
final Map<String, EnterpriseBeanInfo> infos = new HashMap<>();
final Map<String, EnterpriseBean> items = new HashMap<>();
final EjbJarInfo ejbJar = new EjbJarInfo();
ejbJar.path = jar.getJarLocation();
ejbJar.moduleUri = jar.getModuleUri();
ejbJar.moduleId = jar.getModuleId();
if (jar.getEjbJar() != null && jar.getEjbJar().getModuleName() != null) {
ejbJar.moduleName = jar.getEjbJar().getModuleName();
} else {
ejbJar.moduleName = jar.getModuleId();
}
ejbJar.watchedResources.addAll(jar.getWatchedResources());
ejbJar.properties.putAll(jar.getProperties());
ejbJar.properties.putAll(jar.getOpenejbJar().getProperties());
for (final EnterpriseBean bean : jar.getEjbJar().getEnterpriseBeans()) {
final EnterpriseBeanInfo beanInfo;
if (bean instanceof SessionBean) {
beanInfo = initSessionBean((SessionBean) bean, ejbJar, ejbds);
} else if (bean instanceof EntityBean) {
beanInfo = initEntityBean((EntityBean) bean, ejbds);
} else if (bean instanceof MessageDrivenBean) {
beanInfo = initMessageBean((MessageDrivenBean) bean, ejbds);
} else {
throw new OpenEJBException("Unknown bean type: " + bean.getClass().getName());
}
ejbJar.enterpriseBeans.add(beanInfo);
if (deploymentIds.contains(beanInfo.ejbDeploymentId)) {
final String message = messages.format("conf.0100", beanInfo.ejbDeploymentId, jar.getJarLocation(), beanInfo.ejbName);
logger.warning(message);
throw new OpenEJBException(message);
}
deploymentIds.add(beanInfo.ejbDeploymentId);
beanInfo.codebase = jar.getJarLocation();
infos.put(beanInfo.ejbName, beanInfo);
items.put(beanInfo.ejbName, bean);
if (bean.getSecurityIdentity() != null) {
beanInfo.runAs = bean.getSecurityIdentity().getRunAs();
final EjbDeployment deployment = ejbds.get(beanInfo.ejbName);
if (deployment != null) {
for (final RoleMapping mapping : deployment.getRoleMapping()) {
if (mapping.getRoleName().equals(beanInfo.runAs)) {
beanInfo.runAsUser = mapping.getPrincipalName();
break;
}
}
}
}
initJndiNames(ejbds, beanInfo);
}
if (jar.getEjbJar().getAssemblyDescriptor() != null) {
initInterceptors(jar, ejbJar);
initSecurityRoles(jar, ejbJar);
initMethodPermissions(jar, ejbds, ejbJar);
initExcludesList(jar, ejbds, ejbJar);
initMethodTransactions(jar, ejbds, ejbJar);
initMethodConcurrency(jar, ejbds, ejbJar);
initApplicationExceptions(jar, ejbJar);
for (final EnterpriseBeanInfo bean : ejbJar.enterpriseBeans) {
resolveRoleLinks(bean, items.get(bean.ejbName));
}
}
if (jar.getEjbJar().getRelationships() != null) {
initRelationships(jar, infos);
}
final Beans beans = jar.getBeans();
if (beans != null) {
ejbJar.beans = new BeansInfo();
ejbJar.beans.version = beans.getVersion();
ejbJar.beans.discoveryMode = beans.getBeanDiscoveryMode();
if (beans.getScan() != null) {
for (final Beans.Scan.Exclude exclude : beans.getScan().getExclude()) {
final ExclusionInfo exclusionInfo = new ExclusionInfo();
for (final Object config : exclude.getIfClassAvailableOrIfClassNotAvailableOrIfSystemProperty()) {
if (Beans.Scan.Exclude.IfAvailableClassCondition.class.isInstance(config)) {
exclusionInfo.availableClasses.add(Beans.Scan.Exclude.ClassCondition.class.cast(config).getName());
} else if (Beans.Scan.Exclude.IfNotAvailableClassCondition.class.isInstance(config)) {
exclusionInfo.notAvailableClasses.add(Beans.Scan.Exclude.ClassCondition.class.cast(config).getName());
} else if (Beans.Scan.Exclude.IfSystemProperty.class.isInstance(config)) {
final Beans.Scan.Exclude.IfSystemProperty systemProperty = Beans.Scan.Exclude.IfSystemProperty.class.cast(config);
if (systemProperty.getValue() == null) {
exclusionInfo.systemPropertiesPresence.add(systemProperty.getName());
} else {
exclusionInfo.systemProperties.put(systemProperty.getName(), systemProperty.getValue());
}
} else {
throw new IllegalArgumentException("Not supported: " + config);
}
}
final BeansInfo.ExclusionEntryInfo exclusionEntryInfo = new BeansInfo.ExclusionEntryInfo();
exclusionEntryInfo.name = exclude.getName();
exclusionEntryInfo.exclusion = exclusionInfo;
ejbJar.beans.excludes.add(exclusionEntryInfo);
}
}
ejbJar.beans.duplicatedAlternativeClasses.addAll(beans.getDuplicatedAlternatives().getClasses());
ejbJar.beans.duplicatedAlternativeStereotypes.addAll(beans.getDuplicatedAlternatives().getStereotypes());
ejbJar.beans.duplicatedInterceptors.addAll(beans.getDuplicatedInterceptors());
ejbJar.beans.duplicatedDecorators.addAll(beans.getDuplicatedDecorators());
ejbJar.beans.startupClasses.addAll(beans.getStartupBeans());
final Map<URL, String> discoveryModeByUrl = new HashMap<>();
final CompositeBeans composite;
final boolean isComposite = CompositeBeans.class.isInstance(beans);
if (isComposite) {
composite = CompositeBeans.class.cast(beans);
discoveryModeByUrl.putAll(composite.getDiscoveryByUrl());
} else {
composite = null;
URL key = DEFAULT_BEANS_XML_KEY;
if (beans.getUri() != null) {
try {
key = new URL(beans.getUri());
} catch (final MalformedURLException e) {
// no-op
}
}
discoveryModeByUrl.put(key, beans.getBeanDiscoveryMode());
}
for (final Map.Entry<URL, List<String>> next : beans.getManagedClasses().entrySet()) {
final URL key = next.getKey();
final BeansInfo.BDAInfo bdaInfo = new BeansInfo.BDAInfo();
bdaInfo.discoveryMode = discoveryModeByUrl.get(key);
merge(composite, key == null ? DEFAULT_BEANS_XML_KEY : key, bdaInfo, next.getValue());
ejbJar.beans.bdas.add(bdaInfo);
}
for (final Map.Entry<URL, List<String>> next : beans.getNotManagedClasses().entrySet()) {
final URL key = next.getKey();
final BeansInfo.BDAInfo bdaInfo = new BeansInfo.BDAInfo();
bdaInfo.discoveryMode = BeanArchiveService.BeanDiscoveryMode.ANNOTATED.name();
merge(composite, key == null ? DEFAULT_BEANS_XML_KEY : key, bdaInfo, next.getValue());
ejbJar.beans.noDescriptorBdas.add(bdaInfo);
}
// app composer case mainly,we should really not use it anywhere else
if (composite == null && ejbJar.beans.bdas.size() == 1) {
final BeansInfo.BDAInfo bda = ejbJar.beans.bdas.iterator().next();
bda.alternatives.addAll(beans.getAlternativeClasses());
bda.interceptors.addAll(beans.getInterceptors());
bda.decorators.addAll(beans.getDecorators());
bda.stereotypeAlternatives.addAll(beans.getAlternativeStereotypes());
}
}
return ejbJar;
}
use of org.apache.openejb.jee.SessionBean in project tomee by apache.
the class FinderFactory method ensureMinimalClasses.
public static Class<?>[] ensureMinimalClasses(final DeploymentModule module) {
final Collection<Class<?>> finderClasses = new HashSet<>();
if (EjbModule.class.isInstance(module)) {
final EjbModule ejb = EjbModule.class.cast(module);
final EnterpriseBean[] enterpriseBeans = ejb.getEjbJar().getEnterpriseBeans();
ClassLoader classLoader = ejb.getClassLoader();
if (classLoader == null) {
classLoader = Thread.currentThread().getContextClassLoader();
}
for (final EnterpriseBean bean : enterpriseBeans) {
final String name;
if (SessionBean.class.isInstance(bean)) {
final SessionBean sessionBean = SessionBean.class.cast(bean);
if (sessionBean.getProxy() == null) {
name = sessionBean.getEjbClass();
} else {
name = sessionBean.getProxy();
}
} else {
name = bean.getEjbClass();
}
try {
final Class<?> clazz = classLoader.loadClass(name);
finderClasses.addAll(ancestors(clazz));
} catch (final ClassNotFoundException e) {
// no-op
}
}
if (ejb.getWebservices() != null) {
for (final WebserviceDescription webservice : ejb.getWebservices().getWebserviceDescription()) {
for (final PortComponent port : webservice.getPortComponent()) {
if (port.getHandlerChains() == null) {
continue;
}
for (final HandlerChain handlerChain : port.getHandlerChains().getHandlerChain()) {
for (final Handler handler : handlerChain.getHandler()) {
if (handler.getHandlerClass() != null) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(handler.getHandlerClass())));
} catch (final ClassNotFoundException e) {
// no-op
}
}
}
}
}
}
}
for (final org.apache.openejb.jee.Interceptor interceptor : ejb.getEjbJar().getInterceptors()) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(interceptor.getInterceptorClass())));
} catch (final ClassNotFoundException e) {
// no-op
}
}
final Beans beans = ejb.getBeans();
if (beans != null && ejb.getEjbJar() != null) {
for (final List<String> managedClasses : beans.getManagedClasses().values()) {
for (final String name : managedClasses) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(name)));
} catch (final ClassNotFoundException e) {
// no-op
}
}
}
for (final String name : beans.getInterceptors()) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(name)));
} catch (final ClassNotFoundException e) {
// no-op
}
}
for (final String name : beans.getAlternativeClasses()) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(name)));
} catch (final ClassNotFoundException e) {
// no-op
}
}
for (final String name : beans.getDecorators()) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(name)));
} catch (final ClassNotFoundException e) {
// no-op
}
}
}
} else if (WebModule.class.isInstance(module)) {
final WebModule web = WebModule.class.cast(module);
final ClassLoader classLoader = web.getClassLoader();
if (web.getWebApp() != null) {
for (final Servlet s : web.getWebApp().getServlet()) {
final String servletClass = s.getServletClass();
if (servletClass == null) {
continue;
}
try {
finderClasses.addAll(ancestors(classLoader.loadClass(servletClass)));
} catch (final ClassNotFoundException e) {
// no-op
}
}
for (final String s : web.getRestClasses()) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(s)));
} catch (final ClassNotFoundException e) {
// no-op
}
}
for (final String s : web.getEjbWebServices()) {
try {
finderClasses.addAll(ancestors(classLoader.loadClass(s)));
} catch (final ClassNotFoundException e) {
// no-op
}
}
}
}
return finderClasses.toArray(new Class<?>[finderClasses.size()]);
}
use of org.apache.openejb.jee.SessionBean in project tomee by apache.
the class CheckCallbacks method validate.
public void validate(final EjbModule module) {
for (final EnterpriseBean bean : module.getEjbJar().getEnterpriseBeans()) {
Class ejbClass = null;
try {
ejbClass = loadClass(bean.getEjbClass());
} catch (final OpenEJBException e) {
continue;
}
if (bean instanceof Invokable) {
final Invokable invokable = (Invokable) bean;
for (final AroundInvoke aroundInvoke : invokable.getAroundInvoke()) {
checkAroundInvoke(ejbClass, aroundInvoke, bean.getEjbName());
}
for (final AroundTimeout aroundTimeout : invokable.getAroundTimeout()) {
checkAroundTimeout(ejbClass, aroundTimeout, bean.getEjbName());
}
}
for (final LifecycleCallback callback : bean.getPostConstruct()) {
checkCallback(ejbClass, "PostConstruct", callback, bean);
}
for (final LifecycleCallback callback : bean.getPreDestroy()) {
checkCallback(ejbClass, "PreDestroy", callback, bean);
}
final ClassFinder finder = new ClassFinder(ejbClass);
if (bean instanceof Session) {
final SessionBean session = (SessionBean) bean;
if (session.getSessionType() == SessionType.STATEFUL) {
for (final LifecycleCallback callback : session.getPrePassivate()) {
checkCallback(ejbClass, "PrePassivate", callback, bean);
}
for (final LifecycleCallback callback : session.getPostActivate()) {
checkCallback(ejbClass, "PostActivate", callback, bean);
}
checkSessionSynchronization(ejbClass, session);
for (final LifecycleCallback callback : session.getAfterBegin()) {
checkCallback(ejbClass, "AfterBegin", callback, bean);
}
for (final LifecycleCallback callback : session.getBeforeCompletion()) {
checkCallback(ejbClass, "BeforeCompletion", callback, bean);
}
for (final LifecycleCallback callback : session.getAfterCompletion()) {
checkCallback(ejbClass, "AfterCompletion", callback, bean, boolean.class);
}
for (final AroundTimeout aroundTimeout : session.getAroundTimeout()) {
ignoredMethodAnnotation("AroundTimeout", bean, bean.getEjbClass(), aroundTimeout.getMethodName(), SessionType.STATEFUL.getName());
}
for (final Timer timer : session.getTimer()) {
ignoredMethodAnnotation("Schedule/Schedules", bean, bean.getEjbClass(), timer.getTimeoutMethod().getMethodName(), SessionType.STATEFUL.getName());
}
} else {
for (final LifecycleCallback callback : session.getAfterBegin()) {
ignoredMethodAnnotation("AfterBegin", bean, bean.getEjbClass(), callback.getMethodName(), session.getSessionType().getName());
}
for (final LifecycleCallback callback : session.getBeforeCompletion()) {
ignoredMethodAnnotation("BeforeCompletion", bean, bean.getEjbClass(), callback.getMethodName(), session.getSessionType().getName());
}
for (final LifecycleCallback callback : session.getAfterCompletion()) {
ignoredMethodAnnotation("AfterCompletion", bean, bean.getEjbClass(), callback.getMethodName(), session.getSessionType().getName());
}
for (final LifecycleCallback callback : session.getPrePassivate()) {
ignoredMethodAnnotation("PrePassivate", bean, bean.getEjbClass(), callback.getMethodName(), session.getSessionType().getName());
}
for (final LifecycleCallback callback : session.getPostActivate()) {
ignoredMethodAnnotation("PostActivate", bean, bean.getEjbClass(), callback.getMethodName(), session.getSessionType().getName());
}
for (final RemoveMethod method : session.getRemoveMethod()) {
ignoredMethodAnnotation("Remove", bean, bean.getEjbClass(), method.getBeanMethod().getMethodName(), session.getSessionType().getName());
}
for (final InitMethod method : session.getInitMethod()) {
ignoredMethodAnnotation("Init", bean, bean.getEjbClass(), method.getBeanMethod().getMethodName(), session.getSessionType().getName());
}
}
} else {
for (final Method method : finder.findAnnotatedMethods(PrePassivate.class)) {
ignoredMethodAnnotation("PrePassivate", bean, bean.getEjbClass(), method.getName(), bean.getClass().getSimpleName());
}
for (final Method method : finder.findAnnotatedMethods(PostActivate.class)) {
ignoredMethodAnnotation("PostActivate", bean, bean.getEjbClass(), method.getName(), bean.getClass().getSimpleName());
}
for (final Method method : finder.findAnnotatedMethods(Remove.class)) {
ignoredMethodAnnotation("Remove", bean, bean.getEjbClass(), method.getName(), bean.getClass().getSimpleName());
}
for (final Method method : finder.findAnnotatedMethods(Init.class)) {
ignoredMethodAnnotation("Init", bean, bean.getEjbClass(), method.getName(), bean.getClass().getSimpleName());
}
for (final Method method : finder.findAnnotatedMethods(AfterBegin.class)) {
ignoredMethodAnnotation("AfterBegin", bean, bean.getEjbClass(), method.getName(), bean.getClass().getSimpleName());
}
for (final Method method : finder.findAnnotatedMethods(BeforeCompletion.class)) {
ignoredMethodAnnotation("BeforeCompletion", bean, bean.getEjbClass(), method.getName(), bean.getClass().getSimpleName());
}
for (final Method method : finder.findAnnotatedMethods(AfterCompletion.class)) {
ignoredMethodAnnotation("AfterCompletion", bean, bean.getEjbClass(), method.getName(), bean.getClass().getSimpleName());
}
}
// if (bean instanceof TimerConsumer) {
// TimerConsumer timerConsumer = (TimerConsumer) bean;
// checkTimeOut(ejbClass, timerConsumer.getTimeoutMethod(), bean);
//
// List<Method> timeoutMethods = finder.findAnnotatedMethods(Timeout.class);
// if (timeoutMethods.size() > 1) {
// fail(timerConsumer.getTimerConsumerName(), "timeout.tooManyMethods", timeoutMethods.size(), Join.join(",", timeoutMethods));
// }
//
// for(Timer timer : ((TimerConsumer) bean).getTimer()) {
// checkTimeOut(ejbClass, timer.getTimeoutMethod(), bean);
// }
// }
}
for (final Interceptor interceptor : module.getEjbJar().getInterceptors()) {
Class interceptorClass = null;
try {
interceptorClass = loadClass(interceptor.getInterceptorClass());
} catch (final OpenEJBException e) {
continue;
}
for (final AroundInvoke aroundInvoke : interceptor.getAroundInvoke()) {
checkAroundInvoke(interceptorClass, aroundInvoke, "Interceptor");
}
for (final AroundTimeout aroundTimeout : interceptor.getAroundTimeout()) {
checkAroundTimeout(interceptorClass, aroundTimeout, "Interceptor");
}
for (final LifecycleCallback callback : interceptor.getPostConstruct()) {
checkCallback(interceptorClass, "PostConstruct", callback, interceptor);
}
for (final LifecycleCallback callback : interceptor.getPreDestroy()) {
checkCallback(interceptorClass, "PreDestroy", callback, interceptor);
}
for (final LifecycleCallback callback : interceptor.getPrePassivate()) {
checkCallback(interceptorClass, "PrePassivate", callback, interceptor);
}
for (final LifecycleCallback callback : interceptor.getPostActivate()) {
checkCallback(interceptorClass, "PostActivate", callback, interceptor);
}
for (final LifecycleCallback callback : interceptor.getAfterBegin()) {
checkCallback(interceptorClass, "AfterBegin", callback, interceptor);
}
for (final LifecycleCallback callback : interceptor.getBeforeCompletion()) {
checkCallback(interceptorClass, "BeforeCompletion", callback, interceptor);
}
for (final LifecycleCallback callback : interceptor.getAfterCompletion()) {
checkCallback(interceptorClass, "AfterCompletion", callback, interceptor);
}
}
}
use of org.apache.openejb.jee.SessionBean in project tomee by apache.
the class AppInfoBuilderTest method testShouldIgnorePortInfoThatDontMatchTheEjb.
public void testShouldIgnorePortInfoThatDontMatchTheEjb() throws Exception {
final EjbJar ejbJar = new EjbJar();
final SessionBean sessionBean = new SessionBean();
sessionBean.setEjbName("MySessionBean");
sessionBean.setEjbClass("org.superbiz.MySessionBean");
sessionBean.setRemote("org.superbiz.MySession");
ejbJar.addEnterpriseBean(sessionBean);
final OpenejbJar openejbJar = new OpenejbJar();
final EjbDeployment ejbDeployment = new EjbDeployment();
openejbJar.addEjbDeployment(ejbDeployment);
ejbDeployment.setEjbName("MySessionBean");
final EjbModule ejbModule = new EjbModule(ejbJar, openejbJar);
final EjbJarInfo ejbJarInfo = new EjbJarInfo();
final PortInfo portInfo = new PortInfo();
portInfo.authMethod = "DIGEST";
portInfo.realmName = "";
portInfo.securityRealmName = "";
portInfo.transportGuarantee = "CONFIDENTIAL";
portInfo.serviceLink = "DifferentInfo";
final Properties props = new Properties();
props.put("wss4j.in.action", "Timestamp");
props.put("wss4j.out.action", "Timestamp");
portInfo.properties = props;
ejbJarInfo.portInfos.add(portInfo);
new AppInfoBuilder(null).configureWebserviceSecurity(ejbJarInfo, ejbModule);
final List<PortInfo> portInfoList = ejbJarInfo.portInfos;
assertEquals(1, portInfoList.size());
final PortInfo info = portInfoList.get(0);
assertEquals("", info.realmName);
assertEquals("", info.securityRealmName);
assertEquals("DIGEST", info.authMethod);
assertEquals("CONFIDENTIAL", info.transportGuarantee);
assertEquals("Timestamp", portInfo.properties.getProperty("wss4j.in.action"));
assertEquals("Timestamp", portInfo.properties.getProperty("wss4j.out.action"));
}
Aggregations