blob: 14d74f22b82ec36b3d5c407ce91e9d4b4e42dc40 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.openejb.config.rules;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.jee.EnterpriseBean;
import org.apache.openejb.jee.EntityBean;
import org.apache.openejb.jee.MessageDrivenBean;
import org.apache.openejb.jee.PersistenceContextRef;
import org.apache.openejb.jee.PersistenceContextType;
import org.apache.openejb.jee.SessionBean;
/**
* @version $Rev: 1221356 $ $Date: 2011-12-20 09:21:03 -0800 (Tue, 20 Dec 2011) $
*/
public class CheckPersistenceRefs extends ValidationBase {
public void validate(EjbModule ejbModule) {
for (EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
if (bean instanceof SessionBean) {
SessionBean sessionBean = (SessionBean) bean;
if (sessionBean.getSessionType() == null) {
continue; // skipping since we don't know here what is the type
}
}
String beanType = getType(bean);
if (beanType.equals("Stateful")) {
continue; // skip statefuls and Comp ManagedBean
}
for (PersistenceContextRef ref : bean.getPersistenceContextRef()) {
if (isExtented(ref)) {
String refName = ref.getName();
String prefix = bean.getEjbClass() + "/";
if (refName.startsWith(prefix)) {
refName = refName.substring(prefix.length());
}
fail(bean, "persistenceContextExtented.nonStateful", refName, beanType);
}
}
}
}
private boolean isExtented(PersistenceContextRef ref) {
PersistenceContextType type = ref.getPersistenceContextType();
return type != null && type.equals(PersistenceContextType.EXTENDED);
}
private String getType(EnterpriseBean bean) {
if (bean instanceof SessionBean) {
SessionBean sessionBean = (SessionBean) bean;
switch(sessionBean.getSessionType()){
case STATEFUL: return "Stateful";
case STATELESS: return "Stateless";
case SINGLETON: return "Singleton";
case MANAGED: return "Managed";
default: throw new IllegalArgumentException("Uknown SessionBean type "+bean.getClass());
}
} else if (bean instanceof MessageDrivenBean) return "MessageDriven";
else if (bean instanceof EntityBean) return "EJB 2.1 Entity";
else throw new IllegalArgumentException("Uknown bean type "+bean.getClass());
}
}