Embedded EJB3 and JNDI lookups
holmes.j Sep 24, 2006 5:52 PMI'm migrating from a Hibernate setup to an EJB3 setup. We got our web application to work with the regular EJB3 patch for JBoss, but we'd like to be able to run tests outside of the AS. So I'm trying to setup the Embedded container for our JUnit tests.
I've got it to the point where it loads the server, finds the datasource, puts the datasource into JNDI, and then finds and loads the EJB3 Session beans.
The problem is I can't locate the GeoFeatureManagerBean (an EJB3 Stateless session bean) in JNDI. I've tried looking up GeoFeatureManagerBean, GeoFeatureManagerBean/remote, motionbased/GeoFeatureManagerBean/remote, motionbased/GeoFeatureManagerBean. Everything says it cannot be found (btw, motionbased is the name of our ear during the AS deploy. I knew it wouldn't be in there, but I'm desperate now).
I know something's working, because I can find the GeoDataSource at "java:/com.free2be.datasource.GeoDataSource". I get a ClassCastException coming back from it - which is fine with me. But I can't for the life of me determine what the JNDI lookup name for a EJB3 Stateless Session Bean in an embedded context is.
I'm not all that familiar with JNDI, but is there a way to print out everything it has? I know I can use the jmx-console under the AS, but that's not really an option here.
0 [main] DEBUG KernelFactory - Starting JBoss Kernel construction...
125 [main] DEBUG KernelFactory - Completed JBoss Kernel construction. Duration: 125 milliseconds
890 [main] DEBUG BeanXMLDeployer - Parsing file:/C:/dev/mb/main/components/server/test/resources/embedded-jboss-beans.xml took 718 milliseconds
1109 [main] DEBUG UserTransactionImpl - new UserTx: org.jboss.ejb3.embedded.UserTransactionImpl@1242b11
1187 [main] INFO LocalTxDataSource - Bound datasource to JNDI name 'java:/com.free2be.datasource.GeoDataSource'
1187 [main] DEBUG BeanXMLDeployer - Deploying file:/C:/dev/mb/main/components/server/test/resources/embedded-jboss-beans.xml took 1015 milliseconds
1719 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: UserProfile
1922 [main] DEBUG EjbJarDDObjectFactory - found ejb-jar.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/UserProfile.jar!/META-INF/ejb-jar.xml
2469 [main] DEBUG JBossDDObjectFactory - found jboss.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/UserProfile.jar!/META-INF/jboss.xml
2531 [main] INFO Ejb3Deployment - EJB3 deployment time took: 812
2531 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: GpsTrack
2531 [main] DEBUG EjbJarDDObjectFactory - found ejb-jar.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/GpsTrack.jar!/META-INF/ejb-jar.xml
2781 [main] DEBUG JBossDDObjectFactory - found jboss.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/GpsTrack.jar!/META-INF/jboss.xml
2812 [main] INFO Ejb3Deployment - EJB3 deployment time took: 281
2812 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: Activity
2812 [main] DEBUG EjbJarDDObjectFactory - found ejb-jar.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/Activity.jar!/META-INF/ejb-jar.xml
3109 [main] DEBUG JBossDDObjectFactory - found jboss.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/Activity.jar!/META-INF/jboss.xml
3156 [main] INFO Ejb3Deployment - EJB3 deployment time took: 344
3156 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: Climate
3156 [main] DEBUG EjbJarDDObjectFactory - found ejb-jar.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/Climate.jar!/META-INF/ejb-jar.xml
3312 [main] DEBUG JBossDDObjectFactory - found jboss.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/Climate.jar!/META-INF/jboss.xml
3328 [main] INFO Ejb3Deployment - EJB3 deployment time took: 172
3328 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: Equipment
3328 [main] DEBUG EjbJarDDObjectFactory - found ejb-jar.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/Equipment.jar!/META-INF/ejb-jar.xml
3500 [main] DEBUG JBossDDObjectFactory - found jboss.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/Equipment.jar!/META-INF/jboss.xml
3531 [main] INFO Ejb3Deployment - EJB3 deployment time took: 203
3531 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: NoaaWeatherServer
3531 [main] DEBUG EjbJarDDObjectFactory - found ejb-jar.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/NoaaWeatherServer.jar!/META-INF/ejb-jar.xml
3687 [main] DEBUG JBossDDObjectFactory - found jboss.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/NoaaWeatherServer.jar!/META-INF/jboss.xml
3703 [main] INFO Ejb3Deployment - EJB3 deployment time took: 172
3703 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: GeoFeatureBeans
3828 [main] DEBUG Ejb3AnnotationHandler - found EJB3: ejbName=GenericDaoBean, class=com.garmin.mb.dao.GenericDaoBean, type=STATELESS
3844 [main] DEBUG ProxyDeployer - no declared remote bindings for : GenericDaoBean
3859 [main] DEBUG Ejb3AnnotationHandler - found EJB3: ejbName=GeoFeatureDaoBean, class=com.garmin.mb.dao.gis.feature.GeoFeatureDaoBean, type=STATELESS
3859 [main] DEBUG ProxyDeployer - no declared remote bindings for : GeoFeatureDaoBean
3890 [main] DEBUG Ejb3AnnotationHandler - found EJB3: ejbName=GeoFeatureManagerBean, class=com.garmin.mb.framework.gis.feature.GeoFeatureManagerBean, type=STATELESS
3890 [main] DEBUG ProxyDeployer - no declared remote bindings for : GeoFeatureManagerBean
3890 [main] DEBUG ProxyDeployer - there is remote interfaces for GeoFeatureManagerBean
3890 [main] DEBUG ProxyDeployer - default remote binding has jndiName of GeoFeatureManagerBean/remote
3953 [main] DEBUG DTDEntityResolver - trying to resolve system-id [http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd]
3953 [main] DEBUG EJB3DTDEntityResolver - recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb
3953 [main] DEBUG EJB3DTDEntityResolver - located [http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd] in classpath
3969 [main] INFO Ejb3Deployment - EJB3 deployment time took: 266
3969 [main] DEBUG JaccHelper - Initialising JACC Context for deployment: PrimaryKey
3984 [main] DEBUG EjbJarDDObjectFactory - found ejb-jar.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/PrimaryKey.jar!/META-INF/ejb-jar.xml
4031 [main] DEBUG JBossDDObjectFactory - found jboss.xml jar:file:/C:/dev/mb/main/build/deploy/ejb/PrimaryKey.jar!/META-INF/jboss.xml
4062 [main] INFO Ejb3Deployment - EJB3 deployment time took: 93
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
4062 [main] INFO MCKernelAbstraction - installing bean: persistence.units:jar=GeoFeatureBeans.jar,unitName=GeoFeatureDataSource with dependencies:
4062 [main] INFO MCKernelAbstraction - AbstractDemandMetaData@8b058b{demand=com.free2be.datasource.GeoDataSource whenRequiredDescribed}
4109 [main] DEBUG EJBContainer - Initialising interceptors for GenericDaoBean...
4109 [main] DEBUG EJBContainer - Default interceptors: null
4109 [main] DEBUG EJBContainer - Class interceptors: []
4109 [main] DEBUG EJBContainer - All applicable interceptor classes: []
4109 [main] DEBUG EJBContainer - Initialising interceptors for GeoFeatureDaoBean...
4109 [main] DEBUG EJBContainer - Default interceptors: null
4109 [main] DEBUG EJBContainer - Class interceptors: []
4109 [main] DEBUG EJBContainer - All applicable interceptor classes: []
4219 [main] DEBUG EJBContainer - Initialising interceptors for GeoFeatureManagerBean...
4219 [main] DEBUG EJBContainer - Default interceptors: null
4219 [main] DEBUG EJBContainer - Class interceptors: []
4219 [main] DEBUG EJBContainer - All applicable interceptor classes: []
4219 [main] INFO MCKernelAbstraction - installing bean: jboss.j2ee:jar=GeoFeatureBeans,name=GenericDaoBean,service=EJB3 with dependencies:
4219 [main] INFO MCKernelAbstraction - AbstractDemandMetaData@df2d38{demand=persistence.units:jar=GeoFeatureBeans.jar,unitName=GeoFeatureDataSource whenRequiredDescribed}
4219 [main] DEBUG Ejb3Deployment - Bound ejb3 container jboss.j2ee:service=EJB3,jar=GeoFeatureBeans,name=GenericDaoBean
4219 [main] INFO MCKernelAbstraction - installing bean: jboss.j2ee:jar=GeoFeatureBeans,name=GeoFeatureDaoBean,service=EJB3 with dependencies:
4219 [main] INFO MCKernelAbstraction - AbstractDemandMetaData@873723{demand=persistence.units:jar=GeoFeatureBeans.jar,unitName=GeoFeatureDataSource whenRequiredDescribed}
4234 [main] DEBUG Ejb3Deployment - Bound ejb3 container jboss.j2ee:service=EJB3,jar=GeoFeatureBeans,name=GeoFeatureDaoBean
4234 [main] INFO MCKernelAbstraction - installing bean: jboss.j2ee:jar=GeoFeatureBeans,name=GeoFeatureManagerBean,service=EJB3 with dependencies:
4234 [main] INFO MCKernelAbstraction - AbstractDemandMetaData@1f38fc6{demand=jboss.j2ee:jar=GeoFeatureBeans,name=GeoFeatureDaoBean,service=EJB3 whenRequiredDescribed}
4234 [main] DEBUG Ejb3Deployment - Bound ejb3 container jboss.j2ee:service=EJB3,jar=GeoFeatureBeans,name=GeoFeatureManagerBean
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
lookup
UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
Here's the test-code ...
package com.garmin.mb.dao.gis.feature.pc;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.NoSuchElementException;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.garmin.mb.dao.EJB3TestContainer;
import com.garmin.mb.framework.gis.feature.pc.PopulatedPlaceClassification;
public class PopulatedPlaceClassifcationDAOUnitTest {
private static EJB3TestContainer container;
private PopulatedPlaceClassificationDao dao;
@BeforeClass
public static void beforeClass() throws Exception {
container = new EJB3TestContainer();
container.startup();
}
@AfterClass
public static void afterClass() throws Exception {
container.shutdown();
}
@Before
public void setUp() {
Object daoToCast = EJB3TestContainer.lookup("GeoFeatureManagerBean/remote");
this.dao = (PopulatedPlaceClassificationDao) daoToCast;
}
@Test
public void testFindById() {
long id = 2;
PopulatedPlaceClassification value = dao.findById(id, false);
assert value != null;
long pkValue = value.getPopulatedPlaceClassificationPk();
assertEquals(pkValue, id);
assertEquals("Medium-High", value.getDatabaseDescription());
}
@Test
public void testFindValue() {
int key = 3;
PopulatedPlaceClassification value = dao.findByCode(key);
assertEquals("Medium", value.getDatabaseDescription());
}
@Test
public void testFindValueNotPresent() {
int key = 991;
try {
dao.findByCode(key);
fail();
} catch (NoSuchElementException e) {
assertTrue(true);
}
}
}
jndi.properties ...
java.naming.factory.initial=org.jnp.interfaces.LocalOnlyContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces