/** * 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.OpenEJBException; import org.apache.openejb.jee.EjbJar; import org.apache.openejb.jee.PersistenceType; import org.apache.openejb.jee.StatefulBean; import org.apache.openejb.jee.StatelessBean; import org.junit.runner.RunWith; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.EJBLocalHome; import javax.ejb.EJBLocalObject; import javax.ejb.EntityBean; import javax.ejb.EntityContext; import javax.ejb.FinderException; import javax.ejb.LocalHome; import javax.ejb.RemoteHome; import javax.ejb.RemoveException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import java.rmi.RemoteException; @RunWith(ValidationRunner.class) public class CheckNoCreateMethodsTest { @Keys({@Key(value = "no.home.create", count = 4), @Key(value = "unused.ejb.create", count = 2, type = KeyType.WARNING), @Key(value = "unused.ejbPostCreate", type = KeyType.WARNING), @Key("entity.no.ejb.create"), @Key(value = "session.no.ejb.create", count = 2)}) public EjbJar noCreateMethod() throws OpenEJBException { System.setProperty("openejb.validation.output.level", "VERBOSE"); final EjbJar ejbJar = new EjbJar(); final StatelessBean stateless = new StatelessBean(FooStateless.class); stateless.setHomeAndRemote(FooStatelessHome.class, FooStatelessRemote.class); stateless.setHomeAndLocal(FooStatelessLocalHome.class, FooStatelessLocal.class); ejbJar.addEnterpriseBean(stateless); final StatefulBean stateful = new StatefulBean(FooStateful.class); stateful.setHomeAndRemote(FooStatefulHome.class, FooStatefulRemote.class); stateful.setHomeAndLocal(FooStatefulLocalHome.class, FooStatefulLocal.class); ejbJar.addEnterpriseBean(stateful); final org.apache.openejb.jee.EntityBean bean = new org.apache.openejb.jee.EntityBean(MyEntity.class, PersistenceType.BEAN); bean.setLocalHome(MyLocalHome.class.getName()); bean.setLocal(MyLocal.class.getName()); ejbJar.addEnterpriseBean(bean); final org.apache.openejb.jee.EntityBean bean1 = new org.apache.openejb.jee.EntityBean(YourEntity.class, PersistenceType.BEAN); bean1.setLocalHome(MyLocalHome.class.getName()); bean1.setLocal(MyLocal.class.getName()); ejbJar.addEnterpriseBean(bean1); final StatelessBean bar = new StatelessBean(BarStateless.class); bar.setHomeAndRemote(BarStatelessHome.class, BarStatelessRemote.class); ejbJar.addEnterpriseBean(bar); final StatefulBean bazStateful = new StatefulBean(BazStateful.class); ejbJar.addEnterpriseBean(bazStateful); return ejbJar; } private static interface FooStatelessHome extends javax.ejb.EJBHome { } private static interface FooStatelessRemote extends javax.ejb.EJBObject { } private static interface FooStatelessLocalHome extends javax.ejb.EJBLocalHome { } private static interface FooStatelessLocal extends javax.ejb.EJBLocalObject { } private static class FooStateless implements SessionBean { public void ejbCreate() { } @Override public void ejbActivate() throws EJBException, RemoteException { } @Override public void ejbPassivate() throws EJBException, RemoteException { } @Override public void ejbRemove() throws EJBException, RemoteException { } @Override public void setSessionContext(final SessionContext arg0) throws EJBException, RemoteException { } } private static interface FooStatefulHome extends javax.ejb.EJBHome { } private static interface FooStatefulRemote extends javax.ejb.EJBObject { } private static interface FooStatefulLocalHome extends javax.ejb.EJBLocalHome { } private static interface FooStatefulLocal extends javax.ejb.EJBLocalObject { } private static class FooStateful implements SessionBean { public void ejbCreate() { } @Override public void ejbActivate() throws EJBException, RemoteException { } @Override public void ejbPassivate() throws EJBException, RemoteException { } @Override public void ejbRemove() throws EJBException, RemoteException { } @Override public void setSessionContext(final SessionContext arg0) throws EJBException, RemoteException { } } private static interface MyLocalHome extends EJBLocalHome { public MyLocal create(Integer pk) throws CreateException; public MyLocal findByPrimaryKey(Integer pk) throws FinderException; } private static interface MyLocal extends EJBLocalObject { } private static class MyEntity implements EntityBean { public Integer ejbCreate(final Integer pk) throws CreateException { return null; } public void ejbPostCreate(final String str) { } @Override public void ejbActivate() throws EJBException, RemoteException { } @Override public void ejbLoad() throws EJBException, RemoteException { } @Override public void ejbPassivate() throws EJBException, RemoteException { } @Override public void ejbRemove() throws RemoveException, EJBException, RemoteException { } @Override public void ejbStore() throws EJBException, RemoteException { } @Override public void setEntityContext(final EntityContext arg0) throws EJBException, RemoteException { } @Override public void unsetEntityContext() throws EJBException, RemoteException { } } private static class YourEntity implements EntityBean { // public Integer ejbCreate(Integer pk) throws CreateException { // return null; // } // public void ejbPostCreate(Integer pk) {} @Override public void ejbActivate() throws EJBException, RemoteException { } @Override public void ejbLoad() throws EJBException, RemoteException { } @Override public void ejbPassivate() throws EJBException, RemoteException { } @Override public void ejbRemove() throws RemoveException, EJBException, RemoteException { } @Override public void ejbStore() throws EJBException, RemoteException { } @Override public void setEntityContext(final EntityContext arg0) throws EJBException, RemoteException { } @Override public void unsetEntityContext() throws EJBException, RemoteException { } } private static interface BarStatelessHome extends javax.ejb.EJBHome { public BarStatelessRemote create() throws CreateException, RemoteException; } private static interface BarStatelessRemote extends javax.ejb.EJBObject { } private static class BarStateless implements SessionBean { @Override public void ejbActivate() throws EJBException, RemoteException { } @Override public void ejbPassivate() throws EJBException, RemoteException { } @Override public void ejbRemove() throws EJBException, RemoteException { } @Override public void setSessionContext(final SessionContext arg0) throws EJBException, RemoteException { } } private static interface BazStatefulHome extends javax.ejb.EJBHome { public BazStatefulRemote create() throws CreateException, RemoteException; } private static interface BazStatefulRemote extends javax.ejb.EJBObject { } private static interface BazStatefulLocalHome extends javax.ejb.EJBLocalHome { public BazStatefulLocal create() throws CreateException; } private static interface BazStatefulLocal extends javax.ejb.EJBLocalObject { } @RemoteHome(BazStatefulHome.class) @LocalHome(BazStatefulLocalHome.class) private static class BazStateful implements SessionBean { // missing ejbCreate method @Override public void ejbActivate() throws EJBException, RemoteException { } @Override public void ejbPassivate() throws EJBException, RemoteException { } @Override public void ejbRemove() throws EJBException, RemoteException { } @Override public void setSessionContext(final SessionContext arg0) throws EJBException, RemoteException { } } }