use of org.apache.openejb.assembler.classic.ResourceInfo in project tomee by apache.
the class EffectiveTomEEXml method main.
public static void main(final String[] args) throws Exception {
final CommandLine line = parseCommand(args);
if (line == null) {
return;
}
final Openejb openejb = JaxbOpenejb.readConfig(findXml(line).getCanonicalPath());
final ConfigurationFactory configFact = new ConfigurationFactory();
for (final Resource r : openejb.getResource()) {
final ResourceInfo ri = configFact.configureService(r, ResourceInfo.class);
if (!ri.properties.containsKey("SkipImplicitAttributes")) {
ri.properties.put("SkipImplicitAttributes", "false");
}
r.getProperties().clear();
r.getProperties().putAll(ri.properties);
}
// TODO: others
final Marshaller marshaller = JaxbOpenejb.getContext(Openejb.class).createMarshaller();
marshaller.setProperty("jaxb.formatted.output", true);
marshaller.marshal(openejb, System.out);
}
use of org.apache.openejb.assembler.classic.ResourceInfo in project tomee by apache.
the class JMSConnectionFactoryTest method checkConnectionFactoryIsThere.
@Test
public void checkConnectionFactoryIsThere() throws NamingException {
// auto created
assertNotNull(SystemInstance.get().getComponent(ContainerSystem.class).getContainer("Default Managed Container"));
final List<ResourceInfo> resources = SystemInstance.get().getComponent(OpenEjbConfiguration.class).facilities.resources;
boolean found = false;
for (final ResourceInfo r : resources) {
if (r.id.equals("JMSConnectionFactoryTest/testConnectionFactory")) {
// prefixed with app name
found = true;
break;
}
}
assertTrue(found);
// these lookup must pass
final Context jndiContext = SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
final Object directLookup = jndiContext.lookup("openejb:Resource/testConnectionFactory");
assertNotNull(directLookup);
final Object appLookup = jndiContext.lookup("openejb:Resource/JMSConnectionFactoryTest/testConnectionFactory");
assertNotNull(appLookup);
// facade are not the same but the underlying connection factory should be
assertEquals(Reflections.get(directLookup, "factory"), Reflections.get(appLookup, "factory"));
}
use of org.apache.openejb.assembler.classic.ResourceInfo in project tomee by apache.
the class DataSourceInitialSizeAdjustingTest method checkNonJtaPoolSizeWasCorrected.
@Test
public void checkNonJtaPoolSizeWasCorrected() {
final String prefix = getClass().getSimpleName();
for (final ResourceInfo info : SystemInstance.get().getComponent(OpenEjbConfiguration.class).facilities.resources) {
if ((prefix + "NonJta").equals(info.id)) {
assertEquals("5", info.properties.getProperty("InitialSize"));
return;
}
}
fail("DataSource not found");
}
use of org.apache.openejb.assembler.classic.ResourceInfo in project tomee by apache.
the class IgnoreDefaultTest method createWithoutDefaultDs.
@Test
public void createWithoutDefaultDs() throws OpenEJBException, NamingException {
final Resource resource = new Resource(IgnoreDefaultTest.class.getName() + "#without-default");
resource.setType(DataSource.class.getName());
resource.getProperties().setProperty("IgnoreDefaultValues", "true");
resource.getProperties().setProperty("JdbcDriver", jdbcDriver.class.getName());
final ResourceInfo info = configurationFactory.configureService(resource, ResourceInfo.class);
assembler.createResource(info);
check(resource.getId(), null, null);
}
use of org.apache.openejb.assembler.classic.ResourceInfo in project tomee by apache.
the class ConfigurationFactory method configureService.
/**
* This is the major piece of code that configures services.
* It merges the data from the <ServiceProvider> declaration
* with the data from the openejb.xml file (say <Resource>)
* <p/>
* The end result is a canonical (i.e. flattened) ServiceInfo
* The ServiceInfo will be of a specific type (ContainerInfo, ResourceInfo, etc)
*
* @param service Service
* @param infoType Class
* @param <T> infoType
* @return ServiceInfo
* @throws OpenEJBException On error
*/
public <T extends ServiceInfo> T configureService(org.apache.openejb.config.Service service, final Class<? extends T> infoType) throws OpenEJBException {
try {
if (infoType == null) {
throw new NullPointerException("type");
}
if (service == null) {
service = getDefaultService(infoType);
if (service == null) {
throw new OpenEJBException(messages.format("configureService.noDefaultService", infoType.getName()));
}
}
{
String template = service.getTemplate();
if (template == null) {
template = SystemInstance.get().getProperty(Template.class.getName());
}
if (template != null) {
template = unaliasPropertiesProvider(template);
// don't trim them, user wants to handle it himself, let him do it
final ObjectRecipe recipe = newObjectRecipe(template);
recipe.setProperty("serviceId", service.getId());
// note: we can also use reflection if needed to limit the dependency
Template.class.cast(recipe.create()).configure(service);
}
}
final ServiceProvider provider = getServiceProvider(service, infoType);
if (service.getId() == null) {
service.setId(provider.getId());
}
final Properties overrides = trim(getSystemProperties(overrideKey(service), provider.getService()));
final Properties serviceProperties = service.getProperties();
trim(serviceProperties);
trim(provider.getProperties());
logger.info("configureService.configuring", service.getId(), provider.getService(), provider.getId());
if (logger.isDebugEnabled()) {
for (final Map.Entry<Object, Object> entry : serviceProperties.entrySet()) {
final Object key = entry.getKey();
Object value = entry.getValue();
if (key instanceof String && "password".equalsIgnoreCase((String) key)) {
value = "<hidden>";
}
logger.debug("[" + key + "=" + value + "]");
}
for (final Map.Entry<Object, Object> entry : overrides.entrySet()) {
final Object key = entry.getKey();
Object value = entry.getValue();
if (key instanceof String && "password".equalsIgnoreCase((String) key)) {
value = "<hidden>";
}
logger.debug("Override [" + key + "=" + value + "]");
}
}
final Properties props = new SuperProperties().caseInsensitive(true);
// weird hack but sometimes we don't want default values when we want null for instance
if (serviceProperties == null || "false".equals(serviceProperties.getProperty(IGNORE_DEFAULT_VALUES_PROP, "false"))) {
props.putAll(provider.getProperties());
}
if (serviceProperties != null) {
props.putAll(serviceProperties);
}
props.putAll(overrides);
{
// force user properties last
String propertiesProvider = service.getPropertiesProvider();
if (propertiesProvider == null) {
propertiesProvider = SystemInstance.get().getProperty(PropertiesResourceProvider.class.getName());
}
if (propertiesProvider != null) {
propertiesProvider = unaliasPropertiesProvider(propertiesProvider);
// don't trim them, user wants to handle it himself, let him do it
final ObjectRecipe recipe = newObjectRecipe(propertiesProvider);
recipe.setFactoryMethod("provides");
recipe.setProperty("serviceId", service.getId());
recipe.setProperties(props);
// let user get all config
recipe.setProperty("properties", props);
final Properties p = Properties.class.cast(recipe.create());
props.putAll(p);
}
}
props.remove(IGNORE_DEFAULT_VALUES_PROP);
final T info;
try {
info = infoType.newInstance();
} catch (final Exception e) {
throw new OpenEJBException(messages.format("configureService.cannotInstantiateClass", infoType.getName()), e);
}
// some jndi adjustment
if (service.getId().startsWith("java:/")) {
service.setId(service.getId().substring("java:/".length()));
}
info.service = provider.getService();
info.types.addAll(provider.getTypes());
info.description = provider.getDescription();
info.displayName = provider.getDisplayName();
info.className = provider.getClassName();
info.factoryMethod = provider.getFactoryName();
info.id = service.getId();
info.properties = props;
info.constructorArgs.addAll(parseConstructorArgs(provider));
if (info instanceof ResourceInfo && service instanceof Resource) {
final ResourceInfo ri = ResourceInfo.class.cast(info);
final Resource resource = Resource.class.cast(service);
ri.jndiName = resource.getJndi();
ri.postConstruct = resource.getPostConstruct();
ri.preDestroy = resource.getPreDestroy();
ri.aliases.addAll(resource.getAliases());
ri.dependsOn.addAll(resource.getDependsOn());
}
if (service.getClasspath() != null && service.getClasspath().length() > 0) {
info.classpath = resolveClasspath(service.getClasspath());
}
info.classpathAPI = service.getClasspathAPI();
specialProcessing(info);
return info;
} catch (final NoSuchProviderException e) {
final String message = logger.fatal("configureService.failed", e, (null != service ? service.getId() : ""));
throw new OpenEJBException(message + ": " + e.getMessage());
} catch (final Throwable e) {
final String message = logger.fatal("configureService.failed", e, (null != service ? service.getId() : ""));
throw new OpenEJBException(message, e);
}
}
Aggregations