public void mergeRef(final NamingResourcesImpl naming, final EjbReferenceInfo ref) {
if (isLookupRef(naming, ref)) {
return;
}
ContextEjb ejb = naming.findEjb(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (ejb == null) {
ejb = new ContextEjb();
ejb.setName(ref.referenceName.replaceAll("^comp/env/", ""));
addEntry = true;
}
ejb.setProperty(Constants.FACTORY, EjbFactory.class.getName());
ejb.setProperty(NamingUtil.NAME, ref.referenceName.replaceAll("^comp/env/", ""));
ejb.setHome(ref.homeClassName);
ejb.setRemote(ref.interfaceClassName);
ejb.setLink(null);
ejb.setType(ref.interfaceClassName);
if (useCrossClassLoaderRef) {
ejb.setProperty(NamingUtil.EXTERNAL, Boolean.toString(ref.externalReference));
}
if (ref.ejbDeploymentId != null) {
ejb.setProperty(NamingUtil.DEPLOYMENT_ID, ref.ejbDeploymentId);
}
if (ref.location != null) {
ejb.setProperty(NamingUtil.JNDI_NAME, ref.location.jndiName);
ejb.setProperty(NamingUtil.JNDI_PROVIDER_ID, ref.location.jndiProviderId);
}
if (addEntry) {
naming.addEjb(ejb);
}
if (replaceEntry) {
ContextAccessController.setWritable(namingContextListener.getName(), standardContext.getNamingToken());
if (!addEntry) {
namingContextListener.removeEjb(ejb.getName());
}
namingContextListener.addEjb(ejb);
ContextAccessController.setReadOnly(namingContextListener.getName());
}
}