diff --git a/.gitignore b/.gitignore index 5aadb16a76..a6d821d1d5 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,3 @@ bin *.swp !/wicket-war/src/main/resources/META-INF/MANIFEST.MF - diff --git a/deltaspike-deactivatable/README.md b/deltaspike-deactivatable/README.md new file mode 100644 index 0000000000..edf507346d --- /dev/null +++ b/deltaspike-deactivatable/README.md @@ -0,0 +1,121 @@ +deltaspike-deactivatable: Demonstrate usage of Deactivatable +====================================================== +Author: Rafael Benevides +Level: Beginner +Technologies: CDI, DeltaSpike +Summary: Demonstrate usage of Deactivatable. +Target Product: WFK + +What is it? +----------- + +DeltaSpike allows that its artifacts can be deactivated manually (e.g. to improve the performance if a part isn't needed, to provide a custom implementation if the default implementation isn't pluggable by default or to bypass an implementation which causes an issue). + +To deactivate a class you need to implement ClassDeactivator. Returning 'false' or 'true' allows to deactivate or activate the class in question. This project has a ClassDeactivator that deactivates the ExcludeExtension. If the `ExcludeExtension` is deactivated then `MyBean`, which is annotated with `@Exclude`, won't be excluded + + +System requirements +------------------- + +All you need to build this project is Java 6.0 (Java SDK 1.6) or better, Maven 3.0 or better. + +The application this project produces is designed to be run on JBoss Enterprise Application Platform 6 or JBoss AS 7. + + +Configure Maven +--------------- + +If you have not yet done so, you must [Configure Maven](../README.md#mavenconfiguration) before testing the quickstarts. + +Start JBoss Enterprise Application Platform 6 or JBoss AS 7 with the Web Profile +------------------------- + +1. Open a command line and navigate to the root of the JBoss server directory. +2. The following shows the command line to start the server with the web profile: + + For Linux: JBOSS_HOME/bin/standalone.sh + For Windows: JBOSS_HOME\bin\standalone.bat + + +Run the Arquillian Tests +------------------------- + +This quickstart provides Arquillian tests. By default, these tests are configured to be skipped as Arquillian tests require the use of a container. + +_NOTE: The following commands assume you have configured your Maven user settings. If you have not, you must include Maven setting arguments on the command line. See [Run the Arquillian Tests](../README.md#arquilliantests) for complete instructions and additional options._ + +1. Make sure you have started the JBoss Server as described above. +2. Open a command line and navigate to the root directory of this quickstart. +3. Type the following command to run the test goal with the following profile activated: + + mvn clean test -Parq-jbossas-remote + + +Run tests from JBDS +----------------------- + +To be able to run the tests from JBDS, first set the active Maven profile in project properties to be either 'arq-jbossas-managed' for running on managed server or 'arq-jbossas-remote' for running on remote server. + +To run the tests, right click on the project or individual classes and select Run As --> JUnit Test in the context menu. + + +Investigate the Console Output +---------------------------- + + +### Maven + +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.jboss.as.quickstart.deltaspike.beanbuilder.test.DeactivatableTest +log4j:WARN No appenders could be found for logger (org.jboss.logging). +log4j:WARN Please initialize the log4j system properly. +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.745 sec + +Results : + +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 + + +### Server log + +There is a logging statements done when the tests are run: + +#### Example + +15:36:34,065 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "deactivator.war" +15:36:34,632 INFO [org.jboss.weld.deployer] (MSC service thread 1-1) JBAS016002: Processing weld deployment deactivator.war +15:36:34,719 INFO [org.jboss.weld.deployer] (MSC service thread 1-2) JBAS016005: Starting Services for CDI deployment: deactivator.war +15:36:34,726 INFO [org.jboss.weld.deployer] (MSC service thread 1-3) JBAS016008: Starting weld service for deployment deactivator.war +15:36:34,849 INFO [org.apache.deltaspike.core.impl.config.EnvironmentPropertyConfigSourceProvider] (MSC service thread 1-3) Custom config found by DeltaSpike. Name: 'META-INF/apache-deltaspike.properties', URL: 'vfs:/content/deactivator.war/WEB-INF/classes/META-INF/apache-deltaspike.properties' +15:36:34,860 INFO [org.apache.deltaspike.core.util.ClassDeactivationUtils] (MSC service thread 1-3) class: org.apache.deltaspike.core.impl.config.ConfigurationExtension activated=true +15:36:34,861 INFO [org.apache.deltaspike.core.util.ClassDeactivationUtils] (MSC service thread 1-3) class: org.apache.deltaspike.core.impl.exclude.extension.ExcludeExtension activated=false +15:36:34,864 INFO [org.apache.deltaspike.core.util.ClassDeactivationUtils] (MSC service thread 1-3) class: org.apache.deltaspike.core.impl.exclude.GlobalAlternative activated=true +15:36:34,867 INFO [org.apache.deltaspike.core.util.ClassDeactivationUtils] (MSC service thread 1-3) class: org.apache.deltaspike.core.impl.exclude.CustomProjectStageBeanFilter activated=true +15:36:34,868 INFO [org.apache.deltaspike.core.util.ClassDeactivationUtils] (MSC service thread 1-3) class: org.apache.deltaspike.core.impl.exception.control.extension.ExceptionControlExtension activated=true +15:36:34,868 INFO [org.apache.deltaspike.core.util.ClassDeactivationUtils] (MSC service thread 1-3) class: org.apache.deltaspike.core.impl.message.MessageBundleExtension activated=true +15:36:35,978 INFO [org.apache.deltaspike.core.util.ProjectStageProducer] (MSC service thread 1-3) Computed the following DeltaSpike ProjectStage: Production +15:36:36,026 INFO [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /deactivator +15:36:36,164 INFO [org.jboss.as.server] (management-handler-thread - 42) JBAS018559: Deployed "deactivator.war" +15:36:37,510 INFO [org.jboss.weld.deployer] (MSC service thread 1-3) JBAS016009: Stopping weld service for deployment deactivator.war +15:36:37,566 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015877: Stopped deployment deactivator.war in 70ms +15:36:37,685 INFO [org.jboss.as.repository] (management-handler-thread - 43) JBAS014901: Content removed from location /java/tools/jboss-as-7.1.1.Final/standalone/data/content/db/87621f007d7af7741881722f7d3c152f6648f0/content +15:36:37,686 INFO [org.jboss.as.server] (management-handler-thread - 43) JBAS018558: Undeployed "deactivator.war" + +The log statement to look for is this: + +15:36:34,861 INFO [org.apache.deltaspike.core.util.ClassDeactivationUtils] (MSC service thread 1-3) class: org.apache.deltaspike.core.impl.exclude.extension.ExcludeExtension activated=false + +Run the Quickstart in JBoss Developer Studio or Eclipse +------------------------------------- +You can also start the server and deploy the quickstarts from Eclipse using JBoss tools. For more information, see [Use JBoss Developer Studio or Eclipse to Run the Quickstarts](../README.md#useeclipse) + + +Debug the Application +------------------------------------ + +If you want to debug the source code or look at the Javadocs of any library in the project, run either of the following commands to pull them into your local repository. The IDE should then detect them. + + mvn dependency:sources + mvn dependency:resolve -Dclassifier=javadoc diff --git a/deltaspike-deactivatable/pom.xml b/deltaspike-deactivatable/pom.xml new file mode 100644 index 0000000000..2d4a5bea6b --- /dev/null +++ b/deltaspike-deactivatable/pom.xml @@ -0,0 +1,274 @@ + + + + 4.0.0 + + org.jboss.as.quickstarts + jboss-as-deltaspike-deactivatable + 7.1.2-SNAPSHOT + war + JBoss AS Quickstarts: DeltaSpike Deactivatable + DeltaSpike Deactivatable: Demonstrate usage of Deactivatable + + http://jboss.org/jbossas + + + Apache License, Version 2.0 + repo + http://www.apache.org/licenses/LICENSE-2.0.html + + + + + + + UTF-8 + + + 7.3.Final + 1.0.3.Final + + + 2.3.1 + 2.1.1 + 2.4.3 + + + 1.6 + 1.6 + + + + + + + + + org.jboss.bom + jboss-javaee-6.0-with-deltaspike + ${version.org.jboss.bom} + pom + import + + + + org.jboss.bom + jboss-javaee-6.0-with-tools + ${version.org.jboss.bom} + pom + import + + + + + + + + + + javax.enterprise + cdi-api + provided + + + + + org.jboss.spec.javax.annotation + jboss-annotations-api_1.1_spec + provided + + + + + org.jboss.spec.javax.faces + jboss-jsf-api_2.1_spec + provided + + + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + provided + + + + + org.jboss.spec.javax.transaction + jboss-transaction-api_1.1_spec + provided + + + + + org.jboss.spec.javax.ejb + jboss-ejb-api_3.1_spec + provided + + + + + org.apache.deltaspike.core + deltaspike-core-api + + + + + org.apache.deltaspike.core + deltaspike-core-impl + + + + + + org.jboss.spec.javax.ws.rs + jboss-jaxrs-api_1.1_spec + provided + + + + + junit + junit + test + + + org.jboss.arquillian.junit + arquillian-junit-container + test + + + org.jboss.arquillian.protocol + arquillian-protocol-servlet + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven + test + + + + + + ${project.artifactId} + + + maven-war-plugin + ${version.war.plugin} + + + false + + + + + org.jboss.as.plugins + jboss-as-maven-plugin + ${version.org.jboss.as.plugins.maven.plugin} + + + + maven-compiler-plugin + ${version.compiler.plugin} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + + default + + true + + + + + maven-surefire-plugin + ${version.surefire.plugin} + + true + + + + + + org.jboss.as.plugins + jboss-as-maven-plugin + ${version.org.jboss.as.plugins.maven.plugin} + + + + + + + + + + + arq-jbossas-managed + + + org.jboss.as + jboss-as-arquillian-container-managed + test + + + + + + + + arq-jbossas-remote + + + org.jboss.as + jboss-as-arquillian-container-remote + test + + + + + + + diff --git a/deltaspike-deactivatable/src/main/java/org/jboss/as/quickstart/deltaspike/deactivatable/ExcludeExtensionDeactivator.java b/deltaspike-deactivatable/src/main/java/org/jboss/as/quickstart/deltaspike/deactivatable/ExcludeExtensionDeactivator.java new file mode 100644 index 0000000000..0373754957 --- /dev/null +++ b/deltaspike-deactivatable/src/main/java/org/jboss/as/quickstart/deltaspike/deactivatable/ExcludeExtensionDeactivator.java @@ -0,0 +1,59 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2012, Red Hat, Inc., and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.jboss.as.quickstart.deltaspike.deactivatable; + +import org.apache.deltaspike.core.impl.exclude.extension.ExcludeExtension; +import org.apache.deltaspike.core.spi.activation.ClassDeactivator; +import org.apache.deltaspike.core.spi.activation.Deactivatable; + +/** + * This class implements {@link ClassDeactivator}. + * + * Returning 'false' or 'true' allows to de-/activate the class in question. Retuning null means that the current + * class-deactivator doesn't have information about the class in question and can't provide a result. + * + * This implementation is configured at src/main/resources/META-INF/apache-deltaspike.properties + * + * @author Rafael Benevides + * + */ +public class ExcludeExtensionDeactivator implements ClassDeactivator { + + private static final long serialVersionUID = 1L; + + /* + * (non-Javadoc) + * + * @see org.apache.deltaspike.core.spi.activation.ClassDeactivator#isActivated(java.lang.Class) + */ + @Override + public Boolean isActivated(Class targetClass) { + //Deactivate ExcludeExtension + if (ExcludeExtension.class.equals(targetClass)) { + return false; + } + //No information about other extensions + return null; + } + +} diff --git a/deltaspike-deactivatable/src/main/java/org/jboss/as/quickstart/deltaspike/deactivatable/MyBean.java b/deltaspike-deactivatable/src/main/java/org/jboss/as/quickstart/deltaspike/deactivatable/MyBean.java new file mode 100644 index 0000000000..0a025a18c9 --- /dev/null +++ b/deltaspike-deactivatable/src/main/java/org/jboss/as/quickstart/deltaspike/deactivatable/MyBean.java @@ -0,0 +1,39 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2012, Red Hat, Inc., and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.jboss.as.quickstart.deltaspike.deactivatable; + +import org.apache.deltaspike.core.api.exclude.annotation.Exclude; +import org.apache.deltaspike.core.impl.exclude.extension.ExcludeExtension; + +/** + * This Bean should be excluded because it uses the {@link Exclude} annotation. But it won't be excluded because the + * {@link ExcludeExtension} is deactivated on {@link ExcludeExtensionDeactivator} + * + * + * @author Rafael Benevides + * + */ +@Exclude +public class MyBean { + +} diff --git a/deltaspike-deactivatable/src/main/resources/META-INF/apache-deltaspike.properties b/deltaspike-deactivatable/src/main/resources/META-INF/apache-deltaspike.properties new file mode 100644 index 0000000000..645f6f9b3f --- /dev/null +++ b/deltaspike-deactivatable/src/main/resources/META-INF/apache-deltaspike.properties @@ -0,0 +1,2 @@ +#Configure the ClassDeactivator +org.apache.deltaspike.core.spi.activation.ClassDeactivator=org.jboss.as.quickstart.deltaspike.deactivatable.ExcludeExtensionDeactivator diff --git a/deltaspike-deactivatable/src/main/webapp/WEB-INF/beans.xml b/deltaspike-deactivatable/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000000..c659db4d31 --- /dev/null +++ b/deltaspike-deactivatable/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,3 @@ + + diff --git a/deltaspike-deactivatable/src/main/webapp/WEB-INF/faces-config.xml b/deltaspike-deactivatable/src/main/webapp/WEB-INF/faces-config.xml new file mode 100644 index 0000000000..b3d2ce3408 --- /dev/null +++ b/deltaspike-deactivatable/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/deltaspike-deactivatable/src/test/java/org/jboss/as/quickstart/deltaspike/beanbuilder/test/DeactivatableTest.java b/deltaspike-deactivatable/src/test/java/org/jboss/as/quickstart/deltaspike/beanbuilder/test/DeactivatableTest.java new file mode 100644 index 0000000000..b772097d80 --- /dev/null +++ b/deltaspike-deactivatable/src/test/java/org/jboss/as/quickstart/deltaspike/beanbuilder/test/DeactivatableTest.java @@ -0,0 +1,70 @@ +package org.jboss.as.quickstart.deltaspike.beanbuilder.test; + +/* + * JBoss, Home of Professional Open Source + * Copyright 2012, Red Hat, Inc., 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. + */ + +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +import javax.inject.Inject; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.as.quickstart.deltaspike.deactivatable.MyBean; +import org.jboss.as.quickstart.deltaspike.deactivatable.ExcludeExtensionDeactivator; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.DependencyResolvers; +import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Verification test. + */ +@RunWith(Arquillian.class) +public class DeactivatableTest { + + @Deployment + public static Archive getDeployment() { + + MavenDependencyResolver resolver = DependencyResolvers + .use(MavenDependencyResolver.class) + .loadMetadataFromPom("pom.xml"); + + Archive archive = ShrinkWrap + .create(WebArchive.class, "deactivator.war") + .addPackages(true, ExcludeExtensionDeactivator.class.getPackage()) + .addAsLibraries( + resolver.artifacts("org.apache.deltaspike.core:deltaspike-core-api", + "org.apache.deltaspike.core:deltaspike-core-impl").resolveAsFiles()) + .addAsResource("META-INF/apache-deltaspike.properties") + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + return archive; + } + + @Inject //The bean will be injected even using @Exclude because ExcludeExtension is deactivated. + private MyBean myBean; + + @Test + public void assertMyBeanInjected() { + //Should not be null since ExcludeExtension was deactivated. + assertThat(myBean, notNullValue()); + } +} diff --git a/deltaspike-deactivatable/src/test/resources/arquillian.xml b/deltaspike-deactivatable/src/test/resources/arquillian.xml new file mode 100644 index 0000000000..ab93aa6214 --- /dev/null +++ b/deltaspike-deactivatable/src/test/resources/arquillian.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + +