/**
* 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.core;
import junit.framework.TestCase;
import org.apache.openejb.OpenEJB;
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.openejb.assembler.classic.SecurityServiceInfo;
import org.apache.openejb.assembler.classic.TransactionServiceInfo;
import org.apache.openejb.config.AppModule;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.core.ivm.naming.InitContextFactory;
import org.apache.openejb.jee.CmpField;
import org.apache.openejb.jee.ContainerTransaction;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.EntityBean;
import org.apache.openejb.jee.PersistenceType;
import org.apache.openejb.jee.Query;
import org.apache.openejb.jee.QueryMethod;
import org.apache.openejb.jee.SingletonBean;
import org.apache.openejb.jee.TransAttribute;
import org.junit.AfterClass;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.EntityContext;
import javax.ejb.LocalHome;
import javax.ejb.RemoteHome;
import javax.ejb.RemoveException;
import javax.ejb.SessionContext;
import java.io.File;
import java.rmi.RemoteException;
import java.util.List;
/**
* @version $Rev$ $Date$
*/
public class LegacyInterfaceTest extends TestCase {
@AfterClass
public static void afterClass() throws Exception {
OpenEJB.destroy();
}
public void test() throws Exception {
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
final ConfigurationFactory config = new ConfigurationFactory();
final Assembler assembler = new Assembler();
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
final EjbJar ejbJar = new EjbJar();
ejbJar.addEnterpriseBean(new SingletonBean(MySingletonBean.class));
ejbJar.addEnterpriseBean(new EntityBean(MyBmpBean.class, PersistenceType.BEAN));
//<entity>
// <ejb-name>License</ejb-name>
// <local-home>org.apache.openejb.test.entity.cmr.onetoone.LicenseLocalHome</local-home>
// <local>org.apache.openejb.test.entity.cmr.onetoone.LicenseLocal</local>
// <ejb-class>org.apache.openejb.test.entity.cmr.onetoone.LicenseBean</ejb-class>
// <persistence-type>Container</persistence-type>
// <prim-key-class>java.lang.Integer</prim-key-class>
// <reentrant>false</reentrant>
// <cmp-version>2.x</cmp-version>
// <abstract-schema-name>License</abstract-schema-name>
// <cmp-field>
// <field-name>id</field-name>
// </cmp-field>
// <cmp-field>
// <field-name>number</field-name>
// </cmp-field>
// <cmp-field>
// <field-name>points</field-name>
// </cmp-field>
// <cmp-field>
// <field-name>notes</field-name>
// </cmp-field>
// <primkey-field>id</primkey-field>
// <query>
// <!-- CompondPK one-to-one shares the local home interface so we need to declare this useless finder -->
// <query-method>
// <method-name>findByPrimaryKey</method-name>
// <method-params>
// <method-param>org.apache.openejb.test.entity.cmr.onetoone.LicensePk</method-param>
// </method-params>
// </query-method>
// <ejb-ql>SELECT OBJECT(DL) FROM License DL</ejb-ql>
// </query>
//</entity>
final EntityBean cmp = ejbJar.addEnterpriseBean(new EntityBean(MyCmpBean.class, PersistenceType.CONTAINER));
cmp.setPrimKeyClass(Integer.class.getName());
cmp.setPrimkeyField("id");
cmp.getCmpField().add(new CmpField("id"));
cmp.getCmpField().add(new CmpField("name"));
final Query query = new Query();
query.setQueryMethod(new QueryMethod("findByPrimaryKey", Integer.class.getName()));
query.setEjbQl("SELECT OBJECT(DL) FROM License DL");
cmp.getQuery().add(query);
final List<ContainerTransaction> transactions = ejbJar.getAssemblyDescriptor().getContainerTransaction();
//<container-transaction>
// <method>
// <ejb-name>MyBean</ejb-name>
// <method-name>*</method-name>
// </method>
// <trans-attribute>Supports</trans-attribute>
//</container-transaction>
transactions.add(new ContainerTransaction(TransAttribute.SUPPORTS, null, "MyBmpBean", "*"));
transactions.add(new ContainerTransaction(TransAttribute.SUPPORTS, null, "MyCmpBean", "*"));
transactions.add(new ContainerTransaction(TransAttribute.SUPPORTS, null, "MySingletonBean", "*"));
final File f = new File("test").getAbsoluteFile();
if (!f.exists() && !f.mkdirs()) {
throw new Exception("Failed to create test directory: " + f);
}
final AppModule module = new AppModule(this.getClass().getClassLoader(), f.getAbsolutePath());
module.getEjbModules().add(new EjbModule(ejbJar));
assembler.createApplication(config.configureApplication(module));
}
@LocalHome(MyLocalHome.class)
@RemoteHome(MyRemoteHome.class)
public static abstract class MyCmpBean implements javax.ejb.EntityBean {
// CMP
public abstract Integer getId();
public abstract void setId(Integer id);
public abstract String getName();
public abstract void setName(String number);
public void doit() {
}
public Integer ejbCreateObject(final String id) throws CreateException {
return null;
}
public void ejbPostCreateObject(final String id) {
}
public void setEntityContext(final EntityContext ctx) {
}
public void unsetEntityContext() {
}
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void ejbLoad() {
}
public void ejbStore() {
}
public void ejbRemove() throws RemoveException {
}
}
@LocalHome(MyLocalHome.class)
@RemoteHome(MyRemoteHome.class)
public class MyBmpBean implements javax.ejb.EntityBean {
public void doit() {
}
public java.util.Collection ejbFindEmptyCollection() throws javax.ejb.FinderException, java.rmi.RemoteException {
return new java.util.Vector();
}
public Integer ejbFindByPrimaryKey(final Integer primaryKey) throws javax.ejb.FinderException {
return new Integer(-1);
}
public Integer ejbCreateObject(final String name) throws javax.ejb.CreateException {
return new Integer(-1);
}
public void ejbPostCreateObject(final String name) throws javax.ejb.CreateException {
}
public void ejbLoad() throws EJBException, RemoteException {
}
public void setEntityContext(final EntityContext entityContext) throws EJBException, RemoteException {
}
public void unsetEntityContext() throws EJBException, RemoteException {
}
public void ejbStore() throws EJBException, RemoteException {
}
public void ejbRemove() throws RemoveException, EJBException, RemoteException {
}
public void ejbActivate() throws EJBException, RemoteException {
}
public void ejbPassivate() throws EJBException, RemoteException {
}
}
public interface MyRemoteHome extends javax.ejb.EJBHome {
public MyRemoteObject createObject(String name)
throws javax.ejb.CreateException, java.rmi.RemoteException;
public MyRemoteObject findByPrimaryKey(Integer primarykey)
throws javax.ejb.FinderException, java.rmi.RemoteException;
public java.util.Collection findEmptyCollection()
throws javax.ejb.FinderException, java.rmi.RemoteException;
}
public interface MyRemoteObject extends javax.ejb.EJBObject {
public void doit() throws RemoteException;
}
public interface MyLocalHome extends javax.ejb.EJBLocalHome {
public MyLocalObject createObject(String name)
throws javax.ejb.CreateException;
public MyLocalObject findByPrimaryKey(Integer primarykey)
throws javax.ejb.FinderException;
public java.util.Collection findEmptyCollection()
throws javax.ejb.FinderException;
}
public interface MyLocalObject extends javax.ejb.EJBLocalObject {
public void doit();
}
@LocalHome(MySessionLocalHome.class)
@RemoteHome(MySessionRemoteHome.class)
public static class MySingletonBean implements javax.ejb.SessionBean {
public void doit() {
}
public void ejbCreateObject() throws javax.ejb.CreateException {
}
public void ejbActivate() throws EJBException, RemoteException {
}
public void ejbPassivate() throws EJBException, RemoteException {
}
public void ejbRemove() throws EJBException, RemoteException {
}
public void setSessionContext(final SessionContext sessionContext) throws EJBException, RemoteException {
}
}
public interface MySessionRemoteHome extends javax.ejb.EJBHome {
public MySessionRemoteObject createObject()
throws javax.ejb.CreateException, java.rmi.RemoteException;
}
public interface MySessionRemoteObject extends javax.ejb.EJBObject {
public void doit();
}
public interface MySessionLocalHome extends javax.ejb.EJBLocalHome {
public MySessionLocalObject createObject()
throws javax.ejb.CreateException;
}
public interface MySessionLocalObject extends javax.ejb.EJBLocalObject {
public void doit();
}
}