/arquillian/common/src/main/java/org/jboss/as/arquillian/container/CommonDeployableContainer.java
https://bitbucket.org/cprenzberg/wildfly · Java · 173 lines · 122 code · 29 blank · 22 comment · 2 complexity · 9b3aff543fa5eac7b97c5c76ed4855b2 MD5 · raw file
- /*
- * JBoss, Home of Professional Open Source
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed 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.jboss.as.arquillian.container;
- import static org.jboss.as.arquillian.container.Authentication.getCallbackHandler;
- import java.net.UnknownHostException;
- import java.util.Properties;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
- import org.jboss.arquillian.container.spi.client.container.DeploymentException;
- import org.jboss.arquillian.container.spi.client.container.LifecycleException;
- import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
- import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
- import org.jboss.arquillian.container.spi.context.annotation.ContainerScoped;
- import org.jboss.arquillian.core.api.InstanceProducer;
- import org.jboss.arquillian.core.api.annotation.ApplicationScoped;
- import org.jboss.arquillian.core.api.annotation.Inject;
- import org.jboss.as.controller.client.ModelControllerClient;
- import org.jboss.shrinkwrap.api.Archive;
- import org.jboss.shrinkwrap.descriptor.api.Descriptor;
- import org.jboss.util.NotImplementedException;
- import org.xnio.IoUtils;
- /**
- * A JBossAS deployable container
- *
- * @author Thomas.Diesler@jboss.com
- * @since 17-Nov-2010
- */
- public abstract class CommonDeployableContainer<T extends CommonContainerConfiguration> implements DeployableContainer<T> {
- private static final String JBOSS_URL_PKG_PREFIX = "org.jboss.ejb.client.naming";
- private T containerConfig;
- @Inject
- @ContainerScoped
- private InstanceProducer<ManagementClient> managementClient;
- @Inject
- @ContainerScoped
- private InstanceProducer<ArchiveDeployer> archiveDeployer;
- @Inject
- @ApplicationScoped
- private InstanceProducer<Context> jndiContext;
- @Override
- public ProtocolDescription getDefaultProtocol() {
- return new ProtocolDescription("jmx-as7");
- }
- @Override
- public void setup(T config) {
- containerConfig = config;
- }
- @Override
- public final void start() throws LifecycleException {
- if(containerConfig.getUsername() != null) {
- Authentication.username = containerConfig.getUsername();
- Authentication.password = containerConfig.getPassword();
- }
- ModelControllerClient modelControllerClient = null;
- try {
- modelControllerClient = ModelControllerClient.Factory.create(
- containerConfig.getManagementProtocol(),
- containerConfig.getManagementAddress(),
- containerConfig.getManagementPort(),
- getCallbackHandler());
- } catch (UnknownHostException e) {
- throw new RuntimeException(e);
- }
- ManagementClient client = new ManagementClient(modelControllerClient, containerConfig.getManagementAddress(), containerConfig.getManagementPort(), containerConfig.getManagementProtocol());
- managementClient.set(client);
- ArchiveDeployer deployer = new ArchiveDeployer(modelControllerClient);
- archiveDeployer.set(deployer);
- try {
- final Properties jndiProps = new Properties();
- jndiProps.setProperty(Context.URL_PKG_PREFIXES, JBOSS_URL_PKG_PREFIX);
- jndiContext.set(new InitialContext(jndiProps));
- } catch (final NamingException ne) {
- throw new LifecycleException("Could not set JNDI Naming Context", ne);
- }
- try {
- startInternal();
- } catch (LifecycleException e) {
- safeCloseClient();
- throw e;
- }
- }
- protected abstract void startInternal() throws LifecycleException;
- @Override
- public final void stop() throws LifecycleException {
- try {
- stopInternal();
- } finally {
- safeCloseClient();
- }
- }
- protected abstract void stopInternal() throws LifecycleException;
- protected T getContainerConfiguration() {
- return containerConfig;
- }
- protected ManagementClient getManagementClient() {
- return managementClient.get();
- }
- protected ModelControllerClient getModelControllerClient() {
- return getManagementClient().getControllerClient();
- }
- @Override
- public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
- String runtimeName = archiveDeployer.get().deploy(archive);
- return getManagementClient().getProtocolMetaData(runtimeName);
- }
- @Override
- public void undeploy(Archive<?> archive) throws DeploymentException {
- archiveDeployer.get().undeploy(archive.getName());
- }
- @Override
- public void deploy(Descriptor descriptor) throws DeploymentException {
- throw new NotImplementedException();
- }
- @Override
- public void undeploy(Descriptor descriptor) throws DeploymentException {
- throw new NotImplementedException();
- }
- private void safeCloseClient() {
- try {
- IoUtils.safeClose(getManagementClient());
- } catch (final Exception e) {
- Logger.getLogger(this.getClass().getName()).log(Level.WARNING,
- "Caught exception closing ModelControllerClient", e);
- }
- }
- }