/*
* 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.arquillian.openejb;
import org.apache.openejb.arquillian.common.ArquillianUtil;
import org.apache.openejb.arquillian.common.TestObserver;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
import org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
import org.apache.openejb.util.JuliLogStreamFactory;
import org.apache.openejb.util.LogCategory;
import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
import org.jboss.arquillian.core.spi.LoadableExtension;
import org.jboss.arquillian.test.spi.TestEnricher;
import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
import org.jboss.arquillian.transaction.spi.provider.TransactionProvider;
import java.util.Enumeration;
import java.util.logging.Handler;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class OpenEJBExtension implements LoadableExtension {
private static final String OPENEJB_ADAPTER_NAME = "openejb";
static { // logging conf
if (ArquillianUtil.isCurrentAdapter(OPENEJB_ADAPTER_NAME)) {
if (System.getProperty("java.util.logging.config.class") == null || System.getProperty("java.util.logging.config.file") == null) {
final Enumeration<String> list = LogManager.getLogManager().getLoggerNames();
while (list.hasMoreElements()) {
initLogger(list.nextElement());
}
initLogger(LogCategory.OPENEJB.getName());
}
}
}
private static void initLogger(final String name) {
final Logger logger = Logger.getLogger(name);
final Handler[] handlers = logger.getHandlers();
if (handlers != null) {
for (final Handler handler : handlers) {
logger.removeHandler(handler);
}
}
logger.setUseParentHandlers(false);
logger.addHandler(new JuliLogStreamFactory.OpenEJBSimpleLayoutHandler());
}
@Override
public void register(final ExtensionBuilder extensionBuilder) {
if (ArquillianUtil.isCurrentAdapter(OPENEJB_ADAPTER_NAME)) {
extensionBuilder.service(DeployableContainer.class, OpenEJBDeployableContainer.class)
.service(TestEnricher.class, OpenEJBInjectionEnricher.class)
.service(ResourceProvider.class, DeploymentExceptionProvider.class)
.service(TransactionProvider.class, OpenEJBTransactionProvider.class)
.observer(TestObserver.class)
.observer(DeploymentExceptionObserver.class);
}
}
}