Tag for TomEE 1.5.1 and OpenEJB 4.5.1
git-svn-id: https://svn.apache.org/repos/asf/openejb/tags/openejb-4.5.1@1418534 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d935154
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,82 @@
+# 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.
+
+# This file is used during development only.
+# It has just some handy shortcuts.
+TOMEE_VERSION=1.5.1
+TOMCAT_ZIP_NAME=apache-tomcat-7.0.33
+TOMCAT_ZIP=tomee/apache-tomcat/target/$(TOMCAT_ZIP_NAME)-SNAPSHOT.zip
+TOMEEPLUS_WAR=tomee/tomee-plus-webapp/target/tomee-plus-webapp-$(TOMEE_VERSION).war
+TOMEE_WAR=/home/tveronezi/dev/ws/openejb/trunk/tomee/tomee-webapp/target/tomee-webapp-$(TOMEE_VERSION).war
+TOMEEPLUS_ZIP=tomee/apache-tomee/target/apache-tomee-plus-$(TOMEE_VERSION).tar.gz
+
+$(TOMEE_WAR):
+ cd tomee/tomee-webapp/ && mvn clean install -DskipTests=true
+
+$(TOMEEPLUS_WAR): $(TOMEE_WAR)
+ cd tomee/tomee-plus-webapp/ && mvn clean install -DskipTests=true
+
+$(TOMCAT_ZIP):
+ cd tomee/apache-tomcat && mvn clean install
+
+tomcat: $(TOMCAT_ZIP)
+
+tomee: tomcat $(TOMEEPLUS_WAR)
+
+kill-tomee:
+ @if test -f target/runnner/tomcat-pid.txt; then \
+ kill -9 `cat target/runnner/tomcat-pid.txt`; \
+ rm target/runnner/tomcat-pid.txt; \
+ fi
+
+start-plus: kill-tomee tomee
+ mkdir -p target/runnner
+ cp $(TOMEEPLUS_ZIP) target/runnner/
+ rm -Rf target/runnner/apache-tomee-plus-$(TOMEE_VERSION)
+ cd target/runnner/ && tar -xvzf apache-tomee-plus-$(TOMEE_VERSION).tar.gz
+ rm target/runnner/apache-tomee-plus-$(TOMEE_VERSION)/conf/tomcat-users.xml
+ cp tomee/tomee-webapp/src/test/conf/tomcat-users.xml target/runnner/apache-tomee-plus-$(TOMEE_VERSION)/conf/
+ export JPDA_SUSPEND=n && export CATALINA_PID=target/runnner/tomcat-pid.txt && ./target/runnner/apache-tomee-plus-$(TOMEE_VERSION)/bin/catalina.sh jpda start
+
+start-tomee: kill-tomee tomee
+ mkdir -p target/runnner
+ cp $(TOMCAT_ZIP) target/runnner/
+ rm -Rf target/runnner/$(TOMCAT_ZIP_NAME)
+ cd target/runnner/ && unzip $(TOMCAT_ZIP_NAME)-SNAPSHOT.zip
+ cp tomee/tomee-plus-webapp/target/tomee-plus-webapp-$(TOMEE_VERSION).war \
+ target/runnner/$(TOMCAT_ZIP_NAME)/webapps/
+ rm target/runnner/apache-tomcat-7.0.33/conf/tomcat-users.xml
+ cp tomee/tomee-webapp/src/test/conf/tomcat-users.xml target/runnner/apache-tomcat-7.0.33/conf/
+ chmod +x target/runnner/$(TOMCAT_ZIP_NAME)/bin/startup.sh
+ chmod +x target/runnner/apache-tomcat-7.0.33/bin/catalina.sh
+ export JPDA_SUSPEND=n && export CATALINA_PID=target/runnner/tomcat-pid.txt && ./target/runnner/$(TOMCAT_ZIP_NAME)/bin/catalina.sh jpda start
+
+reload-tomee: kill-tomee
+ chmod +x target/runnner/$(TOMCAT_ZIP_NAME)/bin/startup.sh
+ chmod +x target/runnner/apache-tomcat-7.0.33/bin/catalina.sh
+ export CATALINA_PID=target/runnner/tomcat-pid.txt && ./target/runnner/$(TOMCAT_ZIP_NAME)/bin/catalina.sh jpda start
+
+up-static:
+ rm -Rf target/runnner/$(TOMCAT_ZIP_NAME)/webapps/tomee-plus-webapp-$(TOMEE_VERSION)/app
+ cp -r tomee/tomee-webapp/src/main/webapp/app target/runnner/$(TOMCAT_ZIP_NAME)/webapps/tomee-plus-webapp-$(TOMEE_VERSION)/
+
+
+install-tomee: $(TOMCAT_ZIP)
+ cd tomee && mvn clean install -DskipTests=true
+
+install-all:
+ mvn clean && mvn install -DskipTests=true
+
+.PHONY: install-all install-tomee tomcat tomee start-tomee reload-tomee kill-tomee up-static
diff --git a/arquillian/arquillian-common/pom.xml b/arquillian/arquillian-common/pom.xml
index 1ed0eac..da8e4ed 100644
--- a/arquillian/arquillian-common/pom.xml
+++ b/arquillian/arquillian-common/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-common</artifactId>
diff --git a/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java b/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
index b7a713e..8984c88 100644
--- a/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
+++ b/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
@@ -20,11 +20,14 @@
import org.apache.openejb.BeanContext;
import org.apache.openejb.InjectionProcessor;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.arquillian.common.mockito.MockitoEnricher;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
import org.apache.webbeans.container.BeanManagerImpl;
import org.apache.webbeans.inject.AbstractInjectable;
import org.apache.webbeans.inject.OWBInjector;
@@ -65,7 +68,14 @@
AbstractInjectable.instanceUnderInjection.remove();
}
} catch (Throwable t) {
- // ignored
+ Logger.getInstance(LogCategory.OPENEJB, OpenEJBEnricher.class).error("Can't inject in " + testInstance.getClass(), t);
+ if (t instanceof RuntimeException) {
+ throw (RuntimeException) t;
+ }
+ if (t instanceof Exception) {
+ throw new OpenEJBRuntimeException((Exception) t);
+ }
+ // ignoring other cases for the moment, let manage some OWB API change without making all tests failing
}
}
diff --git a/arquillian/arquillian-openejb-embedded-4/pom.xml b/arquillian/arquillian-openejb-embedded-4/pom.xml
index eeb4c9c..cd06663 100644
--- a/arquillian/arquillian-openejb-embedded-4/pom.xml
+++ b/arquillian/arquillian-openejb-embedded-4/pom.xml
@@ -22,13 +22,13 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>arquillian-openejb-embedded-4</artifactId>
<name>OpenEJB :: Arquillian Adaptors Parent :: OpenEJB Container</name>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<dependencies>
<dependency>
@@ -84,7 +84,7 @@
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
- <version>2.0.0-alpha-1</version>
+ <version>2.0.0-alpha-5</version>
<scope>test</scope>
</dependency>
diff --git a/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java b/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
index 4808b09..c411a86 100644
--- a/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
+++ b/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBArchiveProcessor.java
@@ -94,7 +94,7 @@
prefix = WEB_INF;
final Map<ArchivePath, Node> content = archive.getContent(new IncludeRegExpPaths("/WEB-INF/lib/.*"));
- for (Map.Entry<ArchivePath, Node> node : content.entrySet()) {
+ for (final Map.Entry<ArchivePath, Node> node : content.entrySet()) {
final Asset asset = node.getValue().getAsset();
if (UrlAsset.class.isInstance(asset)) {
additionalPaths.add(get(URL.class, "url", asset));
@@ -241,7 +241,7 @@
return appModule;
}
- private static <T> T get(Class<T> fileClass, String attr, Asset asset) {
+ private static <T> T get(final Class<T> fileClass, final String attr, final Asset asset) {
try {
final Field field = asset.getClass().getDeclaredField(attr);
field.setAccessible(true);
@@ -254,7 +254,7 @@
private static org.apache.xbean.finder.archive.Archive finderArchive(final Node beansXml, final Archive<?> archive, final ClassLoader cl, final Collection<URL> additionalPaths) {
final List<Class<?>> classes = new ArrayList<Class<?>>();
final Map<ArchivePath, Node> content = archive.getContent(new IncludeRegExpPaths(".*.class"));
- for (Map.Entry<ArchivePath, Node> node : content.entrySet()) {
+ for (final Map.Entry<ArchivePath, Node> node : content.entrySet()) {
final String classname = name(node.getKey().get());
try {
classes.add(cl.loadClass(classname));
@@ -266,7 +266,7 @@
final Map<URL, List<String>> classesByUrl = new HashMap<URL, List<String>>();
final List<org.apache.xbean.finder.archive.Archive> archives = new ArrayList<org.apache.xbean.finder.archive.Archive>();
- for (URL url : DeploymentLoader.filterWebappUrls(additionalPaths.toArray(new URL[additionalPaths.size()]), null)) {
+ for (final URL url : DeploymentLoader.filterWebappUrls(additionalPaths.toArray(new URL[additionalPaths.size()]), null)) {
final List<String> currentClasses = new ArrayList<String>();
final org.apache.xbean.finder.archive.Archive newArchive = new FilteredArchive(new JarArchive(cl, url), new WebappAggregatedArchive.ScanXmlSaverFilter(false, null, currentClasses));
classesByUrl.put(url, currentClasses);
@@ -276,12 +276,13 @@
archives.add(new ClassesArchive(classes));
if (beansXml != null) {
final List<String> mainClasses = new ArrayList<String>();
- for (Class<?> clazz : classes) {
+ for (final Class<?> clazz : classes) {
mainClasses.add(clazz.getName());
}
// look org.apache.openejb.config.AnnotationDeployer.DiscoverAnnotatedBeans.hasBeansXml()
try {
- classesByUrl.put(new URL("file://foo.jar!/WEB-INF/classes/"), mainClasses);
+ final URL key = new URL("jar:file://foo.jar!/WEB-INF/classes/");
+ classesByUrl.put(key, mainClasses);
} catch (MalformedURLException mue) {
// no-op
}
@@ -302,7 +303,7 @@
private static class AssetSource implements ReadDescriptors.Source {
private Asset asset;
- private AssetSource(Asset asset) {
+ private AssetSource(final Asset asset) {
this.asset = asset;
}
diff --git a/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/CDIArquillianStandaloneTest.java b/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/CDIArquillianStandaloneTest.java
index 94ed19b..c230731 100644
--- a/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/CDIArquillianStandaloneTest.java
+++ b/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/CDIArquillianStandaloneTest.java
@@ -16,8 +16,6 @@
*/
package org.apache.openejb.arquillian.openejb;
-import javax.ejb.Singleton;
-import javax.inject.Inject;
import org.apache.openejb.loader.SystemInstance;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
@@ -28,6 +26,9 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import javax.ejb.Singleton;
+import javax.inject.Inject;
+
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -42,8 +43,8 @@
@Deployment
public static JavaArchive archive() {
return ShrinkWrap.create(JavaArchive.class, CDIArquillianStandaloneTest.class.getSimpleName().concat(".jar"))
- .addClasses(ABean.class, AnEJB.class)
- .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));
+ .addClasses(ABean.class, AnEJB.class)
+ .addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"));
}
@Test
@@ -57,7 +58,10 @@
assertNotNull(ejbFromCdiAnnotation);
}
- public static class ABean {}
+ public static class ABean {
+ }
- @Singleton public static class AnEJB {}
+ @Singleton
+ public static class AnEJB {
+ }
}
diff --git a/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java b/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java
index b236d6d..b868d54 100644
--- a/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java
+++ b/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/SWMavenWarTest.java
@@ -21,8 +21,7 @@
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
-import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
-import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -32,7 +31,6 @@
import javax.ejb.TransactionManagementType;
import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@RunWith(Arquillian.class)
@@ -41,10 +39,10 @@
public static WebArchive war() {
return ShrinkWrap.create(WebArchive.class, "sw-mvn.war")
.addClass(SWBean.class)
- .addAsLibraries(DependencyResolvers.use(MavenDependencyResolver.class)
- .loadEffectivePom("src/test/resources/a-pom.xml")
- .importAllDependencies()
- .resolveAsFiles());
+ .addAsLibraries(Maven.resolver()
+ .loadPomFromFile("src/test/resources/a-pom.xml")
+ .importRuntimeAndTestDependencies()
+ .asFile());
}
@Singleton
diff --git a/arquillian/arquillian-openejb-transaction-provider/pom.xml b/arquillian/arquillian-openejb-transaction-provider/pom.xml
index 745dbc3..a261039 100644
--- a/arquillian/arquillian-openejb-transaction-provider/pom.xml
+++ b/arquillian/arquillian-openejb-transaction-provider/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/arquillian/arquillian-tomee-common/pom.xml b/arquillian/arquillian-tomee-common/pom.xml
index 5061305..d49d387 100644
--- a/arquillian/arquillian-tomee-common/pom.xml
+++ b/arquillian/arquillian-tomee-common/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-common</artifactId>
<packaging>jar</packaging>
diff --git a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java
new file mode 100644
index 0000000..ca5a31b
--- /dev/null
+++ b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/RemoteInitialContextObserver.java
@@ -0,0 +1,91 @@
+/**
+ * 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.common;
+
+import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
+import org.jboss.arquillian.core.api.Instance;
+import org.jboss.arquillian.core.api.InstanceProducer;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.core.api.annotation.Observes;
+import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
+import org.jboss.arquillian.test.spi.event.enrichment.BeforeEnrichment;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Properties;
+
+public class RemoteInitialContextObserver {
+ private static final String REMOTE_INITIAL_CONTEXT_FACTORY = "org.apache.openejb.client.RemoteInitialContextFactory";
+
+ @Inject
+ @SuiteScoped
+ private InstanceProducer<Context> context;
+
+ @Inject
+ private Instance<ProtocolMetaData> protocolMetadata;
+
+ public void beforeSuite(@Observes final BeforeEnrichment event) {
+ final ProtocolMetaData metaData = protocolMetadata.get();
+ if(metaData == null || !metaData.hasContext(HTTPContext.class)) {
+ return;
+ }
+
+ try {
+ Thread.currentThread().getContextClassLoader().loadClass(REMOTE_INITIAL_CONTEXT_FACTORY);
+
+ final HTTPContext httpContext = metaData.getContexts(HTTPContext.class).iterator().next();
+ final Properties props = new Properties();
+ props.setProperty(Context.INITIAL_CONTEXT_FACTORY, REMOTE_INITIAL_CONTEXT_FACTORY);
+ props.setProperty(Context.PROVIDER_URL, "http://" + httpContext.getHost() + ":" + httpContext.getPort() + "/tomee/ejb");
+
+ context.set((Context) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class<?>[]{ Context.class }, new MultipleContextHandler(new InitialContext(), new InitialContext(props))));
+ } catch (ClassNotFoundException e) {
+ // no-op
+ } catch (NamingException e) {
+ // no-op
+ }
+ }
+
+ private static class MultipleContextHandler implements InvocationHandler {
+ private final InitialContext[] contexts;
+
+ public MultipleContextHandler(final InitialContext... initialContexts) {
+ contexts = initialContexts;
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ Exception err = null;
+ for (Context ctx : contexts) {
+ try {
+ return method.invoke(ctx, args);
+ } catch (Exception e) {
+ err = e;
+ }
+ }
+ if (err != null) {
+ throw err;
+ }
+ return null;
+ }
+ }
+}
diff --git a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
index f44d52a..503a462 100644
--- a/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
+++ b/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
@@ -262,23 +262,7 @@
@Override
public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
try {
- String tmpDir = configuration.getAppWorkingDir();
- File file, folderFile;
- int i = 0;
- do { // be sure we don't override something existing
- file = new File(tmpDir + File.separator + i++ + File.separator + archive.getName());
- if (file.isDirectory() || !file.getName().endsWith("ar")) {
- folderFile = file;
- } else {
- final String name = file.getName();
- folderFile = new File(file.getParentFile(), name.substring(0, name.length() - 4));
- }
- } while (file.getParentFile().exists()); // we will delete the parent (to clean even complicated unpacking)
- if (!file.getParentFile().exists() && !file.getParentFile().mkdirs()) {
- LOGGER.warning("can't create " + file.getParent());
- }
-
- archiveWithTestInfo(archive).as(ZipExporter.class).exportTo(file, true);
+ final File file = dumpFile(archive);
final String fileName = file.getName();
if (fileName.endsWith(".war")) { // ??
@@ -326,6 +310,32 @@
}
}
+ protected File dumpFile(final Archive<?> archive) {
+ String tmpDir = configuration.getAppWorkingDir();
+ Files.deleteOnExit(new File(tmpDir));
+
+ File file, folderFile;
+ int i = 0;
+ do { // be sure we don't override something existing
+ file = new File(tmpDir + File.separator + i++ + File.separator + archive.getName());
+ if (file.isDirectory() || !file.getName().endsWith("ar")) {
+ folderFile = file;
+ } else {
+ final String name = file.getName();
+ folderFile = new File(file.getParentFile(), name.substring(0, name.length() - 4));
+ }
+ } while (file.getParentFile().exists()); // we will delete the parent (to clean even complicated unpacking)
+ if (!file.getParentFile().exists() && !file.getParentFile().mkdirs()) {
+ LOGGER.warning("can't create " + file.getParent());
+ }
+
+ Files.deleteOnExit(file.getParentFile());
+
+ archiveWithTestInfo(archive).as(ZipExporter.class).exportTo(file, true);
+
+ return file;
+ }
+
private Collection<String> apps() {
final Collection<String> paths = new ArrayList<String>();
try {
diff --git a/arquillian/arquillian-tomee-embedded/pom.xml b/arquillian/arquillian-tomee-embedded/pom.xml
index 1b256cf..bc9c975 100644
--- a/arquillian/arquillian-tomee-embedded/pom.xml
+++ b/arquillian/arquillian-tomee-embedded/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-embedded</artifactId>
<packaging>jar</packaging>
diff --git a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
index 3cb9ebe..b689a74 100644
--- a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
+++ b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
@@ -43,23 +43,24 @@
private Container container;
+ @Override
public Class<EmbeddedTomEEConfiguration> getConfigurationClass() {
return EmbeddedTomEEConfiguration.class;
}
@Override
- public void setup(EmbeddedTomEEConfiguration configuration) {
+ public void setup(final EmbeddedTomEEConfiguration configuration) {
super.setup(configuration);
- container = new Container();
- container.setup(convertConfiguration(configuration));
+ this.container = new Container();
+ this.container.setup(this.convertConfiguration(configuration));
}
/*
* Not exactly as elegant as I'd like. Maybe we could have the EmbeddedServer configuration in openejb-core so all the adapters can use it.
* Depending on tomee-embedded is fine in this adapter, but less desirable in the others, as we'd get loads of stuff in the classpath we don't need.
*/
- private Configuration convertConfiguration(EmbeddedTomEEConfiguration tomeeConfiguration) {
- Configuration configuration = new Configuration();
+ private Configuration convertConfiguration(final EmbeddedTomEEConfiguration tomeeConfiguration) {
+ final Configuration configuration = new Configuration();
configuration.setDir(tomeeConfiguration.getDir());
configuration.setHttpPort(tomeeConfiguration.getHttpPort());
configuration.setStopPort(tomeeConfiguration.getStopPort());
@@ -73,7 +74,7 @@
@Override
public void start() throws LifecycleException {
try {
- container.start();
+ this.container.start();
SystemInstance.get().setComponent(AdditionalBeanDiscoverer.class, new TestClassDiscoverer());
} catch (Exception e) {
e.printStackTrace();
@@ -84,7 +85,7 @@
@Override
public void stop() throws LifecycleException {
try {
- container.stop();
+ this.container.stop();
} catch (Exception e) {
throw new LifecycleException("Unable to stop server", e);
}
@@ -96,21 +97,24 @@
}
@Override
- public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException {
+ public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentException {
try {
+ /* don't do it since it should be configurable
final File tempDir = Files.createTempDir();
- final String name = archive.getName();
final File file = new File(tempDir, name);
+ */
+ final String name = archive.getName();
+ final File file = this.dumpFile(archive);
ARCHIVES.put(archive, file);
- archiveWithTestInfo(archive).as(ZipExporter.class).exportTo(file, true);
+ this.archiveWithTestInfo(archive).as(ZipExporter.class).exportTo(file, true);
- container.deploy(name, file);
- final AppInfo info = container.getInfo(name);
- final String context = getArchiveNameWithoutExtension(archive);
+ this.container.deploy(name, file);
+ final AppInfo info = this.container.getInfo(name);
+ final String context = this.getArchiveNameWithoutExtension(archive);
- final HTTPContext httpContext = new HTTPContext(configuration.getHost(), configuration.getHttpPort());
+ final HTTPContext httpContext = new HTTPContext(this.configuration.getHost(), this.configuration.getHttpPort());
httpContext.add(new Servlet("ArquillianServletRunner", "/" + context));
- addServlets(httpContext, info);
+ this.addServlets(httpContext, info);
return new ProtocolMetaData().addContext(httpContext);
} catch (Exception e) {
@@ -120,16 +124,16 @@
}
@Override
- public void undeploy(Archive<?> archive) throws DeploymentException {
+ public void undeploy(final Archive<?> archive) throws DeploymentException {
try {
final String name = archive.getName();
- container.undeploy(name);
+ this.container.undeploy(name);
} catch (Exception e) {
e.printStackTrace();
throw new DeploymentException("Unable to undeploy", e);
}
- File file = ARCHIVES.remove(archive);
- File folder = new File(file.getParentFile(), file.getName().substring(0, file.getName().length() - 5));
+ final File file = ARCHIVES.remove(archive);
+ final File folder = new File(file.getParentFile(), file.getName().substring(0, file.getName().length() - 5));
if (folder.exists()) {
Files.delete(folder);
}
diff --git a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java
index 1113e4c..b3645d8 100644
--- a/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java
+++ b/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java
@@ -18,6 +18,7 @@
package org.apache.openejb.arquillian.embedded;
import org.apache.openejb.arquillian.common.ArquillianUtil;
+import org.apache.openejb.arquillian.common.RemoteInitialContextObserver;
import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
@@ -36,6 +37,7 @@
if (ArquillianUtil.isCurrentAdapter(ADAPTER)) {
builder.service(DeployableContainer.class, EmbeddedTomEEContainer.class)
.observer(DeploymentExceptionObserver.class)
+ .observer(RemoteInitialContextObserver.class)
.service(TestEnricher.class, TomEEInjectionEnricher.class)
.service(TransactionProvider.class, OpenEJBTransactionProvider.class)
.service(ResourceProvider.class, DeploymentExceptionProvider.class);
diff --git a/arquillian/arquillian-tomee-moviefun-example/pom.xml b/arquillian/arquillian-tomee-moviefun-example/pom.xml
index e5257b7..551c3d8 100644
--- a/arquillian/arquillian-tomee-moviefun-example/pom.xml
+++ b/arquillian/arquillian-tomee-moviefun-example/pom.xml
@@ -18,7 +18,7 @@
<parent>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-moviefun-example</artifactId>
<packaging>war</packaging>
diff --git a/arquillian/arquillian-tomee-moviefun-example/src/main/java/org/superbiz/moviefun/MoviesImpl.java b/arquillian/arquillian-tomee-moviefun-example/src/main/java/org/superbiz/moviefun/MoviesImpl.java
index 8dfd49b..2b15941 100644
--- a/arquillian/arquillian-tomee-moviefun-example/src/main/java/org/superbiz/moviefun/MoviesImpl.java
+++ b/arquillian/arquillian-tomee-moviefun-example/src/main/java/org/superbiz/moviefun/MoviesImpl.java
@@ -43,7 +43,8 @@
return entityManager.find(Movie.class, id);
}
- @Override public void clean() {
+ @Override
+ public void clean() {
entityManager.createQuery("delete from Movie").executeUpdate();
}
diff --git a/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesHtmlUnitTest.java b/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesHtmlUnitTest.java
index 95ea928..11e75ac 100644
--- a/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesHtmlUnitTest.java
+++ b/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesHtmlUnitTest.java
@@ -16,29 +16,28 @@
*/
package org.superbiz.moviefun;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Properties;
-
-import javax.ejb.embeddable.EJBContainer;
-
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.io.FileUtils;
import org.apache.tomee.embedded.EmbeddedTomEEContainer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import javax.ejb.embeddable.EJBContainer;
+import java.io.File;
+import java.io.IOException;
+import java.util.Properties;
+
+import static org.junit.Assert.assertTrue;
public class MoviesHtmlUnitTest {
-
- private static EJBContainer container;
+
+ private static EJBContainer container;
private static File webApp;
- @BeforeClass public static void start() throws IOException {
+ @BeforeClass
+ public static void start() throws IOException {
webApp = createWebApp();
Properties p = new Properties();
p.setProperty(EJBContainer.APP_NAME, "moviefun");
@@ -48,7 +47,8 @@
container = EJBContainer.createEJBContainer(p);
}
- @AfterClass public static void stop() {
+ @AfterClass
+ public static void stop() {
if (container != null) {
container.close();
}
@@ -60,7 +60,7 @@
}
}
}
-
+
private static File createWebApp() throws IOException {
File file = new File(System.getProperty("java.io.tmpdir") + "/tomee-" + Math.random());
if (!file.mkdirs() && !file.exists()) {
@@ -68,13 +68,13 @@
}
FileUtils.copyDirectory(new File("target/classes"), new File(file, "WEB-INF/classes"));
- FileUtils.copyDirectory(new File("target/test-libs"), new File(file, "WEB-INF/lib"));
+ FileUtils.copyDirectory(new File("target/test-libs"), new File(file, "WEB-INF/lib"));
FileUtils.copyDirectory(new File("src/main/webapp"), file);
return file;
}
- @Test
+ @Test
public void testShouldMakeSureWebappIsWorking() throws Exception {
WebClient webClient = new WebClient();
HtmlPage page = webClient.getPage("http://localhost:9999/moviefun/setup");
diff --git a/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesTest.java b/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesTest.java
index 650cb01..1b5634e 100644
--- a/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesTest.java
+++ b/arquillian/arquillian-tomee-moviefun-example/src/test/java/org/superbiz/moviefun/MoviesTest.java
@@ -32,9 +32,10 @@
public class MoviesTest {
private static EJBContainer ejbContainer;
- private static MoviesRemote movies;
+ private static MoviesRemote movies;
- @BeforeClass public static void setUp() throws Exception {
+ @BeforeClass
+ public static void setUp() throws Exception {
final Properties props = new Properties();
props.setProperty(DeploymentFilterable.CLASSPATH_INCLUDE, ".*arquillian-tomee-moviefun-example.*"); // arquillian-tomee excluded by default
ejbContainer = EJBContainer.createEJBContainer(props);
@@ -44,34 +45,38 @@
movies = (MoviesRemote) object;
}
- @AfterClass public static void tearDown() {
+ @AfterClass
+ public static void tearDown() {
if (ejbContainer != null) {
ejbContainer.close();
}
}
- @Before @After public void clean() {
+ @Before
+ @After
+ public void clean() {
movies.clean();
}
- @Test public void testShouldAddAMovie() throws Exception {
- Movie movie = new Movie();
- movie.setDirector("Michael Bay");
- movie.setGenre("Action");
- movie.setRating(9);
- movie.setTitle("Bad Boys");
- movie.setYear(1995);
- movies.addMovie(movie);
-
- assertEquals(1, movies.count());
- List<Movie> moviesFound = movies.findByTitle("Bad Boys");
-
- assertEquals(1, moviesFound.size());
- assertEquals("Michael Bay", moviesFound.get(0).getDirector());
- assertEquals("Action", moviesFound.get(0).getGenre());
- assertEquals(9, moviesFound.get(0).getRating());
- assertEquals("Bad Boys", moviesFound.get(0).getTitle());
- assertEquals(1995, moviesFound.get(0).getYear());
- }
-
+ @Test
+ public void testShouldAddAMovie() throws Exception {
+ Movie movie = new Movie();
+ movie.setDirector("Michael Bay");
+ movie.setGenre("Action");
+ movie.setRating(9);
+ movie.setTitle("Bad Boys");
+ movie.setYear(1995);
+ movies.addMovie(movie);
+
+ assertEquals(1, movies.count());
+ List<Movie> moviesFound = movies.findByTitle("Bad Boys");
+
+ assertEquals(1, moviesFound.size());
+ assertEquals("Michael Bay", moviesFound.get(0).getDirector());
+ assertEquals("Action", moviesFound.get(0).getGenre());
+ assertEquals(9, moviesFound.get(0).getRating());
+ assertEquals("Bad Boys", moviesFound.get(0).getTitle());
+ assertEquals(1995, moviesFound.get(0).getYear());
+ }
+
}
diff --git a/arquillian/arquillian-tomee-remote/pom.xml b/arquillian/arquillian-tomee-remote/pom.xml
index 068c87a..a0cc3b7 100644
--- a/arquillian/arquillian-tomee-remote/pom.xml
+++ b/arquillian/arquillian-tomee-remote/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-remote</artifactId>
<packaging>jar</packaging>
@@ -66,7 +66,7 @@
<groupId>org.apache.openejb</groupId>
<artifactId>apache-tomee</artifactId>
<type>zip</type>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<classifier>webprofile</classifier>
<scope>provided</scope>
</dependency>
@@ -95,7 +95,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-tomee-common</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
@@ -122,7 +122,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-common</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</dependency>
<dependency>
diff --git a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEExtension.java b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEExtension.java
index a0fc5ca..a136de3 100644
--- a/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEExtension.java
+++ b/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEExtension.java
@@ -18,6 +18,7 @@
package org.apache.tomee.arquillian.remote;
import org.apache.openejb.arquillian.common.ArquillianUtil;
+import org.apache.openejb.arquillian.common.RemoteInitialContextObserver;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
@@ -25,15 +26,41 @@
import org.jboss.arquillian.core.spi.LoadableExtension;
import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
-public class RemoteTomEEExtension implements LoadableExtension {
- private static final String ADAPTER = "tomee-remote";
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
- @Override public void register(ExtensionBuilder builder) {
+public class RemoteTomEEExtension implements LoadableExtension {
+
+ private static final String ADAPTER = "tomee-remote";
+ private static final AtomicBoolean registered = new AtomicBoolean(false);
+ private static final ReentrantLock lock = new ReentrantLock();
+
+ @Override
+ public void register(final ExtensionBuilder builder) {
if (ArquillianUtil.isCurrentAdapter(ADAPTER)) {
- builder.service(DeployableContainer.class, RemoteTomEEContainer.class)
- .service(AuxiliaryArchiveAppender.class, RemoteTomEEEJBEnricherArchiveAppender.class)
- .observer(DeploymentExceptionObserver.class)
- .service(ResourceProvider.class, DeploymentExceptionProvider.class);
+
+ final ReentrantLock l = lock;
+ l.lock();
+
+ try {
+
+ if (!registered.getAndSet(true)) {
+
+ try {
+ builder.observer(RemoteInitialContextObserver.class);
+ builder.observer(DeploymentExceptionObserver.class);
+ builder.service(DeployableContainer.class, RemoteTomEEContainer.class)
+ .service(AuxiliaryArchiveAppender.class, RemoteTomEEEJBEnricherArchiveAppender.class)
+ .service(ResourceProvider.class, DeploymentExceptionProvider.class);
+ } catch (IllegalArgumentException e) {
+ Logger.getLogger(RemoteTomEEExtension.class.getName()).log(Level.WARNING, "RemoteTomEEExtension: " + e.getMessage());
+ }
+ }
+ } finally {
+ l.unlock();
+ }
}
}
}
diff --git a/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java b/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java
index 256a3f0..ec1d171 100644
--- a/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java
+++ b/arquillian/arquillian-tomee-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java
@@ -33,7 +33,8 @@
ms = System.currentTimeMillis();
}
- @PostConstruct public void initId() {
+ @PostConstruct
+ public void initId() {
id = ID.incrementAndGet();
}
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-codi-tests/pom.xml b/arquillian/arquillian-tomee-tests/arquillian-tomee-codi-tests/pom.xml
index f02ff03..afee5e1 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-codi-tests/pom.xml
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-codi-tests/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>arquillian-tomee-tests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-codi-tests</artifactId>
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-config-tests/pom.xml b/arquillian/arquillian-tomee-tests/arquillian-tomee-config-tests/pom.xml
index 70f64a7..fe7d609 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-config-tests/pom.xml
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-config-tests/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>arquillian-tomee-tests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-config-tests</artifactId>
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxrs-tests/pom.xml b/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxrs-tests/pom.xml
index b325ba9..79dd8b9 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxrs-tests/pom.xml
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxrs-tests/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>arquillian-tomee-tests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-jaxrs-tests</artifactId>
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxws-tests/pom.xml b/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxws-tests/pom.xml
index 545e136..60d4ace 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxws-tests/pom.xml
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxws-tests/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>arquillian-tomee-tests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-jaxws-tests</artifactId>
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-jms-tests/pom.xml b/arquillian/arquillian-tomee-tests/arquillian-tomee-jms-tests/pom.xml
index e49cd9e..80aeae0 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-jms-tests/pom.xml
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-jms-tests/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>arquillian-tomee-tests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-jms-tests</artifactId>
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/pom.xml b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/pom.xml
index 0f593e1..9a92e22 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/pom.xml
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>arquillian-tomee-tests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-webprofile-tests</artifactId>
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java
index dc00e5f..d8f5362 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/ear/EarTest.java
@@ -44,6 +44,7 @@
/**
* @version $Rev$ $Date$
*/
+@SuppressWarnings("UseOfSystemOutOrSystemErr")
@RunWith(Arquillian.class)
public class EarTest {
@@ -102,7 +103,7 @@
private Bean bean;
@Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print(bean.getMessage());
}
}
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesListener.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesListener.java
index 43175aa..11b918f 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesListener.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesListener.java
@@ -30,7 +30,8 @@
*/
@WebListener
public class GetResourcesListener implements ServletContextListener {
- @Override public void contextInitialized(ServletContextEvent sce) {
+ @Override
+ public void contextInitialized(ServletContextEvent sce) {
GetResourcesHolder.RESOURCE_NUMBER = 0;
try {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
@@ -44,7 +45,8 @@
}
}
- @Override public void contextDestroyed(ServletContextEvent sce) {
- // no-op
+ @Override
+ public void contextDestroyed(ServletContextEvent sce) {
+ // no-op
}
}
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesServletExporter.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesServletExporter.java
index 2806f2c..8554d4b 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesServletExporter.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesServletExporter.java
@@ -28,7 +28,8 @@
@WebServlet(name = "get-resources", urlPatterns = "/get-resources")
public class GetResourcesServletExporter extends HttpServlet {
- @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/plain");
final PrintWriter writer = resp.getWriter();
writer.write("foundFromListener=" + GetResourcesHolder.RESOURCE_NUMBER);
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesTest.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesTest.java
index 5ba8934..c89e705 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesTest.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/getresources/GetResourcesTest.java
@@ -17,9 +17,6 @@
package org.apache.openejb.arquillian.tests.getresources;
-import java.io.IOException;
-import java.net.URL;
-import org.apache.ziplock.JarLocation;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
@@ -31,6 +28,9 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.io.IOException;
+import java.net.URL;
+
import static org.apache.openejb.arquillian.tests.Tests.assertOutput;
/**
@@ -51,11 +51,12 @@
.addAsResource(Thread.currentThread().getContextClassLoader().getResource("test.getresources"), "/config/test.getresources")
.addAsResource(Thread.currentThread().getContextClassLoader().getResource("test.getresources"), "/config/test.getresources2")
.setWebXML(new StringAsset(
- Descriptors.create(WebAppDescriptor.class)
- .version("3.0").exportAsString()));
+ Descriptors.create(WebAppDescriptor.class)
+ .version("3.0").exportAsString()));
}
- @Test public void check() throws IOException {
+ @Test
+ public void check() throws IOException {
assertOutput(url.toExternalForm() + "get-resources", "foundFromListener=1");
assertOutput(url.toExternalForm() + "get-resources", "servletContextGetResource=ok");
}
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/hibernate/HibernateTest.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/hibernate/HibernateTest.java
index 3cfb02c..f43ccfa 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/hibernate/HibernateTest.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/hibernate/HibernateTest.java
@@ -28,17 +28,17 @@
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
-import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
import org.jboss.shrinkwrap.resolver.api.ResolutionException;
-import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
-import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionFilter;
-import org.jboss.shrinkwrap.resolver.api.maven.filter.ScopeFilter;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+import org.jboss.shrinkwrap.resolver.api.maven.ScopeType;
+import org.jboss.shrinkwrap.resolver.api.maven.strategy.AcceptScopesStrategy;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.persistence.EntityManagerFactory;
import java.io.File;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@RunWith(Arquillian.class)
@@ -47,50 +47,51 @@
public static WebArchive war() {
File[] hibernate;
try { // try offline first since it is generally faster
- hibernate = DependencyResolvers.use(MavenDependencyResolver.class)
- .goOffline()
- .loadEffectivePom("src/test/resources/hibernate-pom.xml")
- .importAnyDependencies(new ScopeFilter("compile"))
- .resolveAsFiles();
+ hibernate = Maven.resolver()
+ .offline(true)
+ .loadPomFromFile("src/test/resources/hibernate-pom.xml")
+ .importRuntimeAndTestDependencies(new AcceptScopesStrategy(ScopeType.COMPILE))
+ .asFile();
} catch (ResolutionException re) { // try on central
- hibernate = DependencyResolvers.use(MavenDependencyResolver.class)
- .loadEffectivePom("src/test/resources/hibernate-pom.xml")
- .importAnyDependencies(new ScopeFilter("compile"))
- .resolveAsFiles();
+ hibernate = Maven.resolver()
+ .loadPomFromFile("src/test/resources/hibernate-pom.xml")
+ .importRuntimeAndTestDependencies(new AcceptScopesStrategy(ScopeType.COMPILE))
+ .asFile();
}
return ShrinkWrap.create(WebArchive.class, "hibernate-app.war")
- .addAsWebInfResource(new StringAsset("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<persistence version=\"2.0\"\n" +
- " xmlns=\"http://java.sun.com/xml/ns/persistence\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence" +
- " http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\n" +
- " <persistence-unit name=\"hibernate\">\n" +
- " <provider>org.hibernate.ejb.HibernatePersistence</provider>\n" +
- " <exclude-unlisted-classes>true</exclude-unlisted-classes>\n" +
- " <properties>\n" +
- " <property name=\"hibernate.hbm2ddl.auto\" value=\"create-drop\" />\n" +
- " </properties>\n" +
- " </persistence-unit>\n" +
- "</persistence>"), ArchivePaths.create("persistence.xml"))
- .addAsLibraries(hibernate)
- .addAsLibraries(JarLocation.jarLocation(ResolutionException.class))
- .addAsLibraries(JarLocation.jarLocation(MavenResolutionFilter.class));
+ .addAsWebInfResource(new StringAsset("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<persistence version=\"2.0\"\n" +
+ " xmlns=\"http://java.sun.com/xml/ns/persistence\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence" +
+ " http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\n" +
+ " <persistence-unit name=\"hibernate\">\n" +
+ " <provider>org.hibernate.ejb.HibernatePersistence</provider>\n" +
+ " <exclude-unlisted-classes>true</exclude-unlisted-classes>\n" +
+ " <properties>\n" +
+ " <property name=\"hibernate.hbm2ddl.auto\" value=\"create-drop\" />\n" +
+ " </properties>\n" +
+ " </persistence-unit>\n" +
+ "</persistence>"), ArchivePaths.create("persistence.xml"))
+ .addAsLibraries(hibernate)
+ .addAsLibraries(JarLocation.jarLocation(ResolutionException.class))
+ .addAsLibraries(JarLocation.jarLocation(org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter.class));
}
@Test // using an internal lookup because in tomee embedded new InitialContext() is not guaranteed
public void checkEmIsHibernateOne() throws Exception {
AppInfo info = null;
- for (AppInfo app : SystemInstance.get().getComponent(Assembler.class).getDeployedApplications()) {
+ for (final AppInfo app : SystemInstance.get().getComponent(Assembler.class).getDeployedApplications()) {
if (app.appId.endsWith("hibernate-app")) {
info = app;
break;
}
}
+ assertNotNull(info);
final EntityManagerFactory emf = (EntityManagerFactory)
- SystemInstance.get().getComponent(ContainerSystem.class)
- .getJNDIContext().lookup(Assembler.PERSISTENCE_UNIT_NAMING_CONTEXT + info.persistenceUnits.iterator().next().id);
+ SystemInstance.get().getComponent(ContainerSystem.class)
+ .getJNDIContext().lookup(Assembler.PERSISTENCE_UNIT_NAMING_CONTEXT + info.persistenceUnits.iterator().next().id);
assertTrue(((ReloadableEntityManagerFactory) emf).getDelegate().getClass().getName().startsWith("org.hibernate."));
}
}
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/tomcat/ResourceMergeTest.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/tomcat/ResourceMergeTest.java
index 0dcb6eb..13c283b 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/tomcat/ResourceMergeTest.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/tomcat/ResourceMergeTest.java
@@ -26,26 +26,29 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import javax.annotation.Resource;
import javax.naming.NamingException;
+import static org.junit.Assert.assertNotNull;
+
@RunWith(Arquillian.class)
public class ResourceMergeTest {
@Deployment
public static WebArchive war() {
return ShrinkWrap.create(WebArchive.class, "resource.war")
- .addClasses(SomeResource.class)
- .setWebXML(new StringAsset(Descriptors.create(WebAppDescriptor.class)
- .version("3.0")
- .getOrCreateResourceRef()
- .resRefName("some-resource")
- .mappedName("some-resource")
- .resType(SomeResource.class.getName())
- .up()
- .exportAsString()));
+ .addClasses(SomeResource.class, SomeResourceFactory.class)
+ .add(new StringAsset("<Context>\n" +
+ " <Resource name=\"some-resource\"\n" +
+ " type=\"" + SomeResource.class.getName() + "\"\n" +
+ " factory=\"" + SomeResourceFactory.class.getName() + "\"/>\n" +
+ "</Context>"), "META-INF/context.xml");
}
+ @Resource(name = "some-resource")
+ private SomeResource sr;
+
@Test
- public void noExceptionWereThrownDuringDeployment() throws NamingException {
- // no-op
+ public void checkResource() throws NamingException {
+ assertNotNull(sr);
}
}
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/tomcat/SomeResourceFactory.java
similarity index 65%
copy from examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java
copy to arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/tomcat/SomeResourceFactory.java
index 5e12908..2bcbd26 100644
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/tomcat/SomeResourceFactory.java
@@ -14,11 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.superbiz.moviefun;
+package org.apache.openejb.arquillian.tests.tomcat;
-/**
- * @version $Revision$ $Date$
- */
-public interface Notifier {
- void notify(String message);
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.spi.ObjectFactory;
+import java.util.Hashtable;
+
+public class SomeResourceFactory implements ObjectFactory {
+ @Override
+ public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {
+ return new SomeResource();
+ }
}
diff --git a/arquillian/arquillian-tomee-tests/pom.xml b/arquillian/arquillian-tomee-tests/pom.xml
index 9c4f515..a32f60b 100644
--- a/arquillian/arquillian-tomee-tests/pom.xml
+++ b/arquillian/arquillian-tomee-tests/pom.xml
@@ -15,7 +15,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-tests</artifactId>
<packaging>pom</packaging>
@@ -41,7 +41,7 @@
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
- <version>2.0.0-alpha-1</version>
+ <version>2.0.0-alpha-5</version>
<scope>test</scope>
</dependency>
@@ -99,7 +99,7 @@
<dependency> <!-- tomee-embedded needs it + dependencies but tomee-*-remote doesn't need dependencies so to avoid conflicts bringing it back here -->
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
<!-- just to get it in the correct order -->
@@ -219,13 +219,13 @@
}
}
- println("Embedded adapter activated ? " + !props['skip.embedded'])
- println("Remote webprofile adapter activated ? " + !props['skip.remote.webprofile'])
- println("Remote jaxrs adapter activated ? " + !props['skip.remote.jaxrs'])
- println("Remote plus adapter activated ? " + !props['skip.remote.plus'])
- println("Webapp weprofile adapter activated ? " + !props['skip.webapp.webprofile'])
- println("Webapp jaxrs adapter activated ? " + !props['skip.webapp.jaxrs'])
- println("Webapp plus adapter activated ? " + !props['skip.webapp.plus'])
+ println("Embedded adapter activated ? " + !Boolean.parseBoolean(props['skip.embedded']))
+ println("Remote webprofile adapter activated ? " + !Boolean.parseBoolean(props['skip.remote.webprofile']))
+ println("Remote jaxrs adapter activated ? " + !Boolean.parseBoolean(props['skip.remote.jaxrs']))
+ println("Remote plus adapter activated ? " + !Boolean.parseBoolean(props['skip.remote.plus']))
+ println("Webapp weprofile adapter activated ? " + !Boolean.parseBoolean(props['skip.webapp.webprofile']))
+ println("Webapp jaxrs adapter activated ? " + !Boolean.parseBoolean(props['skip.webapp.jaxrs']))
+ println("Webapp plus adapter activated ? " + !Boolean.parseBoolean(props['skip.webapp.plus']))
</source>
</configuration>
</plugin>
@@ -356,7 +356,6 @@
<skip>true</skip>
<parallel>none</parallel>
<threadCount>1</threadCount>
-<includes><include>**/Ear*</include></includes>
</configuration>
</plugin>
</plugins>
diff --git a/arquillian/arquillian-tomee-webapp-remote/pom.xml b/arquillian/arquillian-tomee-webapp-remote/pom.xml
index 1214087..662934d 100644
--- a/arquillian/arquillian-tomee-webapp-remote/pom.xml
+++ b/arquillian/arquillian-tomee-webapp-remote/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>arquillian-tomee-webapp-remote</artifactId>
<packaging>jar</packaging>
diff --git a/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java b/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
index 8d01e2d..a0b353d 100644
--- a/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
+++ b/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
@@ -143,7 +143,7 @@
.append(configuration.getHost())
.append(":")
.append(configuration.getHttpPort())
- .append("/tomee/installer?action=install&auto=true");
+ .append("/tomee/installer");
installer.addTomEEAdminConfInTomcatUsers(true);
diff --git a/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java b/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java
index 344b943..aee7a76 100644
--- a/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java
+++ b/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java
@@ -18,6 +18,7 @@
package org.apache.tomee.arquillian.webapp;
import org.apache.openejb.arquillian.common.ArquillianUtil;
+import org.apache.openejb.arquillian.common.RemoteInitialContextObserver;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
@@ -25,16 +26,42 @@
import org.jboss.arquillian.core.spi.LoadableExtension;
import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
public class TomEEWebappExtension implements LoadableExtension {
+
private static final String ADAPTER = "tomee-webapp";
+ private static final AtomicBoolean registered = new AtomicBoolean(false);
+ private static final ReentrantLock lock = new ReentrantLock();
@Override
- public void register(ExtensionBuilder builder) {
+ public void register(final ExtensionBuilder builder) {
if (ArquillianUtil.isCurrentAdapter(ADAPTER)) {
- builder.service(DeployableContainer.class, TomEEWebappContainer.class)
- .service(AuxiliaryArchiveAppender.class, TomEEWebappEJBEnricherArchiveAppender.class)
- .observer(DeploymentExceptionObserver.class)
- .service(ResourceProvider.class, DeploymentExceptionProvider.class);
+
+ final ReentrantLock l = lock;
+ l.lock();
+
+ try {
+
+ if (!registered.getAndSet(true)) {
+
+ try {
+ builder.observer(DeploymentExceptionObserver.class);
+ builder.observer(RemoteInitialContextObserver.class);
+
+ builder.service(DeployableContainer.class, TomEEWebappContainer.class)
+ .service(AuxiliaryArchiveAppender.class, TomEEWebappEJBEnricherArchiveAppender.class)
+ .service(ResourceProvider.class, DeploymentExceptionProvider.class);
+ } catch (IllegalArgumentException e) {
+ Logger.getLogger(TomEEWebappExtension.class.getName()).log(Level.WARNING, "TomEEWebappExtension: " + e.getMessage());
+ }
+ }
+ } finally {
+ l.unlock();
+ }
}
}
}
diff --git a/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java b/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java
index f8eeda9..05181d6 100644
--- a/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java
+++ b/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/TomEEContainerWithInstallerServletTest.java
@@ -30,9 +30,6 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import javax.ejb.EJB;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
import java.net.URL;
@RunWith(Arquillian.class)
@@ -42,16 +39,17 @@
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
- .addClass(TestServlet.class).addClass(TestEjb.class).addClass(TomEEContainerWithInstallerServletTest.class)
+ .addClass(TestServlet.class).addClass(TestEjb.class).addClass(TomEEContainerWithInstallerServletTest.class)
.setWebXML(new StringAsset(
- Descriptors.create(WebAppDescriptor.class)
- .version("3.0")
+ Descriptors.create(WebAppDescriptor.class)
+ .version("3.0")
.createServlet().servletName("servlet-ejb").servletClass(TestServlet.class.getName()).up()
.createServletMapping().servletName("servlet-ejb").urlPattern("/ejb").up()
.exportAsString()));
}
- @ArquillianResource private URL url;
+ @ArquillianResource
+ private URL url;
@Test
public void testShouldBeAbleToAccessServletAndEjb() throws Exception {
diff --git a/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java b/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java
index 256a3f0..ec1d171 100644
--- a/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java
+++ b/arquillian/arquillian-tomee-webapp-remote/src/test/java/org/apache/openejb/arquillian/session/PojoSessionScoped.java
@@ -33,7 +33,8 @@
ms = System.currentTimeMillis();
}
- @PostConstruct public void initId() {
+ @PostConstruct
+ public void initId() {
id = ID.incrementAndGet();
}
diff --git a/arquillian/pom.xml b/arquillian/pom.xml
index 30fa601..3f4108b 100644
--- a/arquillian/pom.xml
+++ b/arquillian/pom.xml
@@ -23,18 +23,18 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<artifactId>arquillian</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<packaging>pom</packaging>
<name>OpenEJB :: Arquillian Adaptors Parent</name>
<properties>
<version.arquillian>1.0.3.Final</version.arquillian>
<version.shrinkwrap.descriptor>2.0.0-alpha-4</version.shrinkwrap.descriptor>
- <version.shrinkwrap.shrinkwrap>1.1.1-alpha-1</version.shrinkwrap.shrinkwrap>
+ <version.shrinkwrap.shrinkwrap>1.1.1-alpha-2</version.shrinkwrap.shrinkwrap>
</properties>
<modules>
diff --git a/arquillian/ziplock/pom.xml b/arquillian/ziplock/pom.xml
index 1ccd425..ee998cf 100644
--- a/arquillian/ziplock/pom.xml
+++ b/arquillian/ziplock/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>arquillian</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<artifactId>ziplock</artifactId>
<packaging>jar</packaging>
diff --git a/arquillian/ziplock/src/main/java/org/apache/ziplock/IO.java b/arquillian/ziplock/src/main/java/org/apache/ziplock/IO.java
index 2e12f33..31bfea4 100644
--- a/arquillian/ziplock/src/main/java/org/apache/ziplock/IO.java
+++ b/arquillian/ziplock/src/main/java/org/apache/ziplock/IO.java
@@ -42,49 +42,49 @@
*/
public class IO {
- public static String readString(URL url) throws IOException {
+ public static String readString(final URL url) throws IOException {
final InputStream in = url.openStream();
try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(in));
return reader.readLine();
} finally {
close(in);
}
}
- public static String readString(File file) throws IOException {
+ public static String readString(final File file) throws IOException {
final FileReader in = new FileReader(file);
try {
- BufferedReader reader = new BufferedReader(in);
+ final BufferedReader reader = new BufferedReader(in);
return reader.readLine();
} finally {
close(in);
}
}
- public static String slurp(String fileName) throws IOException {
+ public static String slurp(final String fileName) throws IOException {
return slurp(new File(fileName));
}
- public static String slurp(File file) throws IOException {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ public static String slurp(final File file) throws IOException {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
copy(file, out);
return new String(out.toByteArray());
}
- public static String slurp(InputStream in) throws IOException {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ public static String slurp(final InputStream in) throws IOException {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
copy(in, out);
return new String(out.toByteArray(), "UTF-8");
}
- public static String slurp(URL url) throws IOException {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ public static String slurp(final URL url) throws IOException {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
copy(url.openStream(), out);
return new String(out.toByteArray());
}
- public static void writeString(File file, String string) throws IOException {
+ public static void writeString(final File file, final String string) throws IOException {
final FileWriter out = new FileWriter(file);
try {
final BufferedWriter bufferedWriter = new BufferedWriter(out);
@@ -99,7 +99,7 @@
}
}
- public static void copy(File from, OutputStream to) throws IOException {
+ public static void copy(final File from, final OutputStream to) throws IOException {
final InputStream read = read(from);
try {
copy(read, to);
@@ -108,7 +108,7 @@
}
}
- public static void copy(InputStream from, File to) throws IOException {
+ public static void copy(final InputStream from, final File to) throws IOException {
final OutputStream write = write(to);
try {
copy(from, write);
@@ -117,7 +117,7 @@
}
}
- public static void copy(InputStream from, File to, boolean append) throws IOException {
+ public static void copy(final InputStream from, final File to, final boolean append) throws IOException {
final OutputStream write = write(to, append);
try {
copy(from, write);
@@ -126,8 +126,8 @@
}
}
- public static void copy(InputStream from, OutputStream to) throws IOException {
- byte[] buffer = new byte[1024];
+ public static void copy(final InputStream from, final OutputStream to) throws IOException {
+ final byte[] buffer = new byte[1024];
int length = 0;
while ((length = from.read(buffer)) != -1) {
to.write(buffer, 0, length);
@@ -135,17 +135,17 @@
to.flush();
}
- public static ZipOutputStream zip(File file) throws IOException {
+ public static ZipOutputStream zip(final File file) throws IOException {
final OutputStream write = write(file);
return new ZipOutputStream(write);
}
- public static ZipInputStream unzip(File file) throws IOException {
+ public static ZipInputStream unzip(final File file) throws IOException {
final InputStream read = read(file);
return new ZipInputStream(read);
}
- public static void close(Closeable closeable) throws IOException {
+ public static void close(final Closeable closeable) throws IOException {
if (closeable == null) return;
try {
if (closeable instanceof Flushable) {
@@ -159,7 +159,7 @@
}
}
- public static boolean delete(File file) {
+ public static boolean delete(final File file) {
if (file == null) return false;
if (!file.delete()) {
System.err.println("Delete failed " + file.getAbsolutePath());
@@ -169,17 +169,17 @@
return true;
}
- public static OutputStream write(File destination) throws FileNotFoundException {
+ public static OutputStream write(final File destination) throws FileNotFoundException {
final OutputStream out = new FileOutputStream(destination);
return new BufferedOutputStream(out, 32768);
}
- public static OutputStream write(File destination, boolean append) throws FileNotFoundException {
+ public static OutputStream write(final File destination, final boolean append) throws FileNotFoundException {
final OutputStream out = new FileOutputStream(destination, append);
return new BufferedOutputStream(out, 32768);
}
- public static InputStream read(File source) throws FileNotFoundException {
+ public static InputStream read(final File source) throws FileNotFoundException {
final InputStream in = new FileInputStream(source);
return new BufferedInputStream(in, 32768);
}
diff --git a/assembly/openejb-lite/pom.xml b/assembly/openejb-lite/pom.xml
index f3219f5..696b982 100644
--- a/assembly/openejb-lite/pom.xml
+++ b/assembly/openejb-lite/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>assembly</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-lite</artifactId>
diff --git a/assembly/openejb-standalone/pom.xml b/assembly/openejb-standalone/pom.xml
index 22b50d2..9800cc9 100644
--- a/assembly/openejb-standalone/pom.xml
+++ b/assembly/openejb-standalone/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>assembly</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-standalone</artifactId>
diff --git a/assembly/pom.xml b/assembly/pom.xml
index 2d95b92..63e074b 100644
--- a/assembly/pom.xml
+++ b/assembly/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>assembly</artifactId>
diff --git a/checkstyle.xml b/checkstyle.xml
new file mode 100644
index 0000000..4cf9a6f
--- /dev/null
+++ b/checkstyle.xml
@@ -0,0 +1,34 @@
+<!DOCTYPE module SYSTEM "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
+<!--
+ 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.
+ -->
+<module name="Checker">
+ <module name="TreeWalker">
+
+ <!-- @MyAnnotation public void ....-->
+ <module name="RegexpSinglelineJava">
+ <property name="format" value="^ +@[^ ]+ [a-zA-Z]"/>
+ <property name="ignoreComments" value="true"/>
+ </module>
+
+ <!-- @MyAnnotation(foo = "bar") public void ....-->
+ <module name="RegexpSinglelineJava">
+ <property name="format" value="^ +@[^ (]+ *\([^)]+ *\) +[a-zA-Z]"/>
+ <property name="ignoreComments" value="true"/>
+ </module>
+
+ </module>
+</module>
\ No newline at end of file
diff --git a/container/openejb-api/pom.xml b/container/openejb-api/pom.xml
index a9196d5..53562c8 100644
--- a/container/openejb-api/pom.xml
+++ b/container/openejb-api/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/container/openejb-core/pom.xml b/container/openejb-core/pom.xml
index c5a1538..9d823b5 100644
--- a/container/openejb-core/pom.xml
+++ b/container/openejb-core/pom.xml
@@ -25,7 +25,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-core</artifactId>
@@ -592,15 +592,15 @@
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
</dependency>
- <dependency>
+ <!--<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa</artifactId>
+ </dependency>-->
+ <dependency>
+ <groupId>org.apache.openejb.patch</groupId>
+ <artifactId>openjpa-asm-shaded</artifactId>
+ <version>2.2.0</version>
</dependency>
- <!--<dependency>-->
- <!--<groupId>org.apache.openejb.patch</groupId>-->
- <!--<artifactId>openjpa-asm-shaded</artifactId>-->
- <!--<version>2.2.0</version>-->
- <!--</dependency>-->
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-core</artifactId>
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java b/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
index 9453684..51c21e0 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
@@ -153,11 +153,25 @@
} catch (NamingException e) {
throw new IllegalStateException(e);
}
+
+ final Assembler assembler = SystemInstance.get().getComponent(Assembler.class);
+ if (assembler != null) {
+ for (AppInfo info : assembler.getDeployedApplications()) {
+ try {
+ assembler.destroyApplication(info);
+ } catch (UndeployException e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+ }
+
try {
stopContexts(webBeanContext.getContextsService(), servletContext, session);
} catch (Exception e) {
logger.warning("can't stop all CDI contexts", e);
}
+
+ logger.info("Destroying OpenEJB container");
OpenEJB.destroy();
instance = null;
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
index 75f9352..aa68187 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
@@ -23,7 +23,6 @@
import org.apache.openejb.config.sys.AdditionalDeployments;
import org.apache.openejb.config.sys.Deployments;
import org.apache.openejb.config.sys.JaxbOpenejb;
-import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.LogCategory;
@@ -225,7 +224,7 @@
if (file.isDirectory()) {
deps.setDir(file.getAbsolutePath());
} else {
- deps.setJar(file.getAbsolutePath());
+ deps.setFile(file.getAbsolutePath());
}
File config;
@@ -265,11 +264,11 @@
if (deps.getDir() != null && deps.getDir().equals(current.getDir())) {
it.remove();
break;
- } else if (deps.getJar() != null && deps.getJar().equals(current.getJar())) {
+ } else if (deps.getFile() != null && deps.getFile().equals(current.getFile())) {
it.remove();
break;
} else { // exploded dirs
- String jar = deps.getJar();
+ String jar = deps.getFile();
if (jar != null && jar.length() > 3 && jar.substring(0, jar.length() - 4).equals(deps.getDir())) {
it.remove();
break;
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
index bd44204..0b02020 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
@@ -17,6 +17,8 @@
package org.apache.openejb.assembler.classic;
import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.Set;
@@ -30,6 +32,7 @@
public String appId;
public String path;
+ public Set<String> paths = new LinkedHashSet<String>();
public boolean autoDeploy = true;
public boolean delegateFirst = true;
public boolean standaloneModule;
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
index 71cf244..c3f442d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
@@ -40,6 +40,8 @@
import org.apache.openejb.assembler.classic.event.AssemblerBeforeApplicationDestroyed;
import org.apache.openejb.assembler.classic.event.AssemblerCreated;
import org.apache.openejb.assembler.classic.event.AssemblerDestroyed;
+import org.apache.openejb.assembler.classic.event.ContainerSystemPostCreate;
+import org.apache.openejb.assembler.classic.event.ContainerSystemPreDestroy;
import org.apache.openejb.assembler.monitoring.JMXContainer;
import org.apache.openejb.async.AsynchronousPool;
import org.apache.openejb.cdi.CdiAppContextsService;
@@ -443,6 +445,8 @@
}
}
}
+
+ SystemInstance.get().fireEvent(new ContainerSystemPostCreate());
}
public boolean isDeployed(final String path) {
@@ -1100,6 +1104,8 @@
@Override
public synchronized void destroy() {
+ SystemInstance.get().fireEvent(new ContainerSystemPreDestroy());
+
try {
EjbTimerServiceImpl.shutdown();
} catch (Exception e) {
@@ -2173,7 +2179,7 @@
}
}
- private static class DeploymentListenerObserver {
+ public static class DeploymentListenerObserver {
private final DeploymentListener delegate;
public DeploymentListenerObserver(final DeploymentListener deploymentListener) {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java
index 27b4be9..020de03 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java
@@ -25,4 +25,6 @@
public final List<AppInfo> applications = new ArrayList<AppInfo>();
+ public final List<String> autoDeploy = new ArrayList<String>();
+
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityManagerFactoryCallable.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityManagerFactoryCallable.java
index 8959147..912f1f3 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityManagerFactoryCallable.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EntityManagerFactoryCallable.java
@@ -20,6 +20,7 @@
import org.apache.openejb.persistence.PersistenceUnitInfoImpl;
import javax.persistence.EntityManagerFactory;
+import javax.persistence.ValidationMode;
import javax.persistence.spi.PersistenceProvider;
import java.util.HashMap;
import java.util.Map;
@@ -48,7 +49,9 @@
// Create entity manager factories with the validator factory
final Map<String, Object> properties = new HashMap<String, Object>();
- properties.put("javax.persistence.validator.ValidatorFactory", new ValidatorFactoryWrapper());
+ if (!ValidationMode.NONE.equals(unitInfo.getValidationMode())) {
+ properties.put("javax.persistence.validator.ValidatorFactory", new ValidatorFactoryWrapper());
+ }
EntityManagerFactory emf = persistenceProvider.createContainerEntityManagerFactory(unitInfo, properties);
if ((unitInfo.getProperties() != null
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
index 33a3ab9..f64cddf 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiBuilder.java
@@ -170,6 +170,7 @@
public void begin(BeanContext beanContext);
public String getName(Class interfce, String key, Interface type);
+
public Map<String, String> getNames(Class interfce, Interface type);
public void end();
@@ -185,7 +186,7 @@
// Set in begin()
private BeanContext bean;
-
+
// Set in begin()
private HashMap<String, Map<String, StringTemplate>> templates;
@@ -243,7 +244,7 @@
private Map<String, StringTemplate> addTemplate(Map<String, StringTemplate> map, String key, StringTemplate template) {
Map<String, StringTemplate> m = map;
if (m == null) {
- m = new TreeMap<String, StringTemplate> ();
+ m = new TreeMap<String, StringTemplate>();
}
m.put(key, template);
return m;
@@ -251,7 +252,7 @@
public void begin(BeanContext bean) {
this.bean = bean;
-
+
EnterpriseBeanInfo beanInfo = beanInfos.get(bean.getDeploymentID());
templates = new HashMap<String, Map<String, StringTemplate>>();
@@ -307,22 +308,23 @@
contextData.put("interfaceClass.packageName", packageName(interfce));
StringTemplate stringTemplate = null;
-
+
if (template.containsKey(key)) {
stringTemplate = template.get(key);
} else {
stringTemplate = template.get(DEFAULT_NAME_KEY);
}
-
- if (stringTemplate == null){
+
+ if (stringTemplate == null) {
stringTemplate = template.values().iterator().next();
- }
-
- return stringTemplate.apply(contextData);
-
+ }
+
+ return stringTemplate.apply(contextData);
+
}
- @Override public Map<String, String> getNames(Class interfce, Interface type) {
+ @Override
+ public Map<String, String> getNames(Class interfce, Interface type) {
Map<String, String> names = new HashMap<String, String>();
for (String key : KEYS.split(",")) {
names.put(key, getName(interfce, key, type));
@@ -360,7 +362,8 @@
return id;
}
- @Override public Map<String, String> getNames(Class interfce, Interface type) {
+ @Override
+ public Map<String, String> getNames(Class interfce, Interface type) {
Map<String, String> names = new HashMap<String, String>();
names.put("", getName(interfce, DEFAULT_NAME_KEY, type));
return names;
@@ -409,7 +412,7 @@
// if the user inject the EJB using a parent class
if (!bean.getBeanClass().isInterface()) {
- for(Class<?> clazz = bean.getBeanClass().getSuperclass(); !clazz.equals(Object.class); clazz = clazz.getSuperclass()) {
+ for (Class<?> clazz = bean.getBeanClass().getSuperclass(); !clazz.equals(Object.class); clazz = clazz.getSuperclass()) {
optionalBind(bindings, ref, "openejb/Deployment/" + format(id, clazz.getName(), InterfaceType.LOCALBEAN));
}
}
@@ -449,7 +452,7 @@
if (USE_OLD_JNDI_NAMES) {
bean.getModuleContext().getAppContext().getBindings().put(name, ref);
}
-
+
if (simpleNameRef == null) simpleNameRef = ref;
}
} catch (NamingException e) {
@@ -475,7 +478,7 @@
if (USE_OLD_JNDI_NAMES) {
bean.getModuleContext().getAppContext().getBindings().put(name, ref);
}
-
+
if (simpleNameRef == null) simpleNameRef = ref;
}
} catch (NamingException e) {
@@ -517,7 +520,7 @@
bind("openejb/remote/" + name, ref, bindings, beanInfo, homeInterface);
optionalBind(bindings, ref, "openejb/Deployment/" + format(id, homeInterface.getName(), InterfaceType.EJB_HOME));
-
+
name = "openejb/Deployment/" + format(id, bean.getRemoteInterface().getName());
bind(name, ref, bindings, beanInfo, homeInterface);
@@ -673,8 +676,7 @@
moduleContext.bind("module/" + beanName, ref);
application.getBindings().put("module/" + beanName, ref);
}
-
-
+
/**
* This may not be that performant, but it's certain to be faster than the
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
index 9101fea..f1d9406 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
@@ -116,7 +116,8 @@
|| SystemInstance.get().getOptions().get(OPENEJB_JPA_CRITERIA_LOG_JPQL_LEVEL, prop.getProperty(OPENEJB_JPA_CRITERIA_LOG_JPQL_LEVEL, null)) != null;
}
- @Override public EntityManager createEntityManager() {
+ @Override
+ public EntityManager createEntityManager() {
EntityManager em;
try {
em = delegate.createEntityManager();
@@ -499,7 +500,8 @@
ValidationMode mode = ValidationMode.valueOf(value.trim().toUpperCase());
reloadableEntityManagerFactory.setValidationMode(mode);
} catch (Exception iae) {
- // ignored
+ LOGGER.warning("Can't set validation mode " + value, iae);
+ reloadableEntityManagerFactory.setProperty(JAVAX_PERSISTENCE_VALIDATION_MODE, value);
}
}
@@ -582,7 +584,7 @@
private TabularData tabularData(String typeName, String typeDescription, String description, List<?> list, Info info) {
String[] names = new String[list.size()];
- Object[] values= new Object[names.length];
+ Object[] values = new Object[names.length];
int i = 0;
for (Object o : list) {
names[i] = o.toString();
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/enricher/AdditionalLibClassLoaderEnricherObserver.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/enricher/AdditionalLibClassLoaderEnricherObserver.java
index 56ec58b..3534d07 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/enricher/AdditionalLibClassLoaderEnricherObserver.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/enricher/AdditionalLibClassLoaderEnricherObserver.java
@@ -48,7 +48,7 @@
final File[] libs = dir.listFiles();
if (libs != null) {
final ClassLoaderEnricher enricher = SystemInstance.get().getComponent(ClassLoaderEnricher.class);
- for (File lib : libs) {
+ for (final File lib : libs) {
try {
enricher.addUrl(lib.toURI().toURL());
} catch (MalformedURLException e) {
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/event/ContainerSystemPostCreate.java
similarity index 74%
rename from examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java
rename to container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/event/ContainerSystemPostCreate.java
index 5e12908..531d16c 100644
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/event/ContainerSystemPostCreate.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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.
@@ -14,11 +14,19 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.superbiz.moviefun;
+package org.apache.openejb.assembler.classic.event;
+
+import org.apache.openejb.observer.Event;
/**
- * @version $Revision$ $Date$
+ * @version $Rev$ $Date$
*/
-public interface Notifier {
- void notify(String message);
+@Event
+public class ContainerSystemPostCreate {
+
+ @Override
+ public String toString() {
+ return "ContainerSystemPostCreate{}";
+ }
+
}
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/event/ContainerSystemPreDestroy.java
similarity index 74%
copy from examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java
copy to container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/event/ContainerSystemPreDestroy.java
index 5e12908..0c81df7 100644
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/Notifier.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/event/ContainerSystemPreDestroy.java
@@ -1,4 +1,4 @@
-/**
+/*
* 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.
@@ -14,11 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.superbiz.moviefun;
+package org.apache.openejb.assembler.classic.event;
+
+import org.apache.openejb.observer.Event;
/**
- * @version $Revision$ $Date$
+ * @version $Rev$ $Date$
*/
-public interface Notifier {
- void notify(String message);
+@Event
+public class ContainerSystemPreDestroy {
+
+ @Override
+ public String toString() {
+ return "ContainerSystemPreDestroy{}";
+ }
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java b/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java
index b602a40..9ce0d6c 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/bval/BeanValidationAppendixInterceptor.java
@@ -44,7 +44,8 @@
private SessionContext sessionContext;
- @AroundInvoke public Object aroundInvoke(final InvocationContext ejbContext) throws Exception {
+ @AroundInvoke
+ public Object aroundInvoke(final InvocationContext ejbContext) throws Exception {
Object validatorObject = null;
Validator validator = null;
try {
@@ -68,29 +69,29 @@
if (APACHE_BVAL_METHOD_CLASS != null && validator != null) {
validatorObject = validator.unwrap(APACHE_BVAL_METHOD_CLASS);
violations = call(Set.class, validatorObject, "validateParameters",
- new Object[]{
- bvalClazzToValidate, method, ejbContext.getParameters(), new Class[0]
- },
- new Class<?>[]{
- Class.class, Method.class, Object[].class, Class[].class
- });
+ new Object[]{
+ bvalClazzToValidate, method, ejbContext.getParameters(), new Class[0]
+ },
+ new Class<?>[]{
+ Class.class, Method.class, Object[].class, Class[].class
+ });
} else if (HIBERNATE_METHOD_CLASS != null && validator != null) {
validatorObject = validator.unwrap(HIBERNATE_METHOD_CLASS);
violations = call(Set.class, validatorObject, "validateAllParameters",
- new Object[]{
- ejbContext.getTarget(), ejbContext.getMethod(), ejbContext.getParameters(), new Class[0]
- },
- new Class<?>[]{
- Object.class, Method.class, Object[].class, Class[].class
- });
+ new Object[]{
+ ejbContext.getTarget(), ejbContext.getMethod(), ejbContext.getParameters(), new Class[0]
+ },
+ new Class<?>[]{
+ Object.class, Method.class, Object[].class, Class[].class
+ });
} else { // a warning message to inform Apache Bean Validation is not present
if (validator == null) {
logger.error("can't find validator");
} else {
logger.warning("Apache Bean Validation is not present, "
- + BeanValidationAppendixInterceptor.class.getName() + " will not work. "
- + "Please put it if you want to validate your parameters and returned values "
- + "with bean validation JSR.");
+ + BeanValidationAppendixInterceptor.class.getName() + " will not work. "
+ + "Please put it if you want to validate your parameters and returned values "
+ + "with bean validation JSR.");
}
}
@@ -103,20 +104,20 @@
violations = Collections.emptySet();
if (validatorObject != null && APACHE_BVAL_METHOD_CLASS != null) {
violations = call(Set.class, validatorObject, "validateReturnedValue",
- new Object[]{
- bvalClazzToValidate, method, returnedValue, new Class[0]
- },
- new Class<?>[]{
- Class.class, Method.class, Object.class, Class[].class
- });
+ new Object[]{
+ bvalClazzToValidate, method, returnedValue, new Class[0]
+ },
+ new Class<?>[]{
+ Class.class, Method.class, Object.class, Class[].class
+ });
} else if (validatorObject != null && HIBERNATE_METHOD_CLASS != null) {
violations = call(Set.class, validatorObject, "validateReturnValue",
- new Object[]{
- ejbContext.getTarget(), ejbContext.getMethod(), returnedValue, new Class[0]
- },
- new Class<?>[]{
- Object.class, Method.class, Object.class, Class[].class
- });
+ new Object[]{
+ ejbContext.getTarget(), ejbContext.getMethod(), returnedValue, new Class[0]
+ },
+ new Class<?>[]{
+ Object.class, Method.class, Object.class, Class[].class
+ });
}
if (violations.size() > 0) {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
index 3c32082..8dd3fc9 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
@@ -222,7 +222,7 @@
instance = createEjb(creationalContext);
} else {
final InstanceBean<T> bean = new InstanceBean<T>(this);
- if (webBeansContext.getWebBeansUtil().isScopeTypeNormal(scopeClass)) {
+ if (webBeansContext.getBeanManagerImpl().isScopeTypeNormal(scopeClass)) {
instance = (T) webBeansContext.getProxyFactory().createNormalScopedBeanProxy(bean, creationalContext);
} else {
final Context context = webBeansContext.getBeanManagerImpl().getContext(scopeClass);
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
index 7660cf6..814968d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
@@ -74,7 +74,7 @@
comparator = new DefaultClassLoaderComparator(classLoader);
}
- WebBeansContext webBeansContext = startupObject.getAppContext().getWebBeansContext();
+ final WebBeansContext webBeansContext = startupObject.getWebBeansContext();
final AlternativesManager alternativesManager = webBeansContext.getAlternativesManager();
final DecoratorsManager decoratorsManager = webBeansContext.getDecoratorsManager();
final InterceptorsManager interceptorsManager = webBeansContext.getInterceptorsManager();
@@ -124,7 +124,7 @@
} /* else { don't do it, check is done when we know the beans.xml path --> org.apache.openejb.config.DeploymentLoader.addBeansXmls
throw new WebBeansConfigurationException("Interceptor class : " + clazz.getName() + " is already defined");
}*/
- } else {
+ } else if (shouldThrowCouldNotLoadException(startupObject)) {
throw new WebBeansConfigurationException("Could not load interceptor class: " + className);
}
}
@@ -137,7 +137,7 @@
decoratorsManager.addNewDecorator(clazz);
classes.add(clazz);
} // same than interceptors regarding throw new WebBeansConfigurationException("Decorator class : " + clazz.getName() + " is already defined");
- } else {
+ } else if (shouldThrowCouldNotLoadException(startupObject)) {
throw new WebBeansConfigurationException("Could not load decorator class: " + className);
}
}
@@ -148,7 +148,7 @@
if (clazz != null) {
alternativesManager.addStereoTypeAlternative(clazz, null, null);
classes.add(clazz);
- } else {
+ } else if (shouldThrowCouldNotLoadException(startupObject)) {
throw new WebBeansConfigurationException("Could not load alternativeStereotype class: " + className);
}
}
@@ -158,7 +158,7 @@
if (clazz != null) {
alternativesManager.addClazzAlternative(clazz, null, null);
classes.add(clazz);
- } else {
+ } else if (shouldThrowCouldNotLoadException(startupObject)) {
throw new WebBeansConfigurationException("Could not load alternative class: " + className);
}
}
@@ -183,6 +183,11 @@
}
+ private static boolean shouldThrowCouldNotLoadException(final StartupObject startupObject) {
+ final AppInfo appInfo = startupObject.getAppInfo();
+ return appInfo.webAppAlone || appInfo.webApps.size() == 0 || startupObject.isFromWebApp();
+ }
+
private void process(final ClassLoader classLoader, final Set<String> ejbClasses, final Iterator<String> it, final StartupObject startupObject, final ClassLoaderComparator comparator, final ClassLoader scl, final boolean filterByClassLoader) {
final String className = it.next();
if (ejbClasses.contains(className)) it.remove();
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java
index 8e14792..a54cc50 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/StartupObject.java
@@ -66,10 +66,21 @@
return webContext;
}
+ public WebBeansContext getWebBeansContext() {
+ if (isFromWebApp()) {
+ return webContext.getWebbeansContext();
+ }
+ return appContext.getWebBeansContext();
+ }
+
public ClassLoader getClassLoader() {
- if (webContext != null) {
+ if (isFromWebApp()) {
return webContext.getClassLoader();
}
return appContext.getClassLoader();
}
+
+ public boolean isFromWebApp() {
+ return webContext != null;
+ }
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
index 67102f1..2a365af 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
@@ -19,6 +19,7 @@
import org.apache.webbeans.component.BeanManagerBean;
import org.apache.webbeans.component.BuildInOwbBean;
import org.apache.webbeans.component.ConversationBean;
+import org.apache.webbeans.component.InjectionPointBean;
import org.apache.webbeans.container.BeanManagerImpl;
import javax.el.ELResolver;
@@ -371,6 +372,12 @@
@Override
public Set<Bean<?>> getComponents() {
+ if (deploymentBeans.isEmpty()) {
+ // probably not yet merged (afterStart())
+ // so reuse parent beans
+ // this can happen for validations
+ return super.getBeans();
+ }
return deploymentBeans;
}
@@ -383,7 +390,7 @@
deploymentBeans.clear();
for (Bean<?> bean : getParentBm().getBeans()) {
if (bean instanceof BeanManagerBean || bean instanceof BuildInOwbBean
- || bean instanceof ConversationBean) {
+ || bean instanceof ConversationBean || bean instanceof InjectionPointBean) {
continue;
}
deploymentBeans.add(bean);
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java b/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java
index 686baa5..6f5e8a3 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/classloader/DefaultClassLoaderConfigurer.java
@@ -61,7 +61,7 @@
if (parent.exists()) {
final File[] files = parent.listFiles();
if (files != null) {
- for (File f : files) {
+ for (final File f : files) {
final String name = f.getName();
if (f.isDirectory() || name.endsWith(".zip") || name.endsWith(".jar")) {
addedList.add(f.getAbsolutePath());
@@ -73,7 +73,7 @@
added = new URL[addedList.size()];
int i = 0;
- for (String path : addedList) {
+ for (final String path : addedList) {
try {
added[i++] = new File(path).toURI().toURL();
} catch (MalformedURLException e) {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
index 40570ad..4f594be 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
@@ -214,7 +214,6 @@
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.MalformedURLException;
-import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
@@ -1130,7 +1129,7 @@
* Servlet, Filter, Listener
*/
- Map<URL, List<String>> urlByClasses = null;
+ Map<String, String> urlByClasses = null;
for (String apiClassName : WEB_CLASSES) {
final Class<? extends Annotation> clazz;
try {
@@ -1145,7 +1144,14 @@
if (limitedFinder instanceof AnnotationFinder) {
final Archive archive = ((AnnotationFinder) limitedFinder).getArchive();
if (archive instanceof WebappAggregatedArchive) {
- urlByClasses = ((WebappAggregatedArchive) archive).getClassesMap();
+ final Map<URL, List<String>> index = ((WebappAggregatedArchive) archive).getClassesMap();
+ urlByClasses = new HashMap<String, String>();
+ for (Map.Entry<URL, List<String>> entry : index.entrySet()) {
+ final String url = entry.getKey().toExternalForm();
+ for (String current : entry.getValue()) {
+ urlByClasses.put(current, url);
+ }
+ }
}
}
}
@@ -1155,6 +1161,10 @@
addWebAnnotatedClassInfo(urlByClasses, webModule.getWebAnnotatedClasses(), found);
}
+ if (urlByClasses != null) {
+ urlByClasses.clear();
+ }
+
return webModule;
}
@@ -4041,6 +4051,10 @@
consumer.getResourceRef().add(resourceRef);
}
+ if (member != null) {
+ resourceRef.setOrigin(member.getDeclaringClass() + "#" + member.getName());
+ } // TODO: else @Resource on a class
+
if (resourceRef.getResAuth() == null) {
if (resource.authenticationType() == Resource.AuthenticationType.APPLICATION) {
resourceRef.setResAuth(ResAuth.APPLICATION);
@@ -5224,7 +5238,7 @@
return classes;
}
- private static Map<String, Set<String>> addWebAnnotatedClassInfo(final Map<URL, List<String>> urlByClasses, final Map<String, Set<String>> classes, final List<Annotated<Class<?>>> found) {
+ private static Map<String, Set<String>> addWebAnnotatedClassInfo(final Map<String, String> urlByClasses, final Map<String, Set<String>> classes, final List<Annotated<Class<?>>> found) {
for (Annotated<Class<?>> clazz : found) {
final Class<?> loadedClass = clazz.get();
final String name = loadedClass.getName();
@@ -5232,13 +5246,7 @@
// url of the jar/folder containing the class
String url = null;
if (urlByClasses != null) {
- for (Map.Entry<URL, List<String>> entry : urlByClasses.entrySet()) {
- for (String current : entry.getValue()) {
- if (name.equals(current)) {
- url = entry.getKey().toExternalForm();
- }
- }
- }
+ url = urlByClasses.get(name);
}
if (url == null) {
@@ -5266,6 +5274,8 @@
} else {
list.add(classLocation(loadedClass).toExternalForm());
}
+ } else {
+ list.add(classLocation(loadedClass).toExternalForm());
}
} catch (Exception e) {
list.add(classLocation(loadedClass).toExternalForm());
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java
index 2df203f..b850fbc 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java
@@ -91,6 +91,8 @@
// START SNIPPET : code2
public AppModule validate(final AppModule appModule) {
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(appModule.getClassLoader()); // be sure to not mix classloaders
try {
ValidationRule[] rules = getValidationRules();
for (int i = 0; i < rules.length; i++) {
@@ -102,6 +104,8 @@
err.setCause(e);
err.setDetails(e.getMessage());
appModule.getValidation().addError(err);
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
}
return appModule;
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
index e550659..27f478c 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
@@ -112,9 +112,6 @@
private static Set<String> ignoredReferenceTypes = new TreeSet<String>();
public static final String AUTOCREATE_JTA_DATASOURCE_FROM_NON_JTA_ONE_KEY = "openejb.autocreate.jta-datasource-from-non-jta-one";
- public static final ThreadLocal<Collection<String>> PROVIDED_RESOURCES = new ThreadLocal<Collection<String>>();
- public static final ThreadLocal<String> PROVIDED_RESOURCES_PREFIX = new ThreadLocal<String>();
-
static{
// Context objects are automatically handled
ignoredReferenceTypes.add("javax.ejb.SessionContext");
@@ -187,25 +184,20 @@
resolvePersistenceRefs(appModule);
- try {
- for (EjbModule ejbModule : appModule.getEjbModules()) {
- deploy(ejbModule, appResources);
- }
- for (ClientModule clientModule : appModule.getClientModules()) {
- deploy(clientModule, appResources);
- }
- for (ConnectorModule connectorModule : appModule.getConnectorModules()) {
- deploy(connectorModule);
- }
- for (WebModule webModule : appModule.getWebModules()) {
- deploy(webModule, appResources);
- }
- for (PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
- deploy(appModule, persistenceModule);
- }
- } finally {
- PROVIDED_RESOURCES.remove();
- PROVIDED_RESOURCES_PREFIX.remove();
+ for (EjbModule ejbModule : appModule.getEjbModules()) {
+ deploy(ejbModule, appResources);
+ }
+ for (ClientModule clientModule : appModule.getClientModules()) {
+ deploy(clientModule, appResources);
+ }
+ for (ConnectorModule connectorModule : appModule.getConnectorModules()) {
+ deploy(connectorModule);
+ }
+ for (WebModule webModule : appModule.getWebModules()) {
+ deploy(webModule, appResources);
+ }
+ for (PersistenceModule persistenceModule : appModule.getPersistenceModules()) {
+ deploy(appModule, persistenceModule);
}
return appModule;
}
@@ -713,12 +705,6 @@
}
private void processJndiRefs(String moduleId, JndiConsumer jndiConsumer, AppResources appResources, ClassLoader classLoader) throws OpenEJBException {
- final Collection<String> ignoredResources = PROVIDED_RESOURCES.get();
- String ignoredResourcesPrefix = PROVIDED_RESOURCES_PREFIX.get();
- if (ignoredResourcesPrefix == null) {
- ignoredResourcesPrefix = "";
- }
-
// Resource reference
for (ResourceRef ref : jndiConsumer.getResourceRef()) {
// skip destinations with lookup name
@@ -740,21 +726,16 @@
}
String destinationId = (mappedName.length() == 0) ? ref.getName() : mappedName;
- if (ignoredResources != null && ignoredResources.contains(destinationId)) {
- ref.setLookupName(ignoredResourcesPrefix + destinationId);
- ref.setName("openejb/" + moduleId + "/" + destinationId);
- } else {
- try {
- destinationId = getResourceId(moduleId, destinationId, refType, appResources);
- } catch (OpenEJBException ex) {
- if (!(ref instanceof ContextRef)) {
- throw ex;
- } else { // let jaxrs provider manage it
- continue;
- }
+ try {
+ destinationId = getResourceId(moduleId, destinationId, refType, appResources);
+ } catch (OpenEJBException ex) {
+ if (!(ref instanceof ContextRef)) {
+ throw ex;
+ } else { // let jaxrs provider manage it
+ continue;
}
- ref.setMappedName(destinationId);
}
+ ref.setMappedName(destinationId);
}
// Resource env reference
@@ -1044,20 +1025,6 @@
}
}
- private void set(Properties properties, String key, String value) {
- if (value == null || value.length() == 0) return;
- properties.put(key, value);
- }
-
- private void set(Properties properties, String key, int value) {
- set(properties, key, value, 0);
- }
-
- private void set(Properties properties, String key, int value, int min) {
- if (value < min) return;
- properties.put(key, value);
- }
-
private String createContainer(Class<? extends ContainerInfo> containerInfoType, EjbDeployment ejbDeployment, EnterpriseBean bean) throws OpenEJBException {
if (!autoCreateContainers) {
throw new OpenEJBException("A container of type " + getType(bean) + " must be declared in the configuration file for bean: " + bean.getEjbName());
@@ -1085,12 +1052,6 @@
EjbDeployment ejbDeployment,
AppResources appResources,
EjbModule ejbModule) throws OpenEJBException {
- final Collection<String> ignoredResources = PROVIDED_RESOURCES.get();
- String ignoredResourcesPrefix = PROVIDED_RESOURCES_PREFIX.get();
- if (ignoredResourcesPrefix == null) {
- ignoredResourcesPrefix = "";
- }
-
// skip destinations with lookup name
if (ref.getLookupName() != null) {
return;
@@ -1122,17 +1083,14 @@
ResourceLink link = ejbDeployment.getResourceLink(refName);
if (link == null) {
String id = (mappedName.length() == 0) ? ref.getName() : mappedName;
- if (ignoredResources != null && (ignoredResources.contains(id) || ignoredResources.contains(correctedId(ignoredResourcesPrefix, id)))) {
- final String correctedId = ignoredResourcesPrefix + correctedId(ignoredResourcesPrefix, id);
- ref.setLookupName(correctedId);
- ref.setName(correctedId);
- return;
- }
-
if (id.startsWith("java:")) {
id = id.substring("java:".length());
}
- id = getResourceId(ejbDeployment.getDeploymentId(), id, refType, appResources);
+ try {
+ id = getResourceId(ejbDeployment.getDeploymentId(), id, refType, appResources);
+ } catch (OpenEJBException e) { // changing the message to be explicit
+ throw new OpenEJBException("Can't find resource for " + ref.getOrigin() + ". (" + e.getMessage() + ")", e.getCause());
+ }
logger.info("Auto-linking resource-ref '" + refName + "' in bean " + ejbDeployment.getDeploymentId() + " to Resource(id=" + id + ")");
link = new ResourceLink();
@@ -1151,25 +1109,6 @@
}
}
- private static String correctedId(final String ignoredResourcesPrefix, final String id) {
- String newId = id;
- String ignoredId = ignoredResourcesPrefix;
-
- // first unify beginning of the jndi name (we can get this / after java:)
- if (newId.startsWith("java:/")) {
- newId = "java:" + newId.substring("java:/".length());
- }
- if (ignoredResourcesPrefix.startsWith("java:/")) {
- ignoredId = "java:" + ignoredResourcesPrefix.substring("java:/".length());
- }
-
- // remove prefix if necessary
- if (newId.startsWith(ignoredId)) {
- return newId.substring(ignoredId.length());
- }
- return newId;
- }
-
private void processResourceEnvRef(JndiReference ref,
EjbDeployment ejbDeployment,
AppResources appResources,
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AutoDeployer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AutoDeployer.java
new file mode 100644
index 0000000..712f47c
--- /dev/null
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AutoDeployer.java
@@ -0,0 +1,371 @@
+/*
+ * 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.config;
+
+import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.event.ContainerSystemPostCreate;
+import org.apache.openejb.assembler.classic.event.ContainerSystemPreDestroy;
+import org.apache.openejb.config.sys.Deployments;
+import org.apache.openejb.loader.FileUtils;
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.Options;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.observer.Observes;
+import org.apache.openejb.util.Duration;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+
+import java.io.File;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AutoDeployer {
+
+ private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB, AutoDeployer.class);
+
+ private final ConfigurationFactory factory;
+ private final long pollIntervalMillis;
+ private final Map<String, FileInfo> files = new HashMap<String, FileInfo>();
+ private final Timer timer;
+ private final List<Deployments> deployments = new ArrayList<Deployments>();
+
+ public AutoDeployer(final ConfigurationFactory factory, final List<Deployments> deployments) {
+ final Options options = SystemInstance.get().getOptions();
+ final Duration interval = options.get("openejb.autodeploy.interval", new Duration(2, TimeUnit.SECONDS));
+
+ if (interval.getUnit() == null) interval.setUnit(TimeUnit.SECONDS);
+
+ this.factory = factory;
+ this.deployments.addAll(deployments);
+ this.pollIntervalMillis = interval.getUnit().toMillis(interval.getTime());
+ this.timer = new Timer(this.getClass().getSimpleName());
+ }
+
+ public synchronized boolean fileAdded(final File file) {
+ logger.info("Auto-Deploying: " + file.getAbsolutePath());
+ try {
+ final AppInfo appInfo = factory.configureApplication(file);
+ appInfo.paths.add(file.getAbsolutePath());
+ appInfo.paths.add(appInfo.path);
+ for (final String path : appInfo.paths) {
+ logger.info("Auto-Deploy: Path " + path);
+ }
+ getAssembler().createApplication(appInfo);
+ } catch (Exception e) {
+ logger.error("Auto-Deploy Failed: " + file.getAbsolutePath(), e);
+ }
+ return true;
+ }
+
+ private Assembler getAssembler() {
+ return SystemInstance.get().getComponent(Assembler.class);
+ }
+
+ public synchronized boolean fileRemoved(final File file) {
+ final String path = file.getAbsolutePath();
+ final Collection<AppInfo> apps = getAssembler().getDeployedApplications();
+ for (final AppInfo app : apps) {
+ if (app.paths.contains(path)) {
+ logger.info("Auto-Undeploying: " + app.appId + " - " + file.getAbsolutePath());
+ try {
+ getAssembler().destroyApplication(app);
+ for (final String location : app.paths) {
+ final File delete = new File(location);
+ Files.remove(delete);
+ logger.info("Auto-Undeploy: Delete " + location);
+ }
+ } catch (Exception e) {
+ logger.error("Auto-Undeploy Failed: " + file.getAbsolutePath(), e);
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ public void fileUpdated(final File file) {
+ fileRemoved(file);
+ fileAdded(file);
+ }
+
+ private Logger getLogger() {
+ return logger;
+ }
+
+ @SuppressWarnings("UnusedParameters")
+ public void observe(@Observes final ContainerSystemPostCreate postCreate) {
+ start();
+ }
+
+ @SuppressWarnings("UnusedParameters")
+ public void observe(@Observes final ContainerSystemPreDestroy preDestroy) {
+ stop();
+ }
+
+ public synchronized void stop() {
+ timer.cancel();
+ }
+
+ public void start() {
+ initialize();
+
+ getLogger().debug("Scanner running. Polling every " + pollIntervalMillis + " milliseconds.");
+
+ timer.scheduleAtFixedRate(new TimerTask() {
+ @Override
+ public void run() {
+ try {
+ scan();
+ } catch (Exception e) {
+ getLogger().error("Scan failed.", e);
+ }
+ }
+ }, pollIntervalMillis, pollIntervalMillis);
+
+ }
+
+ private void initialize() {
+ getLogger().debug("Doing initial scan of Deployments");
+
+ for (final File file : list()) {
+
+ if (!file.canRead()) {
+ continue;
+ }
+
+ final FileInfo now = newInfo(file);
+ now.setChanging(false);
+ }
+ }
+
+ private FileInfo newInfo(final File child) {
+ final FileInfo fileInfo = child.isDirectory() ? new DirectoryInfo(child) : new FileInfo(child);
+ files.put(fileInfo.getPath(), fileInfo);
+ return fileInfo;
+ }
+
+ /**
+ * Looks for changes to the immediate contents of the directory we're watching.
+ */
+ public void scan() {
+
+ final List<File> files = list();
+
+ final HashSet<String> missingFilesList = new HashSet<String>(this.files.keySet());
+
+ for (final File file : files) {
+
+ missingFilesList.remove(file.getAbsolutePath());
+
+ if (!file.canRead()) {
+ getLogger().debug("not readable " + file.getName());
+ continue;
+ }
+
+ final FileInfo oldStatus = oldInfo(file);
+ final FileInfo newStatus = newInfo(file);
+
+ newStatus.diff(oldStatus);
+
+ if (oldStatus == null) {
+ // Brand new, but assume it's changing and
+ // wait a bit to make sure it's not still changing
+ getLogger().debug("File Discovered: " + newStatus);
+ } else if (newStatus.isChanging()) {
+ // The two records are different -- record the latest as a file that's changing
+ // and later when it stops changing we'll do the add or update as appropriate.
+ getLogger().debug("File Changing: " + newStatus);
+ } else if (oldStatus.isNewFile()) {
+ // Used to be changing, now in (hopefully) its final state
+ getLogger().info("New File: " + newStatus);
+ newStatus.setNewFile(!fileAdded(file));
+ } else if (oldStatus.isChanging()) {
+ getLogger().info("Updated File: " + newStatus);
+ fileUpdated(file);
+
+ missingFilesList.remove(oldStatus.getPath());
+ }
+ // else it's just totally unchanged and we ignore it this pass
+ }
+
+ // Look for any files we used to know about but didn't find in this pass
+ for (final String path : missingFilesList) {
+ getLogger().info("File removed: " + path);
+
+ if (fileRemoved(new File(path))) {
+ this.files.remove(path);
+ }
+ }
+ }
+
+ private List<File> list() {
+ final List<File> files = new ArrayList<File>();
+
+ { // list all the files associated with hot deploy locations
+
+ final FileUtils base = SystemInstance.get().getBase();
+ for (final Deployments deployment : deployments) {
+ DeploymentsResolver.loadFrom(deployment, base, files);
+ }
+ }
+ return files;
+ }
+
+ private FileInfo oldInfo(final File file) {
+ return files.get(file.getAbsolutePath());
+ }
+
+ /**
+ * Provides details about a directory.
+ */
+ private static class DirectoryInfo extends FileInfo {
+ public DirectoryInfo(final File dir) {
+ //
+ // We don't pay attention to the size of the directory or files in the
+ // directory, only the highest last modified time of anything in the
+ // directory. Hopefully this is good enough.
+ //
+ super(dir.getAbsolutePath(), 0, getLastModifiedInDir(dir));
+ }
+
+ private static long getLastModifiedInDir(final File dir) {
+ assert dir != null;
+
+ long value = dir.lastModified();
+ final File[] children = dir.listFiles();
+ long test;
+
+ if (children != null) {
+ for (final File child : children) {
+ if (!child.canRead()) {
+ continue;
+ }
+
+ if (child.isDirectory()) {
+ test = getLastModifiedInDir(child);
+ } else {
+ test = child.lastModified();
+ }
+
+ if (test > value) {
+ value = test;
+ }
+ }
+ }
+
+ return value;
+ }
+ }
+
+ /**
+ * Provides details about a file.
+ */
+ private static class FileInfo implements Serializable {
+ private final String path;
+
+ private long size;
+
+ private long modified;
+
+ private boolean newFile;
+
+ private boolean changing;
+
+ public FileInfo(final File file) {
+ this(file.getAbsolutePath(), file.length(), file.lastModified());
+ }
+
+ public FileInfo(final String path, final long size, final long modified) {
+ assert path != null;
+
+ this.path = path;
+ this.size = size;
+ this.modified = modified;
+ this.newFile = true;
+ this.changing = true;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public long getSize() {
+ return size;
+ }
+
+ public void setSize(final long size) {
+ this.size = size;
+ }
+
+ public long getModified() {
+ return modified;
+ }
+
+ public void setModified(final long modified) {
+ this.modified = modified;
+ }
+
+ public boolean isNewFile() {
+ return newFile;
+ }
+
+ public void setNewFile(final boolean newFile) {
+ this.newFile = newFile;
+ }
+
+ public boolean isChanging() {
+ return changing;
+ }
+
+ public void setChanging(final boolean changing) {
+ this.changing = changing;
+ }
+
+ public boolean isSame(final FileInfo info) {
+ assert info != null;
+
+ if (!path.equals(info.path)) {
+ throw new IllegalArgumentException("Should only be used to compare two files representing the same path!");
+ }
+
+ return size == info.size && modified == info.modified;
+ }
+
+ public String toString() {
+ return path;
+ }
+
+ public void diff(final FileInfo old) {
+ if (old != null) {
+ this.changing = !isSame(old);
+ this.newFile = old.newFile;
+ }
+ }
+ }
+}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigUtils.java b/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigUtils.java
index e8d52d7..f32aa75 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigUtils.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigUtils.java
@@ -167,9 +167,9 @@
/* Check to see if the entry is already listed */
for (Deployments d : config.getDeployments()) {
- if (d.getJar() != null) {
+ if (d.getFile() != null) {
try {
- File target = SystemInstance.get().getBase().getFile(d.getJar(), false);
+ File target = SystemInstance.get().getBase().getFile(d.getFile(), false);
/*
* If the jar entry is already there, no need
@@ -205,7 +205,7 @@
/* Create a new Deployments entry */
Deployments dep = JaxbOpenejb.createDeployments();
- dep.setJar(jarLocation);
+ dep.setFile(jarLocation);
config.getDeployments().add(dep);
return true;
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java b/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
index 60422c8..a6a5190 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
@@ -16,56 +16,10 @@
*/
package org.apache.openejb.config;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import javax.ejb.embeddable.EJBContainer;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.Vendor;
import org.apache.openejb.api.Proxy;
-import org.apache.openejb.assembler.classic.AppInfo;
-import org.apache.openejb.assembler.classic.Assembler;
-import org.apache.openejb.assembler.classic.BmpEntityContainerInfo;
-import org.apache.openejb.assembler.classic.ClientInfo;
-import org.apache.openejb.assembler.classic.CmpEntityContainerInfo;
-import org.apache.openejb.assembler.classic.ConnectionManagerInfo;
-import org.apache.openejb.assembler.classic.ConnectorInfo;
-import org.apache.openejb.assembler.classic.ContainerInfo;
-import org.apache.openejb.assembler.classic.ContainerSystemInfo;
-import org.apache.openejb.assembler.classic.DeploymentExceptionManager;
-import org.apache.openejb.assembler.classic.EjbJarInfo;
-import org.apache.openejb.assembler.classic.FacilitiesInfo;
-import org.apache.openejb.assembler.classic.HandlerChainInfo;
-import org.apache.openejb.assembler.classic.HandlerInfo;
-import org.apache.openejb.assembler.classic.JndiContextInfo;
-import org.apache.openejb.assembler.classic.ManagedContainerInfo;
-import org.apache.openejb.assembler.classic.MdbContainerInfo;
-import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
-import org.apache.openejb.assembler.classic.OpenEjbConfigurationFactory;
-import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
-import org.apache.openejb.assembler.classic.ResourceInfo;
-import org.apache.openejb.assembler.classic.SecurityServiceInfo;
-import org.apache.openejb.assembler.classic.ServiceInfo;
-import org.apache.openejb.assembler.classic.SingletonSessionContainerInfo;
-import org.apache.openejb.assembler.classic.StatefulSessionContainerInfo;
-import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
-import org.apache.openejb.assembler.classic.TransactionServiceInfo;
-import org.apache.openejb.assembler.classic.WebAppInfo;
+import org.apache.openejb.assembler.classic.*;
import org.apache.openejb.component.ClassLoaderEnricher;
import org.apache.openejb.config.sys.AbstractService;
import org.apache.openejb.config.sys.AdditionalDeployments;
@@ -109,6 +63,25 @@
import org.apache.xbean.finder.MetaAnnotatedClass;
import org.apache.xbean.finder.ResourceFinder;
+import javax.ejb.embeddable.EJBContainer;
+import java.io.File;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
import static org.apache.openejb.config.DeploymentsResolver.DEPLOYMENTS_CLASSPATH_PROPERTY;
import static org.apache.openejb.config.ServiceUtils.implies;
@@ -136,13 +109,7 @@
static final String OFFLINE_PROPERTY = "openejb.offline";
public ConfigurationFactory() {
- this(shouldAutoDeploy());
- }
-
- private static boolean shouldAutoDeploy() {
- final Options options = SystemInstance.get().getOptions();
- final boolean b = options.get(ConfigurationFactory.OFFLINE_PROPERTY, false);
- return options.get("tomee.autoconfig", !b);
+ this(SystemInstance.get().getOptions().get(ConfigurationFactory.OFFLINE_PROPERTY, false));
}
public ConfigurationFactory(final boolean offline) {
@@ -471,24 +438,14 @@
}
- final List<String> declaredApps = getDeclaredApps();
+ final List<File> declaredApps = getDeclaredApps();
- for (final String pathname : declaredApps) {
+ for (final File jarFile : declaredApps) {
try {
- try {
- final File jarFile;
- if (pathname.startsWith("file:/")) {
- jarFile = new File(new URI(pathname));
- } else {
- jarFile = new File(pathname);
- }
- final AppInfo appInfo = configureApplication(jarFile);
- sys.containerSystem.applications.add(appInfo);
+ final AppInfo appInfo = configureApplication(jarFile);
+ sys.containerSystem.applications.add(appInfo);
- } catch (URISyntaxException e) {
- logger.error("Invalid declaredApp URI '" + pathname + "'", e);
- }
} catch (OpenEJBException alreadyHandled) {
final DeploymentExceptionManager exceptionManager = SystemInstance.get().getComponent(DeploymentExceptionManager.class);
exceptionManager.pushDelpoymentException(alreadyHandled);
@@ -534,6 +491,14 @@
}
}
+ for (Deployments deployments : openejb.getDeployments()) {
+ if (deployments.isAutoDeploy()) {
+ if (deployments.getDir() != null) {
+ sys.containerSystem.autoDeploy.add(deployments.getDir());
+ }
+ }
+ }
+
final OpenEjbConfiguration finished = sys;
sys = null;
openejb = null;
@@ -541,81 +506,81 @@
return finished;
}
- private List<String> getDeclaredApps() {
+ private List<File> getDeclaredApps() {
// make a copy of the list because we update it
final List<Deployments> deployments = new ArrayList<Deployments>();
+
if (openejb != null) {
deployments.addAll(openejb.getDeployments());
}
- File additionalDeploymentFile;
+
try {
- additionalDeploymentFile = SystemInstance.get().getBase().getFile(ADDITIONAL_DEPLOYMENTS, false);
- } catch (IOException e) {
- additionalDeploymentFile = null;
- }
- if (additionalDeploymentFile.exists()) {
- InputStream fis = null;
- try {
- fis = IO.read(additionalDeploymentFile);
- final AdditionalDeployments additionalDeployments = JaxbOpenejb.unmarshal(AdditionalDeployments.class, fis);
- deployments.addAll(additionalDeployments.getDeployments());
- } catch (Exception e) {
- logger.error("can't read " + ADDITIONAL_DEPLOYMENTS, e);
- } finally {
- IO.close(fis);
+ final File additionalDeploymentFile = SystemInstance.get().getBase().getFile(ADDITIONAL_DEPLOYMENTS, false);
+
+ if (additionalDeploymentFile.exists()) {
+ InputStream fis = null;
+ try {
+ fis = IO.read(additionalDeploymentFile);
+ final AdditionalDeployments additionalDeployments = JaxbOpenejb.unmarshal(AdditionalDeployments.class, fis);
+ deployments.addAll(additionalDeployments.getDeployments());
+ } catch (Exception e) {
+ logger.error("can't read " + ADDITIONAL_DEPLOYMENTS, e);
+ } finally {
+ IO.close(fis);
+ }
}
+ } catch (Exception e) {
+ logger.info("No additional deployments found: " + e);
}
// resolve jar locations ////////////////////////////////////// BEGIN ///////
final FileUtils base = SystemInstance.get().getBase();
- final List<URL> declaredAppsUrls = new ArrayList<URL>();
- try {
- for (final Deployments deployment : deployments) {
+ final List<Deployments> autoDeploy = new ArrayList<Deployments>();
+
+ final List<File> declaredAppsUrls = new ArrayList<File>();
+
+ for (final Deployments deployment : deployments) {
+ try {
DeploymentsResolver.loadFrom(deployment, base, declaredAppsUrls);
+ if (deployment.isAutoDeploy()) autoDeploy.add(deployment);
+ } catch (SecurityException se) {
+ logger.warning("Security check failed on deployment: " + deployment.getFile(), se);
}
- } catch (SecurityException ignored) {
}
- return toString(declaredAppsUrls);
+
+ if (autoDeploy.size() > 0) {
+ SystemInstance.get().addObserver(new AutoDeployer(this, autoDeploy));
+ }
+
+ return declaredAppsUrls;
}
- public ArrayList<File> getModulesFromClassPath(List<String> declaredApps, final ClassLoader classLoader) {
+ public ArrayList<File> getModulesFromClassPath(List<File> declaredApps, final ClassLoader classLoader) {
final FileUtils base = SystemInstance.get().getBase();
- if (declaredApps == null) {
- declaredApps = getDeclaredApps();
- }
+
final List<URL> classpathAppsUrls = new ArrayList<URL>();
DeploymentsResolver.loadFromClasspath(base, classpathAppsUrls, classLoader);
final ArrayList<File> jarFiles = new ArrayList<File>();
for (final URL path : classpathAppsUrls) {
- if (declaredApps.contains(URLs.toFilePath(path))) continue;
+ final File file = URLs.toFile(path);
- jarFiles.add(new File(URLs.toFilePath(path)));
+ if (declaredApps != null && declaredApps.contains(file)) continue;
+
+ jarFiles.add(file);
}
return jarFiles;
}
- private List<String> toString(final List<URL> urls) {
- final List<String> toReturn = new ArrayList<String>(urls.size());
- for (final URL url : urls) {
- try {
- toReturn.add(url.toString());
- } catch (Exception ignore) {
- }
- }
- return toReturn;
- }
-
public ContainerInfo createContainerInfo(final Container container) throws OpenEJBException {
final Class<? extends ContainerInfo> infoClass = getContainerInfoType(container.getType());
if (infoClass == null) {
throw new OpenEJBException(messages.format("unrecognizedContainerType", container.getType()));
}
- final ContainerInfo info = configureService(container, infoClass);
- return info;
+ return configureService(container, infoClass);
}
private void loadPropertiesDeclaredConfiguration(final Openejb openejb) {
@@ -650,8 +615,7 @@
final URI uri = new URI(value);
- final Object service = toConfigDeclaration(name, uri);
- return service;
+ return toConfigDeclaration(name, uri);
}
public Object toConfigDeclaration(final String id, final URI uri) throws OpenEJBException {
@@ -684,7 +648,7 @@
} else if (object instanceof Deployments) {
final Deployments deployments = (Deployments) object;
deployments.setDir(map.remove("dir"));
- deployments.setJar(map.remove("jar"));
+ deployments.setFile(map.remove("jar"));
final String cp = map.remove("classpath");
if (cp != null) {
final String[] paths = cp.split(File.pathSeparator);
@@ -707,7 +671,12 @@
try {
final AppModule appModule = deploymentLoader.load(jarFile);
- return configureApplication(appModule);
+ final AppInfo appInfo = configureApplication(appModule);
+
+ // TODO This is temporary -- we need to do this in AppInfoBuilder
+ appInfo.paths.add(appInfo.path);
+ appInfo.paths.add(jarFile.getAbsolutePath());
+ return appInfo;
} catch (ValidationFailedException e) {
logger.warning("configureApplication.loadFailed", jarFile.getAbsolutePath(), e.getMessage()); // DO not include the stacktrace in the message
throw e;
@@ -1094,8 +1063,7 @@
}
private <T extends ServiceInfo> void specialProcessing(final T info) {
- final ServiceInfo serviceInfo = info;
- TopicOrQueueDefaults.process(serviceInfo);
+ TopicOrQueueDefaults.process(info);
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
index 35ba82f..f14de16 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
@@ -24,21 +24,8 @@
import org.apache.openejb.config.event.BeforeDeploymentEvent;
import org.apache.openejb.core.EmptyResourcesClassLoader;
import org.apache.openejb.core.ParentClassLoaderFinder;
-import org.apache.openejb.jee.Application;
-import org.apache.openejb.jee.ApplicationClient;
-import org.apache.openejb.jee.Beans;
-import org.apache.openejb.jee.Connector;
-import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.FacesConfig;
-import org.apache.openejb.jee.JavaWsdlMapping;
-import org.apache.openejb.jee.JaxbJavaee;
-import org.apache.openejb.jee.JspConfig;
+import org.apache.openejb.jee.*;
import org.apache.openejb.jee.Module;
-import org.apache.openejb.jee.Taglib;
-import org.apache.openejb.jee.TldTaglib;
-import org.apache.openejb.jee.WebApp;
-import org.apache.openejb.jee.WebserviceDescription;
-import org.apache.openejb.jee.Webservices;
import org.apache.openejb.jee.oejb3.OpenejbJar;
import org.apache.openejb.loader.FileUtils;
import org.apache.openejb.loader.IO;
@@ -61,6 +48,7 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
@@ -95,6 +83,7 @@
public class DeploymentLoader implements DeploymentFilterable {
public static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, "org.apache.openejb.util.resources");
public static final String OPENEJB_ALTDD_PREFIX = "openejb.altdd.prefix";
+
private static final String ddDir = "META-INF/";
private boolean scanManagedBeans = true;
private static final Collection<String> KNOWN_DESCRIPTORS = Arrays.asList("app-ctx.xml", "module.properties", "application.properties", "web.xml", "ejb-jar.xml", "openejb-jar.xml", "env-entries.properties", "beans.xml", "ra.xml", "application.xml", "application-client.xml", "persistence-fragment.xml", "persistence.xml", "validation.xml", NewLoaderLogic.EXCLUSION_FILE);
@@ -118,7 +107,7 @@
try {
// determine the module type
- Class<? extends DeploymentModule> moduleClass;
+ final Class<? extends DeploymentModule> moduleClass;
try {
doNotUseClassLoader = ClassLoaderUtil.createClassLoader(jarPath, new URL[]{baseUrl}, getOpenEJBClassLoader());
@@ -143,7 +132,7 @@
}
if (EjbModule.class.equals(moduleClass)) {
- final URL[] urls = new URL[] { baseUrl };
+ final URL[] urls = new URL[]{baseUrl};
SystemInstance.get().fireEvent(new BeforeDeploymentEvent(urls));
@@ -233,7 +222,6 @@
// We can safely destroy this class loader in either case, as it was not use by any modules
if (null != doNotUseClassLoader) {
ClassLoaderUtil.destroyClassLoader(doNotUseClassLoader);
- doNotUseClassLoader = null;
//Really try and flush this classloader out
// System.gc();
@@ -245,6 +233,7 @@
return ParentClassLoaderFinder.Helper.get();
}
+ @SuppressWarnings("unchecked")
private void addWebPersistenceDD(final String name, final Map<String, Object> otherDD, final AppModule appModule) {
if (otherDD.containsKey(name)) {
List<URL> persistenceUrls = (List<URL>) appModule.getAltDDs().get(name);
@@ -351,7 +340,11 @@
webModules.put(entry.getKey(), entry.getValue());
}
} catch (UnsupportedOperationException e) {
- // Ignore it as per the javaee spec EE.8.4.2 section 1.d.iiilogger.info("Ignoring unknown module type: "+entry.getKey());
+ // Ignore it as per the javaee spec EE.8.4.2 section 1.d.iii
+ logger.info("Ignoring unknown module type: " + entry.getKey());
+ } catch (UnknownModuleTypeException e) {
+ // Ignore it as per the javaee spec EE.8.4.2 section 1.d.iii
+ logger.info("Ignoring unknown module type: " + entry.getKey());
} catch (Exception e) {
throw new OpenEJBException("Unable to determine the module type of " + entry.getKey() + ": Exception: " + e.getMessage(), e);
}
@@ -523,7 +516,7 @@
DeploymentsResolver.loadFromClasspath(base, filteredUrls, appModule.getClassLoader());
addPersistenceUnits(appModule, filteredUrls.toArray(new URL[filteredUrls.size()]));
- for (DeploymentModule module : appModule.getDeploymentModule()) {
+ for (final DeploymentModule module : appModule.getDeploymentModule()) {
module.setStandaloneModule(false);
}
@@ -633,6 +626,7 @@
addWebModule(webModule, appModule);
}
+ @SuppressWarnings("unchecked")
public static void addWebModule(final WebModule webModule, final AppModule appModule) throws OpenEJBException {
// create and add the WebModule
appModule.getWebModules().add(webModule);
@@ -680,7 +674,7 @@
final IAnnotationFinder finder = new org.apache.xbean.finder.AnnotationFinder(new ClassesArchive());
webModule.setFinder(finder);
webEjbModule.setFinder(finder);
- } else {
+ } else {
final IAnnotationFinder finder = FinderFactory.createFinder(webModule);
webModule.setFinder(finder);
webEjbModule.setFinder(finder);
@@ -700,10 +694,10 @@
* then per specification we use the web.xml metadata-complete setting
* to imply the same for EJBs.
*
- * @param webModule
- * @param ejbModule
+ * @param webModule WebModule
+ * @param ejbModule EjbModule
*/
- private static void fillEjbJar(WebModule webModule, EjbModule ejbModule) {
+ private static void fillEjbJar(final WebModule webModule, final EjbModule ejbModule) {
final Object o = webModule.getAltDDs().get("ejb-jar.xml");
if (o != null) return;
if (ejbModule.getEjbJar() != null) return;
@@ -716,7 +710,7 @@
ejbModule.setEjbJar(ejbJar);
}
- private static boolean isMetadataComplete(WebModule webModule, EjbModule ejbModule) {
+ private static boolean isMetadataComplete(final WebModule webModule, final EjbModule ejbModule) {
if (webModule.getWebApp() == null) return false;
if (!webModule.getWebApp().isMetadataComplete()) return false;
@@ -724,9 +718,8 @@
// We need to determine if there are cdi or ejb xml files
if (webModule.getAltDDs().get("beans.xml") == null) return true;
if (ejbModule.getEjbJar() == null) return true;
- if (!ejbModule.getEjbJar().isMetadataComplete()) return false;
+ return ejbModule.getEjbJar().isMetadataComplete();
- return true;
}
public WebModule createWebModule(final String appId, final String warPath, final ClassLoader parentClassLoader, final String contextRoot, final String moduleName) throws OpenEJBException {
@@ -789,7 +782,7 @@
return webModule;
}
- public static List<URL> filterWebappUrls(final URL[] webUrls, URL exclusions) {
+ public static List<URL> filterWebappUrls(final URL[] webUrls, final URL exclusions) {
Filter excludeFilter = null;
if (exclusions != null) {
try {
@@ -1033,7 +1026,7 @@
/**
* Finds all faces configuration files and stores them in the WebModule
*
- * @param webModule
+ * @param webModule WebModule
* @throws OpenEJBException
*/
private void addFacesConfigs(final WebModule webModule) throws OpenEJBException {
@@ -1245,7 +1238,7 @@
}
}
- private static Map<String, URL> mapDescriptors(final ResourceFinder finder)
+ public static Map<String, URL> mapDescriptors(final ResourceFinder finder)
throws IOException {
final Map<String, URL> map = finder.getResourcesMap(ddDir);
@@ -1264,8 +1257,8 @@
/**
* Modifies the map passed in with all the alt dd URLs found
*
- * @param map
- * @param log
+ * @param map Map
+ * @param log boolean
* @return the same map instance updated with alt dds
*/
public static Map<String, URL> altDDSources(final Map<String, URL> map, final boolean log) {
@@ -1357,11 +1350,21 @@
// file path has trailing !/ that must be stripped off
pathname = pathname.substring(0, pathname.lastIndexOf('!'));
- pathname = URLDecoder.decode(pathname);
+ try {
+ pathname = URLDecoder.decode(pathname, "UTF-8");
+ } catch (Exception e) {
+ //noinspection deprecation
+ pathname = URLDecoder.decode(pathname);
+ }
return new File(pathname);
} else if ("file".equals(warUrl.getProtocol())) {
final String pathname = warUrl.getPath();
- return new File(URLDecoder.decode(pathname));
+ try {
+ return new File(URLDecoder.decode(pathname, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ //noinspection deprecation
+ return new File(URLDecoder.decode(pathname));
+ }
} else {
return null;
}
@@ -1414,6 +1417,7 @@
return discoverModuleType(baseUrl, classLoader, search);
}
+ @SuppressWarnings("unchecked")
public Class<? extends DeploymentModule> discoverModuleType(final URL baseUrl, final ClassLoader classLoader, final Set<RequireDescriptors> requireDescriptor) throws IOException, UnknownModuleTypeException {
final boolean scanPotentialEjbModules = !requireDescriptor.contains(RequireDescriptors.EJB);
final boolean scanPotentialClientModules = !requireDescriptor.contains(RequireDescriptors.CLIENT);
@@ -1487,6 +1491,15 @@
return PersistenceModule.class;
}
+ //#TOMEE-613
+ final File file = URLs.toFile(baseUrl);
+ if (DeploymentsResolver.isValidDirectory(file)) {
+
+ final File[] files = file.listFiles();
+ if (containsEarAssets(files)) return AppModule.class;
+ if (containsWebAssets(files)) return WebModule.class;
+ }
+
final Class<? extends DeploymentModule> defaultType = (Class<? extends DeploymentModule>) SystemInstance.get().getOptions().get("openejb.default.deployment-module", (Class<?>) null);
if (defaultType != null) {
// should we do a better filtering? it seems enough for common cases.
@@ -1500,6 +1513,30 @@
throw new UnknownModuleTypeException("Unknown module type: url=" + path); // baseUrl can be null
}
+ private static boolean containsWebAssets(final File[] files) {
+ if (files != null) {
+ for (final File file : files) {
+ final String fn = file.getName().toLowerCase();
+ if (fn.endsWith(".jsp")) return true;
+ if (fn.endsWith(".html")) return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean containsEarAssets(final File[] files) {
+ if (files != null) {
+ for (final File file : files) {
+ final String fn = file.getName().toLowerCase();
+ if (fn.endsWith(".jar")) return true;
+ if (fn.endsWith(".war")) return true;
+ if (fn.endsWith(".rar")) return true;
+ }
+ }
+ return false;
+ }
+
+
private Map<String, URL> getDescriptors(final ClassLoader classLoader, final URL pathToScanDescriptors)
throws IOException {
final ResourceFinder finder = new ResourceFinder("", classLoader, pathToScanDescriptors);
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java
index 0974c23..547660a 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java
@@ -22,6 +22,7 @@
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -60,10 +61,22 @@
private final URI uri;
private boolean overriden = false;
+ /**
+ * The intention of this is to hold the extracted and archived versions
+ */
+ private final Set<String> locations = new LinkedHashSet<String>();
+
public ID(NamedModule vendorDd, NamedModule specDd, String name, File location, URI uri, DeploymentModule module) {
this.name = name(vendorDd, specDd, uri, location, name, module);
this.location = location(location, uri);
this.uri = uri(uri, location, this.name);
+ if (location != null) {
+ this.locations.add(location.getAbsolutePath());
+ }
+ }
+
+ public Set<String> getLocations() {
+ return locations;
}
private URI uri(URI uri, File location, String name) {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
index 5e26ae7..a087c17 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
@@ -17,8 +17,8 @@
package org.apache.openejb.config;
import org.apache.openejb.config.sys.Deployments;
-import org.apache.openejb.config.sys.JaxbOpenejb;
import org.apache.openejb.loader.FileUtils;
+import org.apache.openejb.loader.Files;
import org.apache.openejb.loader.Options;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.Logger;
@@ -30,152 +30,156 @@
import org.apache.xbean.finder.filter.IncludeExcludeFilter;
import java.io.File;
+import java.io.FileFilter;
import java.io.IOException;
-import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static org.apache.openejb.util.URLs.toFile;
+import static org.apache.openejb.util.URLs.toFileUrl;
/**
* @version $Rev$ $Date$
*/
public class DeploymentsResolver implements DeploymentFilterable {
+
private static final String EXCLUDE_INCLUDE_ORDER = SystemInstance.get().getOptions().get("openejb.exclude-include.order", "include-exclude");
-
+ private static final String[] ignoreDirs = SystemInstance.get().getProperty("openejb.ignore.directories", ".svn,_svn,cvs,.git,.hg").split(",");
private static final Logger logger = DeploymentLoader.logger;
+ private static File lib = null;
- public static void loadFrom(final Deployments dep, final FileUtils path, final List<URL> jarList) {
-
- ////////////////////////////////
- //
- // Expand the path of a jar
- //
- ////////////////////////////////
- if (dep.getDir() == null && dep.getJar() != null) {
- try {
- final File jar = path.getFile(dep.getJar(), false);
- final URL url = jar.toURI().toURL();
- if (!jarList.contains(url)) {
- jarList.add(url);
- }
- } catch (Exception ignored) {
- }
- return;
- }
-
- File dir = null;
+ static {
try {
- dir = path.getFile(dep.getDir(), false);
- } catch (Exception ignored) {
+ lib = SystemInstance.get().getHome().getDirectory("lib", false);
+ } catch (IOException e) {
+ //Ignore
+ }
+ }
+
+ protected static boolean isValidDirectory(final File file) {
+
+ if (file.isDirectory() && !file.isHidden() && !file.equals(lib)) {
+
+ final String fn = file.getName();
+
+ for (final String dir : ignoreDirs) {
+ if (fn.equalsIgnoreCase(dir)) {
+ return false;
+ }
+ }
+
+ final String[] files = file.list();
+
+ return (null != files && files.length > 0);
}
- if (dir == null || !dir.isDirectory()) return;
+ return false;
+ }
- ////////////////////////////////
- //
- // Unpacked "Jar" directory with descriptor
- //
- ////////////////////////////////
- final File ejbJarXml = new File(dir, "META-INF" + File.separator + "ejb-jar.xml");
- if (ejbJarXml.exists()) {
+ public static void loadFrom(final Deployments dep, final FileUtils path, final List<File> jarList) {
+
+ if (dep.getDir() != null) {
+
try {
- final URL url = dir.toURI().toURL();
- if (!jarList.contains(url)) {
- jarList.add(url);
- }
- } catch (MalformedURLException ignore) {
- }
- return;
- }
- final File appXml = new File(dir, "META-INF" + File.separator + "application.xml");
- if (appXml.exists()) {
+ loadFromDir(dep, path, jarList);
+
+ } catch (Files.FileDoesNotExistException e) {
+ logger.warning("<Deployments dir=\"" + dep.getFile() + "\"> - " + e.getMessage());
+
+ } catch (RuntimeException e) {
+ final String message = "<Deployments dir=\"" + dep.getFile() + "\"> - " + e.getMessage();
+
+ logger.error(message);
+ throw new DeploymentsConfigurationException(message);
+ }
+
+ } else if (dep.getFile() != null) {
+
try {
- final URL url = dir.toURI().toURL();
- if (!jarList.contains(url)) {
- jarList.add(url);
- }
- } catch (MalformedURLException ignore) {
+
+ loadFromFile(dep, path, jarList);
+
+ } catch (RuntimeException e) {
+ final String message = "<Deployments file=\"" + dep.getFile() + "\"> - " + e.getMessage();
+ logger.error(message);
+ throw new DeploymentsConfigurationException(message);
}
- return;
- }
- final File raXml = new File(dir, "META-INF" + File.separator + "ra.xml");
- if (raXml.exists()) {
- try {
- final URL url = dir.toURI().toURL();
- if (!jarList.contains(url)) {
- jarList.add(url);
+ }
+ }
+
+ public static class DeploymentsConfigurationException extends RuntimeException {
+ public DeploymentsConfigurationException(final String message) {
+ super(message);
+ }
+ }
+
+ private static void loadFromFile(final Deployments dep, final FileUtils path, final List<File> jarList) {
+ final File file = Files.path(path.getDirectory(), dep.getFile());
+
+ Files.exists(file);
+ Files.readable(file);
+ Files.file(file);
+
+ if (!jarList.contains(file)) {
+ jarList.add(file);
+ }
+ }
+
+ private static void loadFromDir(final Deployments dep, final FileUtils path, final List<File> jarList) {
+ final File dir = Files.path(path.getDirectory(), dep.getDir());
+
+ Files.exists(dir);
+ Files.readable(dir);
+ Files.dir(dir);
+ Files.notHidden(dir);
+
+ final Map<String, File> files = new LinkedHashMap<String, java.io.File>();
+ final File[] list = dir.listFiles(new FileFilter() {
+ @Override
+ public boolean accept(final File f) {
+ if (f.isDirectory()) {
+ return DeploymentsResolver.isValidDirectory(f);
}
- } catch (MalformedURLException ignore) {
+ return true;
}
- return;
- }
+ });
- ////////////////////////////////
- //
- // Directory contains Jar files
- //
- ////////////////////////////////
- boolean hasNestedArchives = false;
- final File[] dirFiles = dir.listFiles();
+ if (list != null) {
+ for (final File file : list) {
- if (null != dirFiles) {
- for (final File file : dirFiles) {
- try {
+ files.put(file.getAbsolutePath(), file);
+ }
- final URL url = file.toURI().toURL();
- if (jarList.contains(url)) continue;
-
- if ((file.getName().endsWith(".jar") || file.getName().endsWith(".war") || file.getName().endsWith(".rar") || file.getName().endsWith(".ear")) && !unpackExists(file)) {
- jarList.add(url);
- hasNestedArchives = true;
- } else if (new File(file, "META-INF").exists()) { // Unpacked ear or jar
- jarList.add(url);
- hasNestedArchives = true;
- } else if (new File(file, "WEB-INF").exists()) { // Unpacked webapp
- jarList.add(url);
- hasNestedArchives = true;
- }
- } catch (Exception e) {
- logger.debug("loadFrom", e);
- }
+ // Ignore any unpacked versions
+ for (final File file : list) {
+ if (!isArchive(file)) continue;
+ final String archive = file.getAbsolutePath();
+ files.remove(archive.substring(0, archive.length() - 4));
}
}
- ////////////////////////////////
- //
- // Unpacked "Jar" directory w/o descriptor
- //
- ////////////////////////////////
- if (!hasNestedArchives) {
- final HashMap<String, URL> files = new HashMap<String, URL>();
- DeploymentLoader.scanDir(dir, files, "");
- for (final String fileName : files.keySet()) {
- if (fileName.endsWith(".class")) {
- try {
- final URL url = dir.toURI().toURL();
- if (!jarList.contains(url)) {
- jarList.add(url);
- }
- } catch (MalformedURLException ignore) {
- }
- return;
- }
+ for (final File file : files.values()) {
+ if (!jarList.contains(file)) {
+ jarList.add(file);
}
}
}
- private static boolean unpackExists(final File file) {
+ private static boolean isArchive(final File file) {
+ if (!file.isFile()) return false;
+ if (!file.getName().toLowerCase().endsWith("ar")) return false;
+
final String name = file.getName();
- return !(!name.endsWith("ar") || name.length() < 5)
- && new File(file.getParentFile(), name.substring(0, name.length() -".war".length())).exists();
+ final char c = name.charAt(name.length() - 4);
+ return c == '.';
}
/**
@@ -322,100 +326,8 @@
}
- /**
- * The regular expressions involved in filtering can be costly
- * In the normal case we will not scan anyway, so if not
- * no point in optimizing the list of urls in the classpath
- *
- * @param include
- * @param exclude
- * @param requireDescriptors
- * @return
- */
- private static boolean shouldFilter(final String include, final String exclude, final Set<RequireDescriptors> requireDescriptors) {
- final boolean includeNothing = include.equals("");
- final boolean excludeEverything = exclude.equals(".*");
-
- // If we are going to eliminate the entire classpath from
- // scanning anyway, no sense in taking the time to do it
- // bit by bit. Return false
- if (includeNothing && excludeEverything) return false;
-
- // If we are forcably requiring descriptors for all possible file types
- // then there is also no scanning and no point in filtering the
- // classpath down bit by bit. Return false
- return requireDescriptors.size() != RequireDescriptors.values().length;
- }
-
- private static UrlSet applyBuiltinExcludes(UrlSet urlSet) throws MalformedURLException {
-
- urlSet = urlSet.exclude(".*/activation(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/activeio-core(-[\\d.]+)?(-incubator)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/activemq-(core|ra)(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/annotations-api-6.[01].[\\d.]+.jar(!/)?");
- urlSet = urlSet.exclude(".*/asm-(all|commons|util|tree)?[\\d.]+.jar(!/)?");
- urlSet = urlSet.exclude(".*/avalon-framework(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/axis2-jaxws-api(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/backport-util-concurrent(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/bcprov-jdk15(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/catalina(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/cglib-(nodep-)?[\\d.]+.jar(!/)?");
- urlSet = urlSet.exclude(".*/com\\.ibm\\.ws\\.[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/commons-(logging|logging-api|cli|pool|lang|collections|dbcp|dbcp-all)(-[\\d.r-]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/cxf-bundle(-[\\d.]+)?(incubator)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/openejb-cxf-bundle(-[\\d.]+)?(incubator)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/derby(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/ejb31-api-experimental(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/geronimo-(connector|transaction)(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/geronimo-[^/]+_spec(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/geronimo-javamail_([\\d.]+)_mail(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/hibernate-(entitymanager|annotations)?(-[\\d.]+(ga)?)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/howl(-[\\d.-]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/hsqldb(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/idb(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/idea_rt.jar(!/)?");
- urlSet = urlSet.exclude(".*/javaee-api(-embedded)?-[\\d.-]+.jar(!/)?");
- urlSet = urlSet.exclude(".*/javassist[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/jaxb-(impl|api)(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/jboss-[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/jbossall-[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/jbosscx-[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/jbossjts-?[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/jbosssx-[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/jmdns(-[\\d.]+)?(-RC\\d)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/juli(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/junit(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/log4j(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/logkit(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/mail(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/neethi(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/org\\.eclipse\\.persistence\\.[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/org\\.junit_.[^/]*.jar(!/)?");
- urlSet = urlSet.exclude(".*/openjpa-(jdbc|kernel|lib|persistence|persistence-jdbc)(-5)?(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/openjpa(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/opensaml(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/quartz(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/saaj-impl(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/serp(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/servlet-api(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/slf4j-api(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/slf4j-jdk14(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/stax-api(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/swizzle-stream(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/sxc-(jaxb|runtime)(-[\\d.]+)?(-SNAPSHOT)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/wsdl4j(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/wss4j(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/wstx-asl(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/xbean-(reflect|naming|finder)-(shaded-)?[\\d.]+.jar(!/)?");
- urlSet = urlSet.exclude(".*/xmlParserAPIs(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/xmlunit(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/xmlsec(-[\\d.]+)?.jar(!/)?");
- urlSet = urlSet.exclude(".*/XmlSchema(-[\\d.]+)?.jar(!/)?");
- return urlSet;
- }
-
public static void processUrls(final List<URL> urls, final ClassLoader classLoader, final Set<RequireDescriptors> requireDescriptors, final FileUtils base, final List<URL> jarList) {
- for (URL url : urls) {
+ for (final URL url : urls) {
final String urlProtocol = url.getProtocol();
//Currently, we only support jar and file protocol
@@ -425,8 +337,6 @@
continue;
}
- final Deployments deployment;
- String path = "";
try {
final DeploymentLoader deploymentLoader = new DeploymentLoader();
@@ -434,30 +344,13 @@
final Class<? extends DeploymentModule> moduleType = deploymentLoader.discoverModuleType(url, classLoader, requireDescriptors);
if (AppModule.class.isAssignableFrom(moduleType) || EjbModule.class.isAssignableFrom(moduleType) || PersistenceModule.class.isAssignableFrom(moduleType) || ConnectorModule.class.isAssignableFrom(moduleType) || ClientModule.class.isAssignableFrom(moduleType)) {
- if (AppModule.class.isAssignableFrom(moduleType) || ConnectorModule.class.isAssignableFrom(moduleType)) {
+ final URL archive = toFileUrl(url);
- deployment = JaxbOpenejb.createDeployments();
-
- if (urlProtocol.equals("jar")) {
- url = new URL(url.getFile().replaceFirst("!.*$", ""));
- final File file = toFile(url);
- path = file.getAbsolutePath();
- deployment.setJar(path);
- } else if (urlProtocol.equals("file")) {
- final File file = toFile(url);
- path = file.getAbsolutePath();
- deployment.setDir(path);
- }
-
- logger.info("Found " + moduleType.getSimpleName() + " in classpath: " + path);
-
- loadFrom(deployment, base, jarList);
- } else {
- if (!jarList.contains(url)) {
- jarList.add(url);
- }
+ if (!jarList.contains(archive)) {
+ jarList.add(archive);
+ final File file = toFile(archive);
+ logger.info("Found " + moduleType.getSimpleName() + " in classpath: " + file.getAbsolutePath());
}
-
}
} catch (IOException e) {
logger.warning("Unable to determine the module type of " + url.toExternalForm() + ": Exception: " + e.getMessage(), e);
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/JPAPropertyConverter.java b/container/openejb-core/src/main/java/org/apache/openejb/config/JPAPropertyConverter.java
index af73d34..c63d3ad 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/JPAPropertyConverter.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/JPAPropertyConverter.java
@@ -42,7 +42,8 @@
return value;
}
- @Override public String toString() {
+ @Override
+ public String toString() {
return key + '=' + value;
}
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java b/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
index 68ab02c..1a3cfae 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
@@ -26,6 +26,7 @@
import org.apache.openejb.jee.PersistenceContextType;
import org.apache.openejb.jee.ResourceEnvRef;
import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.SessionBean;
import org.apache.openejb.jee.TransactionType;
import javax.ejb.EJBContext;
@@ -84,34 +85,38 @@
mergeUserTransaction(webApp.getResourceEnvRefMap(), bean.getResourceEnvRefMap(), bean);
}
+ final SessionBean aggregator = new SessionBean(); // easy way to get a JndiConsumer
+
for (EnterpriseBean a : ejbJar.getEnterpriseBeans()) {
+ aggregator.getEnvEntryMap().putAll(a.getEnvEntryMap());
+ aggregator.getEjbRefMap().putAll(a.getEjbRefMap());
+ aggregator.getEjbLocalRefMap().putAll(a.getEjbLocalRefMap());
+ aggregator.getServiceRefMap().putAll(a.getServiceRefMap());
+ aggregator.getResourceRefMap().putAll(a.getResourceRefMap());
+ aggregator.getResourceEnvRefMap().putAll(a.getResourceEnvRefMap());
+ aggregator.getMessageDestinationRefMap().putAll(a.getMessageDestinationRefMap());
+ aggregator.getPersistenceContextRefMap().putAll(a.getPersistenceContextRefMap());
+ aggregator.getPersistenceUnitRefMap().putAll(a.getPersistenceUnitRefMap());
+ }
- // Merge the bean namespaces together too
- for (EnterpriseBean b : ejbJar.getEnterpriseBeans()) {
- if (a == b) continue;
+ for (EnterpriseBean a : ejbJar.getEnterpriseBeans()) {
+ merge(a.getEnvEntryMap(), aggregator.getEnvEntryMap());
+ merge(a.getEjbRefMap(), aggregator.getEjbRefMap());
+ merge(a.getEjbLocalRefMap(), aggregator.getEjbLocalRefMap());
+ merge(a.getServiceRefMap(), aggregator.getServiceRefMap());
+ merge(a.getResourceRefMap(), aggregator.getResourceRefMap());
+ merge(a.getResourceEnvRefMap(), aggregator.getResourceEnvRefMap());
+ merge(a.getMessageDestinationRefMap(), aggregator.getMessageDestinationRefMap());
+ merge(a.getPersistenceContextRefMap(), aggregator.getPersistenceContextRefMap());
+ merge(a.getPersistenceUnitRefMap(), aggregator.getPersistenceUnitRefMap());
- merge(a.getEnvEntryMap(), b.getEnvEntryMap());
- merge(a.getEjbRefMap(), b.getEjbRefMap());
- merge(a.getEjbLocalRefMap(), b.getEjbLocalRefMap());
- merge(a.getServiceRefMap(), b.getServiceRefMap());
- merge(a.getResourceRefMap(), b.getResourceRefMap());
- merge(a.getResourceEnvRefMap(), b.getResourceEnvRefMap());
- merge(a.getMessageDestinationRefMap(), b.getMessageDestinationRefMap());
- merge(a.getPersistenceContextRefMap(), b.getPersistenceContextRefMap());
- merge(a.getPersistenceUnitRefMap(), b.getPersistenceUnitRefMap());
-
- mergeUserTransaction(a.getResourceRefMap(), b.getResourceRefMap(), b);
- mergeUserTransaction(a.getResourceEnvRefMap(), b.getResourceEnvRefMap(), b);
- }
+ mergeUserTransaction(aggregator.getResourceRefMap(), a.getResourceRefMap(), a);
+ mergeUserTransaction(aggregator.getResourceEnvRefMap(), a.getResourceEnvRefMap(), a);
}
}
/**
* Bidirectional a-b merge
- *
- * @param a
- * @param b
- * @param <R>
*/
private <R extends JndiReference> void merge(Map<String, R> a, Map<String, R> b) {
copy(a, b);
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
index 6e1148d..536efb4 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
@@ -36,6 +36,7 @@
/**
* @version $Rev$ $Date$
*/
+@SuppressWarnings("UseOfSystemOutOrSystemErr")
public class RemoteServer {
private static final Options options = new Options(System.getProperties());
public static final String SERVER_DEBUG_PORT = "server.debug.port";
@@ -68,7 +69,7 @@
this(options.get("connect.tries", 60), options.get("verbose", false));
}
- public RemoteServer(int tries, boolean verbose) {
+ public RemoteServer(final int tries, final boolean verbose) {
this.tries = tries;
this.verbose = verbose;
home = getHome();
@@ -79,7 +80,7 @@
host = options.get(SERVER_SHUTDOWN_HOST, "localhost");
}
- public void init(Properties props) {
+ public void init(final Properties props) {
properties = props;
props.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
@@ -88,12 +89,12 @@
props.put("java.naming.security.credentials", "testpassword");
}
- public static void main(String[] args) {
+ public static void main(final String[] args) {
assert args.length > 0 : "no arguments supplied: valid argumen -efts are 'start' or 'stop'";
if (args[0].equalsIgnoreCase("start")){
new RemoteServer().start();
} else if (args[0].equalsIgnoreCase("stop")) {
- RemoteServer remoteServer = new RemoteServer();
+ final RemoteServer remoteServer = new RemoteServer();
remoteServer.serverHasAlreadyBeenStarted = false;
remoteServer.stop();
} else {
@@ -112,11 +113,11 @@
start(Collections.EMPTY_LIST, "start", true);
}
- public void start(final List<String> additionalArgs, final String cmd, boolean checkPortAvailable) {
+ public void start(final List<String> additionalArgs, final String cmd, final boolean checkPortAvailable) {
cmd(additionalArgs, cmd, checkPortAvailable);
}
- private void cmd(final List<String> additionalArgs, final String cmd, boolean checkPortAvailable) {
+ private void cmd(final List<String> additionalArgs, final String cmd, final boolean checkPortAvailable) {
boolean ok = true;
if (checkPortAvailable) {
ok = !connect();
@@ -127,11 +128,11 @@
System.out.println("[] " + cmd.toUpperCase() + " SERVER");
}
- File home = getHome();
- String javaVersion = System.getProperty("java.version");
+ final File home = getHome();
+ final String javaVersion = System.getProperty("java.version");
if (verbose) {
System.out.println("OPENEJB_HOME = "+ home.getAbsolutePath());
- String systemInfo = "Java " + javaVersion + "; " + System.getProperty("os.name") + "/" + System.getProperty("os.version");
+ final String systemInfo = "Java " + javaVersion + "; " + System.getProperty("os.name") + "/" + System.getProperty("os.version");
System.out.println("SYSTEM_INFO = "+systemInfo);
}
@@ -156,7 +157,7 @@
//DMB: If you don't use an array, you get problems with jar paths containing spaces
// the command won't parse correctly
- String[] args;
+ final String[] args;
final int debugPort = options.get(SERVER_DEBUG_PORT, 5005);
if (!tomcat) {
if (debug) {
@@ -179,23 +180,23 @@
};
}
} else {
- File bin = new File(home, "bin");
- File tlib = new File(home, "lib");
- File bootstrapJar = new File(bin, "bootstrap.jar");
- File juliJar = new File(bin, "tomcat-juli.jar");
- File commonsLoggingJar = new File(bin, "commons-logging-api.jar");
+ final File bin = new File(home, "bin");
+ final File tlib = new File(home, "lib");
+ final File bootstrapJar = new File(bin, "bootstrap.jar");
+ final File juliJar = new File(bin, "tomcat-juli.jar");
+ final File commonsLoggingJar = new File(bin, "commons-logging-api.jar");
- File conf = new File(home, "conf");
- File loggingProperties = new File(conf, "logging.properties");
+ final File conf = new File(home, "conf");
+ final File loggingProperties = new File(conf, "logging.properties");
File endorsed = new File(home, "endorsed");
if (javaVersion != null && javaVersion.startsWith("1.7.")) { // java 7
endorsed = new File(home, "endorsed7"); // doesn't exist but just to ignore it with j7
}
- File temp = new File(home, "temp");
+ final File temp = new File(home, "temp");
- List<String> argsList = new ArrayList<String>() {};
+ final List<String> argsList = new ArrayList<String>() {};
argsList.add(java);
argsList.add("-XX:+HeapDumpOnOutOfMemoryError");
@@ -215,15 +216,15 @@
if (javaOpts != null) {
final String[] strings = javaOpts.split(" +");
- for (String string : strings) {
+ for (final String string : strings) {
argsList.add(string);
}
}
final Map<String, String> addedArgs = new HashMap<String, String>();
if (additionalArgs != null) {
- for (String arg : additionalArgs) {
- String[] values = arg.split("=");
+ for (final String arg : additionalArgs) {
+ final String[] values = arg.split("=");
if (values.length == 1) {
addedArgs.put(values[0], "null");
} else {
@@ -274,7 +275,7 @@
argsList.add("-ea");
argsList.add("-classpath");
- String ps = File.pathSeparator;
+ final String ps = File.pathSeparator;
final StringBuilder cp = new StringBuilder(bootstrapJar.getAbsolutePath()).append(ps).append(juliJar.getAbsolutePath());
if (commonsLoggingJar.exists()) {
cp.append(ps).append(commonsLoggingJar.getAbsolutePath());
@@ -327,7 +328,7 @@
// debugging method (mainly for buildbot), don't let it activated when all is fine
private void kill3UNIXDebug() {
- Thread t = new Thread() {
+ final Thread t = new Thread() {
@Override
public void run() {
setName("[DEBUG] Dump Observer");
@@ -368,18 +369,18 @@
try {
final Field f = server.getClass().getDeclaredField("pid");
f.setAccessible(true);
- int pid = (Integer) f.get(server);
+ final int pid = (Integer) f.get(server);
Pipe.pipe(Runtime.getRuntime().exec("kill -3 " + pid));
} catch (Exception e1) {
e1.printStackTrace();
}
}
- private File lib(String name, File... dirs) {
- for (File dir : dirs) {
+ private File lib(final String name, final File... dirs) {
+ for (final File dir : dirs) {
final File[] files = dir.listFiles();
if (files != null) {
- for (File file : files) {
+ for (final File file : files) {
if (!file.isFile()) continue;
if (!file.getName().endsWith(".jar")) continue;
if (file.getName().startsWith(name)) return file;
@@ -387,7 +388,7 @@
}
}
- for (File dir : dirs) {
+ for (final File dir : dirs) {
dumpLibs(dir);
}
throw new IllegalStateException("Cannot find the " + name + " jar");
@@ -401,7 +402,7 @@
}
final File[] files = dir.listFiles();
if (files != null) {
- for (File lib : files) {
+ for (final File lib : files) {
System.out.println(lib.getAbsolutePath());
}
}
@@ -411,7 +412,7 @@
return server;
}
- private void addIfSet(List<String> argsList, String key) {
+ private void addIfSet(final List<String> argsList, final String key) {
if (System.getProperties().containsKey(key)) {
argsList.add("-D" + key + "=" + System.getProperty(key));
}
@@ -422,7 +423,7 @@
return home;
}
- String openejbHome = System.getProperty("openejb.home");
+ final String openejbHome = System.getProperty("openejb.home");
if (openejbHome != null) {
home = new File(openejbHome);
@@ -465,12 +466,12 @@
}
private void forceShutdown() throws Exception {
- String fcommand = command + Character.toString((char) 0); // SHUTDOWN + EOF
+ final String fcommand = command + Character.toString((char) 0); // SHUTDOWN + EOF
Socket socket = null;
try {
socket= new Socket(host, shutdownPort);
- OutputStream out = socket.getOutputStream();
+ final OutputStream out = socket.getOutputStream();
out.write(fcommand.getBytes());
out.flush();
} finally {
@@ -544,7 +545,7 @@
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
- for (Process server : kill) {
+ for (final Process server : kill) {
try {
if (server != null) {
server.destroy();
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java b/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
index ce8320c..ec41f03 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
@@ -16,6 +16,13 @@
*/
package org.apache.openejb.config;
+import org.apache.openejb.jee.FacesConfig;
+import org.apache.openejb.jee.TldTaglib;
+import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.jee.Webservices;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.xbean.finder.IAnnotationFinder;
+
import java.io.File;
import java.net.URI;
import java.net.URL;
@@ -26,12 +33,6 @@
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
-import org.apache.openejb.jee.FacesConfig;
-import org.apache.openejb.jee.TldTaglib;
-import org.apache.openejb.jee.WebApp;
-import org.apache.openejb.jee.Webservices;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.xbean.finder.IAnnotationFinder;
/**
* @version $Rev$ $Date$
@@ -57,7 +58,7 @@
private final Map<String, Set<String>> webAnnotatedClasses = new HashMap<String, Set<String>>();
private ID id;
-
+
// keep the list of filtered URL we got after applying include/exclude pattern (@See DeploymentsResolver.loadFromClasspath)
private List<URL> urls;
private List<URL> scannableUrls;
@@ -166,9 +167,10 @@
public Set<String> getWatchedResources() {
return watchedResources;
}
+
public List<FacesConfig> getFacesConfigs() {
- return facesConfigs;
- }
+ return facesConfigs;
+ }
@Override
public String toString() {
@@ -178,7 +180,8 @@
'}';
}
- @Override public Set<String> getRestClasses() {
+ @Override
+ public Set<String> getRestClasses() {
return restClasses;
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClassLoading.java b/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClassLoading.java
index 900d6c0..417b10f 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClassLoading.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClassLoading.java
@@ -47,7 +47,8 @@
protected AppModule appModule;
- @Override public void validate(AppModule appModule) {
+ @Override
+ public void validate(AppModule appModule) {
this.appModule = appModule;
module = appModule;
check(appModule.getClassLoader());
@@ -86,16 +87,18 @@
check(webModule.getClassLoader());
}
- @Override public void validate(ClientModule clientModule) {
+ @Override
+ public void validate(ClientModule clientModule) {
check(clientModule.getClassLoader());
}
- @Override public void validate(EjbModule ejbModule) {
+ @Override
+ public void validate(EjbModule ejbModule) {
check(ejbModule.getClassLoader());
}
public static class Classes {
- private static final String[] CLASS_EXTENSION = new String[] { ".class" };
+ private static final String[] CLASS_EXTENSION = new String[]{".class"};
private final Map<String, Collection<String>> fileByArchive = new TreeMap<String, Collection<String>>();
@@ -208,7 +211,7 @@
final String str = "both files " + file1 + '\''
+ " and " + file2 + '\'';
if (SystemInstance.get().getOptions().get(OPENEJB_CHECK_CLASSLOADER_VERBOSE, false)) {
- return str + " contains files=" + files;
+ return str + " contains files=" + files;
}
return str;
}
@@ -219,7 +222,8 @@
super(inter, dir1, dir2);
}
- @Override public String toScreen() {
+ @Override
+ public String toScreen() {
return getFile1() + " contains " + getFile2();
}
}
@@ -229,7 +233,8 @@
super(files, file1, file2);
}
- @Override public String toScreen() {
+ @Override
+ public String toScreen() {
return getFile1() + " is included inside " + getFile2();
}
}
@@ -239,7 +244,8 @@
super(files, file1, file2);
}
- @Override public String toScreen() {
+ @Override
+ public String toScreen() {
return getFile1() + " is the same than " + getFile2();
}
}
@@ -247,6 +253,7 @@
public static class DiffItemComparator implements Comparator<DiffItem> {
private static final DiffItemComparator INSTANCE = new DiffItemComparator();
private static final Map<Class<?>, Integer> ORDER = new HashMap<Class<?>, Integer>();
+
static {
ORDER.put(SameItem.class, 0);
ORDER.put(IncludedItem.class, 1);
@@ -259,7 +266,8 @@
return INSTANCE;
}
- @Override public int compare(DiffItem o1, DiffItem o2) {
+ @Override
+ public int compare(DiffItem o1, DiffItem o2) {
int index1 = ORDER.get(o1.getClass());
int index2 = ORDER.get(o2.getClass());
if (index1 == index2) {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java b/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java
index 60f56b0..96692c5 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckRestMethodArePublic.java
@@ -37,59 +37,69 @@
public void validate(final AppModule appModule) {
// valid standalone classes
final Collection<String> standAloneClasses = new ArrayList<String>();
- for (EjbModule ejb : appModule.getEjbModules()) {
- for (EnterpriseBean bean : ejb.getEjbJar().getEnterpriseBeans()) {
- if (bean instanceof SessionBean && ((SessionBean) bean).isRestService()) {
- standAloneClasses.add(bean.getEjbClass());
- valid(ejb.getValidation(), ejb.getClassLoader(), bean.getEjbClass());
- }
- }
- }
- for (WebModule web : appModule.getWebModules()) {
- // build the list of classes to validate
- final Collection<String> classes = new ArrayList<String>();
- classes.addAll(web.getRestClasses());
- classes.addAll(web.getEjbRestServices());
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try {
+ for (EjbModule ejb : appModule.getEjbModules()) {
+ Thread.currentThread().setContextClassLoader(ejb.getClassLoader());
- for (String app : web.getRestApplications()) {
- Class<?> clazz;
- try {
- clazz = web.getClassLoader().loadClass(app);
- } catch (ClassNotFoundException e) {
- continue; // managed elsewhere, here we just check methods
- }
-
- final Application appInstance;
- try {
- appInstance = (Application) clazz.newInstance();
- } catch (Exception e) {
- continue; // managed elsewhere
- }
-
- for (Class<?> rsClass : appInstance.getClasses()) {
- classes.add(rsClass.getName());
- }
- for (Object rsSingleton : appInstance.getSingletons()) {
- classes.add(rsSingleton.getClass().getName());
+ for (EnterpriseBean bean : ejb.getEjbJar().getEnterpriseBeans()) {
+ if (bean instanceof SessionBean && ((SessionBean) bean).isRestService()) {
+ standAloneClasses.add(bean.getEjbClass());
+ valid(ejb.getValidation(), ejb.getClassLoader(), bean.getEjbClass());
+ }
}
}
- // try to avoid to valid twice the same classes
- final Iterator<String> it = classes.iterator();
- while (it.hasNext()) {
- final String current = it.next();
- if (standAloneClasses.contains(current)) {
- it.remove();
+ for (WebModule web : appModule.getWebModules()) {
+ Thread.currentThread().setContextClassLoader(web.getClassLoader());
+
+ // build the list of classes to validate
+ final Collection<String> classes = new ArrayList<String>();
+ classes.addAll(web.getRestClasses());
+ classes.addAll(web.getEjbRestServices());
+
+ for (String app : web.getRestApplications()) {
+ Class<?> clazz;
+ try {
+ clazz = web.getClassLoader().loadClass(app);
+ } catch (ClassNotFoundException e) {
+ continue; // managed elsewhere, here we just check methods
+ }
+
+ final Application appInstance;
+ try {
+ appInstance = (Application) clazz.newInstance();
+ } catch (Exception e) {
+ continue; // managed elsewhere
+ }
+
+ for (Class<?> rsClass : appInstance.getClasses()) {
+ classes.add(rsClass.getName());
+ }
+ for (Object rsSingleton : appInstance.getSingletons()) {
+ classes.add(rsSingleton.getClass().getName());
+ }
}
- }
- // valid
- for (String classname : classes) {
- valid(web.getValidation(), web.getClassLoader(), classname);
- }
+ // try to avoid to valid twice the same classes
+ final Iterator<String> it = classes.iterator();
+ while (it.hasNext()) {
+ final String current = it.next();
+ if (standAloneClasses.contains(current)) {
+ it.remove();
+ }
+ }
- classes.clear();
+ // valid
+ for (String classname : classes) {
+ valid(web.getValidation(), web.getClassLoader(), classname);
+ }
+
+ classes.clear();
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
}
standAloneClasses.clear();
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java b/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java
index d3ac034..96d69be 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/rules/ValidationBase.java
@@ -40,13 +40,22 @@
DeploymentModule module;
public void validate(AppModule appModule) {
- for (EjbModule ejbModule : appModule.getEjbModules()) {
- module = ejbModule;
- validate(ejbModule);
- }
- for (ClientModule clientModule : appModule.getClientModules()) {
- module = clientModule;
- validate(clientModule);
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try {
+ for (EjbModule ejbModule : appModule.getEjbModules()) {
+ Thread.currentThread().setContextClassLoader(ejbModule.getClassLoader());
+
+ module = ejbModule;
+ validate(ejbModule);
+ }
+ for (ClientModule clientModule : appModule.getClientModules()) {
+ Thread.currentThread().setContextClassLoader(clientModule.getClassLoader());
+
+ module = clientModule;
+ validate(clientModule);
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
}
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Deployments.java b/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Deployments.java
index 46ae06e..3674be4 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Deployments.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Deployments.java
@@ -48,10 +48,21 @@
@XmlAttribute
protected String dir;
@XmlAttribute
- protected String jar;
+ protected String file;
+ @XmlAttribute
+ protected boolean autoDeploy;
+
@XmlTransient
protected ClassLoader classpath;
+ public boolean isAutoDeploy() {
+ return autoDeploy;
+ }
+
+ public void setAutoDeploy(boolean autoDeploy) {
+ this.autoDeploy = autoDeploy;
+ }
+
/**
* Gets the value of the dir property.
*
@@ -72,14 +83,20 @@
this.dir = value;
}
+
+ public Deployments dir(String name) {
+ setDir(name);
+ return this;
+ }
+
/**
* Gets the value of the jar property.
*
* @return possible object is
* {@link String }
*/
- public String getJar() {
- return jar;
+ public String getFile() {
+ return file;
}
/**
@@ -88,8 +105,13 @@
* @param value allowed object is
* {@link String }
*/
- public void setJar(String value) {
- this.jar = value;
+ public void setFile(String value) {
+ this.file = value;
+ }
+
+ public Deployments file(String name) {
+ setFile(name);
+ return this;
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java b/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
index fc46b1d..8a2311c 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
@@ -17,7 +17,6 @@
package org.apache.openejb.config.sys;
import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.util.Join;
import org.apache.openejb.util.Saxs;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
@@ -33,7 +32,6 @@
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -98,8 +96,10 @@
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
deployments.setDir(attributes.getValue("dir"));
- deployments.setJar(attributes.getValue("jar"));
- checkAttributes(attributes, "dir", "jar");
+ deployments.setFile(attributes.getValue("jar"));
+ deployments.setFile(attributes.getValue("file"));
+ deployments.setAutoDeploy("true".equals(attributes.getValue("autoDeploy")));
+ checkAttributes(attributes, "dir", "jar", "file", "autoDeploy");
}
@Override
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java b/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
index 5589e91..f4189c1 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
@@ -46,26 +46,31 @@
*/
// Note: this class is a fork from OpenJPA
public class TempClassLoader extends URLClassLoader {
+
private final Set<Skip> skip;
private final ClassLoader system;
private final boolean embedded;
- public TempClassLoader(ClassLoader parent) {
+ // 80% of class files are smaller then 6k
+ private final ByteArrayOutputStream bout = new ByteArrayOutputStream(6 * 1024);
+
+ public TempClassLoader(final ClassLoader parent) {
super(new URL[0], parent);
- skip = SystemInstance.get().getOptions().getAll("openejb.tempclassloader.skip", Skip.NONE);
- system = ClassLoader.getSystemClassLoader();
- embedded = getClass().getClassLoader() == system;
+ this.skip = SystemInstance.get().getOptions().getAll("openejb.tempclassloader.skip", Skip.NONE);
+ this.system = ClassLoader.getSystemClassLoader();
+ this.embedded = this.getClass().getClassLoader() == this.system;
}
/*
* Needed for testing
*/
- public void skip(Skip s) {
+ public void skip(final Skip s) {
this.skip.add(s);
}
- public Class loadClass(String name) throws ClassNotFoundException {
- return loadClass(name, false);
+ @Override
+ public Class loadClass(final String name) throws ClassNotFoundException {
+ return this.loadClass(name, false);
}
@Override
@@ -73,11 +78,12 @@
return URLClassLoaderFirst.filterResources(name, super.getResources(name));
}
- protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
+ @Override
+ protected synchronized Class loadClass(final String name, final boolean resolve) throws ClassNotFoundException {
if (name == null) throw new NullPointerException("name cannot be null");
-
+
// see if we've already loaded it
- Class c = findLoadedClass(name);
+ Class c = this.findLoadedClass(name);
if (c != null) {
return c;
}
@@ -96,16 +102,16 @@
* 2. Since this class loader uses Class.forName to load classes starting with java, javax or sun, it cannot load javax.faces.FacesServlet
* 3. Result is , AnnotationDeployer throws a ClassNotFoundException
*/
- if (skip(name)) {
- return Class.forName(name, resolve, getClass().getClassLoader());
+ if (this.skip(name)) {
+ return Class.forName(name, resolve, this.getClass().getClassLoader());
}
// don't load classes from app classloader
// we do it after the previous one since it will probably result to the same
// Class and the previous one is faster than this one
- if (!embedded && URLClassLoaderFirst.canBeLoadedFromSystem(name)) {
+ if (!this.embedded && URLClassLoaderFirst.canBeLoadedFromSystem(name)) {
try {
- c = system.loadClass(name);
+ c = this.system.loadClass(name);
if (c != null) {
return c;
}
@@ -115,23 +121,28 @@
}
// ( && !name.startsWith("javax.faces.") )||
- String resourceName = name.replace('.', '/') + ".class";
- InputStream in = getResourceAsStream(resourceName);
- if (in != null && !(in instanceof BufferedInputStream)) {
- in = new BufferedInputStream(in);
- }
- if (in == null) {
- throw new ClassNotFoundException(name);
- }
+ final String resourceName = name.replace('.', '/') + ".class";
- // 80% of class files are smaller then 6k
- ByteArrayOutputStream bout = new ByteArrayOutputStream(8 * 1024);
+ //Copy the input stream into a byte array
+ final byte[] bytes;
+ this.bout.reset();
+ InputStream in = null;
- // copy the input stream into a byte array
- byte[] bytes;
try {
- IO.copy(in, bout);
- bytes = bout.toByteArray();
+
+ in = this.getResourceAsStream(resourceName);
+
+ if (in != null && !(in instanceof BufferedInputStream)) {
+ in = new BufferedInputStream(in);
+ }
+
+ if (in == null) {
+ throw new ClassNotFoundException(name);
+ }
+
+ IO.copy(in, this.bout);
+ bytes = this.bout.toByteArray();
+
} catch (IOException e) {
throw new ClassNotFoundException(name, e);
} finally {
@@ -140,26 +151,26 @@
// Annotation classes must be loaded by the normal classloader
// So must Enum classes to prevent problems with the sun jdk.
- if (skip.contains(Skip.ANNOTATIONS) && isAnnotationClass(bytes)) {
- return Class.forName(name, resolve, getClass().getClassLoader());
+ if (this.skip.contains(Skip.ANNOTATIONS) && isAnnotationClass(bytes)) {
+ return Class.forName(name, resolve, this.getClass().getClassLoader());
}
- if (skip.contains(Skip.ENUMS) && isEnum(bytes)) {
- return Class.forName(name, resolve, getClass().getClassLoader());
+ if (this.skip.contains(Skip.ENUMS) && isEnum(bytes)) {
+ return Class.forName(name, resolve, this.getClass().getClassLoader());
}
// define the package
- int packageEndIndex = name.lastIndexOf('.');
+ final int packageEndIndex = name.lastIndexOf('.');
if (packageEndIndex != -1) {
- String packageName = name.substring(0, packageEndIndex);
- if (getPackage(packageName) == null) {
- definePackage(packageName, null, null, null, null, null, null, null);
+ final String packageName = name.substring(0, packageEndIndex);
+ if (this.getPackage(packageName) == null) {
+ this.definePackage(packageName, null, null, null, null, null, null, null);
}
}
// define the class
try {
- return defineClass(name, bytes, 0, bytes.length);
+ return this.defineClass(name, bytes, 0, bytes.length);
} catch (SecurityException e) {
// possible prohibited package: defer to the parent
return super.loadClass(name, resolve);
@@ -170,8 +181,8 @@
}
// TODO: for jsf it can be useful to include commons-logging and openwebbeans...
- private boolean skip(String name) {
- return skip.contains(Skip.ALL) || URLClassLoaderFirst.shouldSkip(name);
+ private boolean skip(final String name) {
+ return this.skip.contains(Skip.ALL) || URLClassLoaderFirst.shouldSkip(name);
}
public static enum Skip {
@@ -182,9 +193,9 @@
* Fast-parse the given class bytecode to determine if it is an
* enum class.
*/
- private static boolean isEnum(byte[] bytes) {
- IsEnumVisitor isEnumVisitor = new IsEnumVisitor();
- ClassReader classReader = new ClassReader(bytes);
+ private static boolean isEnum(final byte[] bytes) {
+ final IsEnumVisitor isEnumVisitor = new IsEnumVisitor();
+ final ClassReader classReader = new ClassReader(bytes);
classReader.accept(isEnumVisitor, ClassReader.SKIP_DEBUG);
return isEnumVisitor.isEnum;
}
@@ -193,9 +204,9 @@
* Fast-parse the given class bytecode to determine if it is an
* annotation class.
*/
- private static boolean isAnnotationClass(byte[] bytes) {
- IsAnnotationVisitor isAnnotationVisitor = new IsAnnotationVisitor();
- ClassReader classReader = new ClassReader(bytes);
+ private static boolean isAnnotationClass(final byte[] bytes) {
+ final IsAnnotationVisitor isAnnotationVisitor = new IsAnnotationVisitor();
+ final ClassReader classReader = new ClassReader(bytes);
classReader.accept(isAnnotationVisitor, ClassReader.SKIP_DEBUG);
return isAnnotationVisitor.isAnnotation;
}
@@ -203,17 +214,19 @@
public static class IsAnnotationVisitor extends EmptyVisitor {
public boolean isAnnotation = false;
- public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
- isAnnotation = (access & Opcodes.ACC_ANNOTATION) != 0;
+ @Override
+ public void visit(final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) {
+ this.isAnnotation = (access & Opcodes.ACC_ANNOTATION) != 0;
}
}
-
+
public static class IsEnumVisitor extends EmptyVisitor {
public boolean isEnum = false;
- public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
- isEnum = (access & Opcodes.ACC_ENUM) != 0;
+ @Override
+ public void visit(final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) {
+ this.isEnum = (access & Opcodes.ACC_ENUM) != 0;
}
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java b/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
index d8504e1..47965eb 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
@@ -16,30 +16,6 @@
*/
package org.apache.openejb.core.stateless;
-import java.io.Flushable;
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import javax.ejb.ConcurrentAccessTimeoutException;
-import javax.ejb.EJBContext;
-import javax.ejb.SessionBean;
-import javax.ejb.SessionContext;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-import javax.naming.Context;
-import javax.naming.NamingException;
import org.apache.openejb.ApplicationException;
import org.apache.openejb.BeanContext;
import org.apache.openejb.OpenEJBException;
@@ -47,7 +23,6 @@
import org.apache.openejb.core.InstanceContext;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.core.interceptor.Interceptor;
import org.apache.openejb.core.interceptor.InterceptorData;
import org.apache.openejb.core.interceptor.InterceptorInstance;
import org.apache.openejb.core.interceptor.InterceptorStack;
@@ -67,9 +42,35 @@
import org.apache.xbean.recipe.ObjectRecipe;
import org.apache.xbean.recipe.Option;
+import javax.ejb.ConcurrentAccessTimeoutException;
+import javax.ejb.EJBContext;
+import javax.ejb.SessionBean;
+import javax.ejb.SessionContext;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import java.io.Flushable;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
public class StatelessInstanceManager {
private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB, "org.apache.openejb.util.resources");
private static final Method removeSessionBeanMethod;
+
static { // initialize it only once
Method foundRemoveMethod;
try {
@@ -97,15 +98,15 @@
if (accessTimeout.getUnit() == null) accessTimeout.setUnit(TimeUnit.MILLISECONDS);
- executor = new ThreadPoolExecutor(callbackThreads, callbackThreads*2,
+ executor = new ThreadPoolExecutor(callbackThreads, callbackThreads * 2,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(), new ThreadFactory() {
- public Thread newThread(Runnable runable) {
- Thread t = new Thread(runable, "StatelessPool");
- t.setDaemon(true);
- return t;
- }
- });
+ public Thread newThread(Runnable runable) {
+ Thread t = new Thread(runable, "StatelessPool");
+ t.setDaemon(true);
+ return t;
+ }
+ });
}
@@ -123,7 +124,7 @@
try {
freeInstance(ctx, instance);
} finally {
- ThreadContext.exit(oldCallContext);
+ ThreadContext.exit(oldCallContext);
}
}
@@ -135,12 +136,13 @@
} catch (OpenEJBException e) {
logger.error("Unable to fill pool: for deployment '" + beanContext.getDeploymentID() + "'", e);
} finally {
- ThreadContext.exit(oldCallContext);
+ ThreadContext.exit(oldCallContext);
}
return null;
}
}
+
/**
* Removes an instance from the pool and returns it for use
* by the container in business methods.
@@ -164,7 +166,7 @@
try {
final Pool<Instance>.Entry entry = data.poolPop();
- if (entry != null){
+ if (entry != null) {
instance = entry.get();
instance.setPoolEntry(entry);
}
@@ -189,7 +191,7 @@
final InstanceContext context = beanContext.newInstance();
- if (context.getBean() instanceof SessionBean){
+ if (context.getBean() instanceof SessionBean) {
final Operation originalOperation = callContext.getCurrentOperation();
try {
@@ -236,7 +238,7 @@
Pool<Instance> pool = data.getPool();
- if (instance.getPoolEntry() != null){
+ if (instance.getPoolEntry() != null) {
pool.push(instance.getPoolEntry());
} else {
pool.push(instance);
@@ -268,7 +270,7 @@
callContext.setCurrentOperation(Operation.PRE_DESTROY);
BeanContext beanContext = callContext.getBeanContext();
- Method remove = instance.bean instanceof SessionBean? removeSessionBeanMethod : null;
+ Method remove = instance.bean instanceof SessionBean ? removeSessionBeanMethod : null;
List<InterceptorData> callbackInterceptors = beanContext.getCallbackInterceptors();
InterceptorStack interceptorStack = new InterceptorStack(instance.bean, remove, Operation.PRE_DESTROY, callbackInterceptors, instance.interceptors);
@@ -374,7 +376,7 @@
}
// Finally, fill the pool and start it
- if (!options.get("BackgroundStartup", false) && min > 0) {
+ if (!options.get("BackgroundStartup", false) && min > 0) {
ExecutorService es = Executors.newFixedThreadPool(min);
for (int i = 0; i < min; i++) {
es.submit(new InstanceCreatorRunnable(maxAge, i, min, maxAgeOffset, data, supplier));
@@ -410,7 +412,7 @@
try {
server.unregisterMBean(objectName);
} catch (Exception e) {
- logger.error("Unable to unregister MBean "+objectName);
+ logger.error("Unable to unregister MBean " + objectName);
}
}
@@ -482,7 +484,8 @@
this.supplier = supplier;
}
- @Override public void run() {
+ @Override
+ public void run() {
final Instance obj = supplier.create();
if (obj != null) {
long offset = maxAge > 0 ? (long) (maxAge / maxAgeOffset * min * iteration) % maxAge : 0l;
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java b/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
index cf3a426..8ff35fb 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
@@ -54,6 +54,7 @@
import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.util.Join;
import org.apache.openejb.util.ServiceManagerProxy;
+import org.apache.openejb.util.URLs;
import org.apache.openejb.web.LightweightWebAppBuilder;
import org.apache.webbeans.inject.AbstractInjectable;
import org.apache.webbeans.inject.OWBInjector;
@@ -61,6 +62,7 @@
import org.apache.webbeans.web.lifecycle.test.MockServletContext;
import org.apache.xbean.finder.AnnotationFinder;
import org.apache.xbean.finder.IAnnotationFinder;
+import org.apache.xbean.finder.ResourceFinder;
import org.apache.xbean.finder.archive.Archive;
import org.apache.xbean.finder.archive.ClassesArchive;
import org.junit.rules.MethodRule;
@@ -72,6 +74,8 @@
import org.junit.runners.model.TestClass;
import javax.naming.Context;
+import java.io.File;
+import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
@@ -402,12 +406,12 @@
} else if (obj instanceof Persistence) {
final Persistence persistence = (Persistence) obj;
- appModule.addPersistenceModule(new PersistenceModule("", persistence));
+ appModule.addPersistenceModule(new PersistenceModule(implicitRootUrl(), persistence));
} else if (obj instanceof PersistenceUnit) {
final PersistenceUnit unit = (PersistenceUnit) obj;
- appModule.addPersistenceModule(new PersistenceModule("", new Persistence(unit)));
+ appModule.addPersistenceModule(new PersistenceModule(implicitRootUrl(), new Persistence(unit)));
} else if (obj instanceof Beans) {
@@ -608,6 +612,28 @@
}
}
+ private static String implicitRootUrl() {
+ final ResourceFinder finder = new ResourceFinder("", Thread.currentThread().getContextClassLoader());
+ try {
+ final URL url = DeploymentLoader.altDDSources(DeploymentLoader.mapDescriptors(finder), false).get("persistence.xml");
+ if (url == null) {
+ return "";
+ }
+
+ final File file = URLs.toFile(url);
+ if (file.getName().endsWith("persistence.xml")) {
+ final String parent = file.getParentFile().getName();
+ if (parent.equalsIgnoreCase("META-INF")) {
+ return file.getParentFile().getParentFile().getAbsolutePath();
+ }
+ return file.getParentFile().getAbsolutePath();
+ }
+ return url.toExternalForm();
+ } catch (IOException e) {
+ return "";
+ }
+ }
+
private static Map<String, URL> descriptorsToMap(final Descriptors descriptors) {
if (descriptors != null) {
final Map<String, URL> dds = new HashMap<String, URL>();
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/log/SingleLineFormatter.java b/container/openejb-core/src/main/java/org/apache/openejb/log/SingleLineFormatter.java
index 3f73ab3..9be782e 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/log/SingleLineFormatter.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/log/SingleLineFormatter.java
@@ -16,14 +16,16 @@
*/
package org.apache.openejb.log;
+import org.fusesource.jansi.Ansi;
+
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
-import org.fusesource.jansi.Ansi;
public class SingleLineFormatter extends Formatter {
- @Override public synchronized String format(LogRecord record) {
+ @Override
+ public synchronized String format(LogRecord record) {
final boolean exception = record.getThrown() != null;
final Ansi sbuf = prefix(record);
sbuf.a(record.getLevel().getLocalizedName());
@@ -41,7 +43,7 @@
pw.close();
sbuf.a(sw.toString());
} catch (Exception ex) {
- // no-op
+ // no-op
} finally {
suffix(sbuf, record);
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java b/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java
index ac6005e..05e4e62 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java
@@ -55,7 +55,7 @@
}
public static void reset() {
- active = SystemInstance.get().getOptions().get(OPENEJB_JMX_ACTIVE, false);
+ active = SystemInstance.get().getOptions().get(OPENEJB_JMX_ACTIVE, true);
}
public static MBeanServer get() {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java b/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java
index b5bcd4f..733fbe3 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/rest/MultivaluedMapWithCaseInsensitiveKeySet.java
@@ -31,63 +31,78 @@
delegate = map;
}
- @Override public void add(String key, V value) {
+ @Override
+ public void add(String key, V value) {
delegate.add(key, value);
}
- @Override public V getFirst(String key) {
+ @Override
+ public V getFirst(String key) {
return delegate.getFirst(realKey(key));
}
- @Override public void putSingle(String key, V value) {
+ @Override
+ public void putSingle(String key, V value) {
delegate.putSingle(key, value);
}
- @Override public int size() {
+ @Override
+ public int size() {
return delegate.size();
}
- @Override public boolean isEmpty() {
+ @Override
+ public boolean isEmpty() {
return delegate.isEmpty();
}
- @Override public boolean containsKey(Object key) {
+ @Override
+ public boolean containsKey(Object key) {
return getInsensitiveKeySet(delegate.keySet()).contains(key.toString());
}
- @Override public boolean containsValue(Object value) {
+ @Override
+ public boolean containsValue(Object value) {
return delegate.containsValue(value);
}
- @Override public List<V> get(Object key) {
+ @Override
+ public List<V> get(Object key) {
return delegate.get(realKey(key));
}
- @Override public List<V> put(String key, List<V> value) {
+ @Override
+ public List<V> put(String key, List<V> value) {
return delegate.put(key, value);
}
- @Override public List<V> remove(Object key) {
+ @Override
+ public List<V> remove(Object key) {
return delegate.remove(realKey(key));
}
- @Override public void putAll(Map<? extends String, ? extends List<V>> m) {
+ @Override
+ public void putAll(Map<? extends String, ? extends List<V>> m) {
delegate.putAll(m);
}
- @Override public void clear() {
+ @Override
+ public void clear() {
delegate.clear();
}
- @Override public Set<String> keySet() {
+ @Override
+ public Set<String> keySet() {
return getInsensitiveKeySet(delegate.keySet());
}
- @Override public Collection<List<V>> values() {
+ @Override
+ public Collection<List<V>> values() {
return delegate.values();
}
- @Override public Set<Entry<String, List<V>>> entrySet() {
+ @Override
+ public Set<Entry<String, List<V>>> entrySet() {
return delegate.entrySet();
}
@@ -98,7 +113,7 @@
}
private static Object lowerCase(Object key) {
- if (key instanceof String ) {
+ if (key instanceof String) {
return ((String) key).toLowerCase();
}
return key;
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java b/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java
index aa34c26..41fef1f 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java
@@ -40,6 +40,7 @@
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
+import java.util.logging.*;
/**
* ClassFinder searches the classpath of the specified classloader for
@@ -78,7 +79,7 @@
* @param classLoader source of classes to scan
* @throws Exception if something goes wrong
*/
- public AnnotationFinder(ClassLoader classLoader) throws Exception {
+ public AnnotationFinder(final ClassLoader classLoader) throws Exception {
this(classLoader, true);
}
@@ -89,7 +90,7 @@
* @param excludeParent Allegedly excludes classes from parent classloader, whatever that might mean
* @throws Exception if something goes wrong.
*/
- public AnnotationFinder(ClassLoader classLoader, boolean excludeParent) throws Exception {
+ public AnnotationFinder(final ClassLoader classLoader, final boolean excludeParent) throws Exception {
this(classLoader, AnnotationFinder.getUrls(classLoader, excludeParent));
}
@@ -101,19 +102,19 @@
* @param exclude source of classes to exclude from scanning
* @throws Exception if something goes wrong
*/
- public AnnotationFinder(ClassLoader classLoader, ClassLoader exclude) throws Exception {
+ public AnnotationFinder(final ClassLoader classLoader, final ClassLoader exclude) throws Exception {
this(classLoader, AnnotationFinder.getUrls(classLoader, exclude));
}
- public AnnotationFinder(ClassLoader classLoader, URL url) {
+ public AnnotationFinder(final ClassLoader classLoader, final URL url) {
this(classLoader, Arrays.asList(url));
}
- public AnnotationFinder(ClassLoader classLoader, Collection<URL> urls) {
+ public AnnotationFinder(final ClassLoader classLoader, final Collection<URL> urls) {
this.classLoader = classLoader;
this.urls = urls;
classNames = new ArrayList<String>();
- for (URL location : urls) {
+ for (final URL location : urls) {
if (location == null) {
continue;
}
@@ -124,8 +125,8 @@
} else if (location.getProtocol().equals("file")) {
try {
// See if it's actually a jar
- URL jarUrl = new URL("jar", "", location.toExternalForm() + "!/");
- JarURLConnection juc = (JarURLConnection) jarUrl.openConnection();
+ final URL jarUrl = new URL("jar", "", location.toExternalForm() + "!/");
+ final JarURLConnection juc = (JarURLConnection) jarUrl.openConnection();
juc.getJarFile();
classNames.addAll(jar(jarUrl));
} catch (IOException e) {
@@ -154,10 +155,10 @@
return Collections.unmodifiableList(classesNotLoaded);
}
- public boolean find(Filter filter){
- Visitor annotationVisitor = new Visitor(filter);
+ public boolean find(final Filter filter){
+ final Visitor annotationVisitor = new Visitor(filter);
- for (String className : classNames) {
+ for (final String className : classNames) {
try {
readClassDef(className, annotationVisitor);
} catch (NotFoundException e) {
@@ -172,11 +173,11 @@
boolean accept(String annotationName);
}
- private static Collection<URL> getUrls(ClassLoader classLoader, boolean excludeParent) throws IOException {
+ private static Collection<URL> getUrls(final ClassLoader classLoader, final boolean excludeParent) throws IOException {
return AnnotationFinder.getUrls(classLoader, excludeParent? classLoader.getParent() : null);
}
- private static Collection<URL> getUrls(ClassLoader classLoader, ClassLoader excludeParent) throws IOException {
+ private static Collection<URL> getUrls(final ClassLoader classLoader, final ClassLoader excludeParent) throws IOException {
UrlSet urlSet = new UrlSet(classLoader);
if (excludeParent != null){
urlSet = urlSet.exclude(excludeParent);
@@ -184,9 +185,14 @@
return urlSet.getUrls();
}
- private List<String> file(URL location) {
- List<String> classNames = new ArrayList<String>();
- File dir = new File(URLDecoder.decode(location.getPath()));
+ private List<String> file(final URL location) {
+ final List<String> classNames = new ArrayList<String>();
+ File dir = null;
+ try {
+ dir = new File(URLDecoder.decode(location.getPath(),"UTF-8"));
+ } catch (Exception e) {
+ dir = new File(URLDecoder.decode(location.getPath()));
+ }
if (dir.getName().equals("META-INF")) {
dir = dir.getParentFile(); // Scrape "META-INF" off
}
@@ -196,10 +202,10 @@
return classNames;
}
- private void scanDir(File dir, List<String> classNames, String packageName) {
- File[] files = dir.listFiles();
+ private void scanDir(final File dir, final List<String> classNames, final String packageName) {
+ final File[] files = dir.listFiles();
if (files != null) {
- for (File file : files) {
+ for (final File file : files) {
if (file.isDirectory()) {
scanDir(file, classNames, packageName + file.getName() + ".");
} else if (file.getName().endsWith(".class")) {
@@ -212,20 +218,20 @@
}
}
- private List<String> jar(URL location) throws IOException {
+ private List<String> jar(final URL location) throws IOException {
String jarPath = location.getFile();
if (jarPath.indexOf("!") > -1){
jarPath = jarPath.substring(0, jarPath.indexOf("!"));
}
- URL url = new URL(jarPath);
+ final URL url = new URL(jarPath);
if ("file".equals(url.getProtocol())) { // ZipFile is faster than ZipInputStream
- JarFile jarFile = new JarFile(url.getFile().replace("%20", " "));
+ final JarFile jarFile = new JarFile(url.getFile().replace("%20", " "));
return jar(jarFile);
} else {
InputStream in = url.openStream();
in = new BufferedInputStream(in);
try {
- JarInputStream jarStream = new JarInputStream(in);
+ final JarInputStream jarStream = new JarInputStream(in);
return jar(jarStream);
} finally {
in.close();
@@ -233,20 +239,20 @@
}
}
- private List<String> jar(JarFile jarFile) {
- List<String> classNames = new ArrayList<String>();
+ private List<String> jar(final JarFile jarFile) {
+ final List<String> classNames = new ArrayList<String>();
- Enumeration<? extends JarEntry> jarEntries =jarFile.entries();
+ final Enumeration<? extends JarEntry> jarEntries =jarFile.entries();
while (jarEntries.hasMoreElements()) {
- JarEntry entry = jarEntries.nextElement();
+ final JarEntry entry = jarEntries.nextElement();
addClassName(classNames, entry);
}
return classNames;
}
- private List<String> jar(JarInputStream jarStream) throws IOException {
- List<String> classNames = new ArrayList<String>();
+ private List<String> jar(final JarInputStream jarStream) throws IOException {
+ final List<String> classNames = new ArrayList<String>();
JarEntry entry;
while ((entry = jarStream.getNextJarEntry()) != null) {
@@ -256,7 +262,7 @@
return classNames;
}
- private void addClassName(List<String> classNames, JarEntry entry) {
+ private void addClassName(final List<String> classNames, final JarEntry entry) {
if (entry.isDirectory() || !entry.getName().endsWith(".class")) {
return;
}
@@ -269,18 +275,18 @@
classNames.add(className);
}
- private void readClassDef(String className, ClassVisitor visitor) {
+ private void readClassDef(String className, final ClassVisitor visitor) {
classes++;
if (!className.endsWith(".class")) {
className = className.replace('.', '/') + ".class";
}
try {
- URL resource = classLoader.getResource(className);
+ final URL resource = classLoader.getResource(className);
if (resource != null) {
InputStream in = resource.openStream();
in = new BufferedInputStream(in);
try {
- ClassReader classReader = new ClassReader(in);
+ final ClassReader classReader = new ClassReader(in);
classReader.accept(visitor, ASM_FLAGS);
} finally {
in.close();
@@ -308,7 +314,7 @@
private FoundException foundException;
private final Filter filter;
- public Visitor(Filter filter) {
+ public Visitor(final Filter filter) {
this.filter = filter;
try {
@@ -324,11 +330,12 @@
}
}
- public AnnotationVisitor visitAnnotation(String name, boolean visible) {
+ @Override
+ public AnnotationVisitor visitAnnotation(String name, final boolean visible) {
// annotation names show up as
// Ljavax.ejb.Stateless;
// so we hack of the first and last chars and replace the slashes
- StringBuilder sb = new StringBuilder(name);
+ final StringBuilder sb = new StringBuilder(name);
sb.deleteCharAt(0);
sb.deleteCharAt(sb.length()-1);
for (int i = 0; i < sb.length(); i++) {
@@ -346,31 +353,39 @@
}
- public void visit(int i, int i1, String string, String string1, String string2, String[] strings) {
+ @Override
+ public void visit(final int i, final int i1, final String string, final String string1, final String string2, final String[] strings) {
}
- public void visitSource(String string, String string1) {
+ @Override
+ public void visitSource(final String string, final String string1) {
}
- public void visitOuterClass(String string, String string1, String string2) {
+ @Override
+ public void visitOuterClass(final String string, final String string1, final String string2) {
}
- public void visitAttribute(Attribute attribute) {
+ @Override
+ public void visitAttribute(final Attribute attribute) {
throw notFoundException;
}
- public void visitInnerClass(String string, String string1, String string2, int i) {
+ @Override
+ public void visitInnerClass(final String string, final String string1, final String string2, final int i) {
throw notFoundException;
}
- public FieldVisitor visitField(int i, String string, String string1, String string2, Object object) {
+ @Override
+ public FieldVisitor visitField(final int i, final String string, final String string1, final String string2, final Object object) {
throw notFoundException;
}
- public MethodVisitor visitMethod(int i, String string, String string1, String string2, String[] strings) {
+ @Override
+ public MethodVisitor visitMethod(final int i, final String string, final String string1, final String string2, final String[] strings) {
throw notFoundException;
}
+ @Override
public void visitEnd() {
throw notFoundException;
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/DirectoryMonitor.java b/container/openejb-core/src/main/java/org/apache/openejb/util/DirectoryMonitor.java
index 627c496..d3d0642 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/DirectoryMonitor.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/DirectoryMonitor.java
@@ -31,17 +31,17 @@
public static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_DEPLOY, DirectoryMonitor.class.getPackage().getName());
- private final int pollIntervalMillis;
+ private final long pollIntervalMillis;
private final File target;
private final Listener listener;
- private final Map files = new HashMap();
+ private final Map<String, FileInfo> files = new HashMap<String, FileInfo>();
private final Timer timer;
- public DirectoryMonitor(final File target, final Listener listener, final int pollIntervalMillis) {
+ public DirectoryMonitor(final File target, final Listener listener, final long pollIntervalMillis) {
assert listener == null : "No listener specified";
assert target.isDirectory() : "File specified is not a directory. " + target.getAbsolutePath();
assert target.canRead() : "Directory specified cannot be read. " + target.getAbsolutePath();
@@ -59,7 +59,7 @@
return logger;
}
- public int getPollIntervalMillis() {
+ public long getPollIntervalMillis() {
return pollIntervalMillis;
}
@@ -80,12 +80,12 @@
getLogger().debug("Scanner running. Polling every " + pollIntervalMillis + " milliseconds.");
- timer.scheduleAtFixedRate(new TimerTask(){
+ timer.scheduleAtFixedRate(new TimerTask() {
+ @Override
public void run() {
try {
scan();
- }
- catch (Exception e) {
+ } catch (Exception e) {
getLogger().error("Scan failed.", e);
}
}
@@ -96,7 +96,7 @@
private void initialize() {
getLogger().debug("Doing initial scan of " + target.getAbsolutePath());
- final File[] files = (target.isDirectory()) ? target.listFiles(): new File[]{target};
+ final File[] files = (target.isDirectory()) ? target.listFiles() : new File[]{target};
if (files != null) {
for (final File file : files) {
@@ -111,6 +111,17 @@
}
}
+ public void addFile(final File file) {
+ newInfo(file);
+ }
+
+ public void removeFile(final File file) {
+ final FileInfo fileInfo = oldInfo(file);
+ if (fileInfo != null) {
+ files.remove(fileInfo.getPath());
+ }
+ }
+
private FileInfo newInfo(final File child) {
final FileInfo fileInfo = child.isDirectory() ? new DirectoryInfo(child) : new FileInfo(child);
files.put(fileInfo.getPath(), fileInfo);
@@ -122,7 +133,7 @@
*/
public void scan() {
- final File[] files = (target.isDirectory()) ? target.listFiles(): new File[]{target};
+ final File[] files = (target.isDirectory()) ? target.listFiles() : new File[]{target};
final HashSet<String> missingFilesList = new HashSet<String>(this.files.keySet());
@@ -174,7 +185,7 @@
}
private FileInfo oldInfo(final File file) {
- return (FileInfo) files.get(file.getAbsolutePath());
+ return files.get(file.getAbsolutePath());
}
/**
@@ -234,7 +245,7 @@
* Provides details about a file.
*/
private static class FileInfo implements Serializable {
- private String path;
+ private final String path;
private long size;
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java b/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java
index 4a387f9..2969b6c 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/JarCreator.java
@@ -41,8 +41,8 @@
prefix += File.separator;
}
- for (String entry : entries) {
- File f = new File(dir, entry);
+ for (final String entry : entries) {
+ final File f = new File(dir, entry);
jarFile(out, f, prefix);
}
IO.close(out);
@@ -50,7 +50,8 @@
private static void jarFile(final JarOutputStream out, final File f, final String prefix) throws IOException {
if (f.isDirectory()) {
- for (File child : f.listFiles()) {
+ final File[] files = f.listFiles();
+ if (null != files) for (final File child : files) {
jarFile(out, child, prefix);
}
} else {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/JarExtractor.java b/container/openejb-core/src/main/java/org/apache/openejb/util/JarExtractor.java
index f151a7f..ddcc23d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/JarExtractor.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/JarExtractor.java
@@ -16,8 +16,10 @@
*/
package org.apache.openejb.util;
+import org.apache.openejb.loader.FileUtils;
import org.apache.openejb.loader.Files;
import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.loader.Zips;
import java.io.BufferedOutputStream;
@@ -27,6 +29,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.FileChannel;
+import java.util.Properties;
/**
* @version $Rev$ $Date$
@@ -38,14 +41,26 @@
* Extract the Jar file into an unpacked directory structure, and
* return the absolute pathname to the extracted directory.
*
- * @param file Jar file to unpack
+ * @param file Jar file to unpack
* @param pathname Context path name for web application
* @throws IllegalArgumentException if this is not a "jar:" URL
- * @throws java.io.IOException if an input/output error was encountered
+ * @throws java.io.IOException if an input/output error was encountered
* during expansion
*/
- public static File extract(File file, String pathname) throws IOException {
- File docBase = new File(file.getParentFile(), pathname);
+ public static File extract(final File file, final String pathname) throws IOException {
+
+ final Properties properties = SystemInstance.get().getProperties();
+ final String key = "tomee.unpack.dir";
+
+ File unpackDir = file.getParentFile();
+
+ if (properties.containsKey(key)) {
+ final FileUtils base = SystemInstance.get().getBase();
+ unpackDir = base.getDirectory(properties.getProperty(key), true);
+ }
+
+ final File docBase = new File(unpackDir, pathname);
+
extract(file, docBase);
return docBase;
}
@@ -54,11 +69,11 @@
* Extract the jar file into the specifiec destination directory. If the destination directory
* already exists, the jar will not be unpacked.
*
- * @param file jar file to unpack
+ * @param file jar file to unpack
* @param destinationDir the directory in which the jar will be unpacked; must not exist
* @throws java.io.IOException if an input/output error was encountered during expansion
*/
- public static void extract(File file, File destinationDir) throws IOException {
+ public static void extract(final File file, final File destinationDir) throws IOException {
if (destinationDir.exists()) {
if (destinationDir.lastModified() > file.lastModified()) {
@@ -94,7 +109,7 @@
* @param src File object representing the source
* @param dest File object representing the destination
*/
- public static boolean copyRecursively(File src, File dest) {
+ public static boolean copyRecursively(final File src, final File dest) {
boolean result = true;
@@ -147,14 +162,8 @@
*
* @param dir File object representing the directory to be deleted
*/
- public static boolean delete(File dir) {
- if (dir == null) return true;
-
- if (dir.isDirectory()) {
- return deleteDir(dir);
- } else {
- return dir.delete();
- }
+ public static boolean delete(final File dir) {
+ return deleteDir(dir);
}
@@ -164,23 +173,19 @@
*
* @param dir File object representing the directory to be deleted
*/
- public static boolean deleteDir(File dir) {
+ public static boolean deleteDir(final File dir) {
if (dir == null) return true;
- String fileNames[] = dir.list();
- if (fileNames == null) {
- fileNames = new String[0];
- }
- for (String fileName : fileNames) {
- File file = new File(dir, fileName);
- if (file.isDirectory()) {
- deleteDir(file);
- } else {
- file.delete();
+ if (dir.isDirectory()) {
+ final File[] files = dir.listFiles();
+ if (files != null) {
+ for (final File file : files) {
+ deleteDir(file);
+ }
}
}
- return dir.delete();
+ return dir.delete();
}
@@ -194,17 +199,17 @@
* @return A handle to the extracted File
* @throws java.io.IOException if an input/output error occurs
*/
- protected static File extract(InputStream input, File docBase, String name)
+ protected static File extract(final InputStream input, final File docBase, final String name)
throws IOException {
- File file = new File(docBase, name);
+ final File file = new File(docBase, name);
BufferedOutputStream output = null;
try {
output =
new BufferedOutputStream(new FileOutputStream(file));
- byte buffer[] = new byte[2048];
+ final byte[] buffer = new byte[2048];
while (true) {
- int n = input.read(buffer);
+ final int n = input.read(buffer);
if (n <= 0)
break;
output.write(buffer, 0, n);
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/URLs.java b/container/openejb-core/src/main/java/org/apache/openejb/util/URLs.java
index baf1ef6..7b7a024 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/URLs.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/URLs.java
@@ -55,6 +55,28 @@
}
}
+ public static URL toFileUrl(final URL url) {
+ if ("jar".equals(url.getProtocol())) {
+ try {
+ final String spec = url.getFile();
+
+ int separator = spec.indexOf('!');
+ /*
+ * REMIND: we don't handle nested JAR URLs
+ */
+ if (separator == -1) throw new MalformedURLException("no ! found in jar url spec:" + spec);
+
+ return new URL(spec.substring(0, separator++));
+ } catch (MalformedURLException e) {
+ throw new IllegalStateException(e);
+ }
+ } else if ("file".equals(url.getProtocol())) {
+ return url;
+ } else {
+ throw new IllegalArgumentException("Unsupported URL scheme: " + url.toExternalForm());
+ }
+ }
+
public static String toFilePath(final URL url) {
return toFile(url).getAbsolutePath();
}
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java b/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java
index cc4ccdf..d995ed0 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java
@@ -30,7 +30,8 @@
this.second = second;
}
- @Override public Class<?> loadClass(String name) throws ClassNotFoundException {
+ @Override
+ public Class<?> loadClass(String name) throws ClassNotFoundException {
try {
return super.loadClass(name);
} catch (ClassNotFoundException cnfe) {
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java b/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
index 4da2407..4507ad0 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
@@ -166,18 +166,14 @@
// making all these call inline if far more costly than factorizing packages
public static boolean shouldSkip(final String name) {
- if (FORCED_SKIP != null) {
- for (String prefix : FORCED_SKIP) {
- if (name.startsWith(prefix)) {
- return true;
- }
+ for (String prefix : FORCED_SKIP) {
+ if (name.startsWith(prefix)) {
+ return true;
}
}
- if (FORCED_LOAD != null) {
- for (String prefix : FORCED_LOAD) {
- if (name.startsWith(prefix)) {
- return false;
- }
+ for (String prefix : FORCED_LOAD) {
+ if (name.startsWith(prefix)) {
+ return false;
}
}
@@ -321,7 +317,8 @@
// in org.apache.openejb.
private static boolean isWebAppEnrichment(final String openejb) {
return openejb.startsWith("hibernate.") || openejb.startsWith("jpa.integration.")
- || openejb.startsWith("toplink.") || openejb.startsWith("eclipselink.");
+ || openejb.startsWith("toplink.") || openejb.startsWith("eclipselink.")
+ || openejb.startsWith("arquillian.");
}
@Override
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/helper/CommandHelper.java b/container/openejb-core/src/main/java/org/apache/openejb/util/helper/CommandHelper.java
index 3d88f26..947ab49 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/helper/CommandHelper.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/helper/CommandHelper.java
@@ -39,7 +39,7 @@
Lines lines = new Lines(cr);
lines.add(new Line("Name", "Class", "Interface Type", "Bean Type"));
for (BeanContext bc : cs.deployments()) {
- if (BeanContext.Comp.class.equals(bc.getBeanClass())) {
+ if (bc.isHidden()) {
continue;
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/DependenceValidationTest.java b/container/openejb-core/src/test/java/org/apache/openejb/DependenceValidationTest.java
index cb276fc..5814ec3 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/DependenceValidationTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/DependenceValidationTest.java
@@ -16,6 +16,13 @@
*/
package org.apache.openejb;
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+import junit.framework.TestResult;
+import org.apache.openejb.loader.IO;
+import org.apache.xbean.asm.ClassReader;
+import org.apache.xbean.asm.ClassWriter;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -24,12 +31,6 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-import junit.framework.TestResult;
-import org.apache.openejb.loader.IO;
-import org.apache.xbean.asm.ClassReader;
-import org.apache.xbean.asm.ClassWriter;
import static org.apache.openejb.util.URLs.toFile;
@@ -39,22 +40,23 @@
private TestResult results;
- public void run(TestResult testResult) {
+ @Override
+ public void run(final TestResult testResult) {
results = testResult;
super.run(testResult);
}
public void testAssembler() throws Exception {
- DependencyVisitor dependencyVisitor = new DependencyVisitor();
+ final DependencyVisitor dependencyVisitor = new DependencyVisitor();
- URL resource = DependenceValidationTest.class.getResource("/org/apache/openejb/OpenEJB.class");
- File file = toFile(resource);
+ final URL resource = DependenceValidationTest.class.getResource("/org/apache/openejb/OpenEJB.class");
+ final File file = toFile(resource);
dir(file.getParentFile(), dependencyVisitor);
depsOfPackages = dependencyVisitor.groups;
// Nothing may depend on the Assembler except the config code and events
- String dynamicAssembler = "org.apache.openejb.assembler.dynamic";
+ final String dynamicAssembler = "org.apache.openejb.assembler.dynamic";
assertNotDependentOn("org.apache.openejb", "org.apache.openejb.assembler.classic", "org.apache.openejb.config.typed.util", "org.apache.openejb.assembler", "org.apache.openejb.assembler.classic.util", "org.apache.openejb.config", "org.apache.openejb.assembler.dynamic", "org.apache.openejb.assembler.classic.cmd", "org.apache.openejb.assembler.monitoring", "org.apache.openejb.cdi", "org.apache.openejb.junit", "org.apache.openejb.assembler.classic.event", "org.apache.openejb.web");
// Nothing may depend on the Dynamic Assembler
@@ -77,18 +79,18 @@
// assertNotDependentOn("org.apache.openejb", "org.apache.openejb.core.entity", dynamicAssembler);
}
- private void assertNotDependentOn(String referringPacakge, String referredPackage, String... exemptionsArray) {
+ private void assertNotDependentOn(final String referringPacakge, final String referredPackage, final String... exemptionsArray) {
if (referringPacakge.equals(referredPackage)) return;
- List<String> exemptions = new ArrayList<String>(Arrays.asList(exemptionsArray));
+ final List<String> exemptions = new ArrayList<String>(Arrays.asList(exemptionsArray));
exemptions.add(referredPackage);
- for (Map.Entry<String, Map<String, Integer>> entry : depsOfPackages.entrySet()) {
- String packageName = entry.getKey();
+ for (final Map.Entry<String, Map<String, Integer>> entry : depsOfPackages.entrySet()) {
+ final String packageName = entry.getKey();
if (packageName.startsWith(referringPacakge) && !exemptions.contains(packageName)) {
try {
- Map<String, Integer> deps = entry.getValue();
+ final Map<String, Integer> deps = entry.getValue();
if (deps.containsKey(referredPackage)) {
- int references = deps.get(referredPackage);
+ final int references = deps.get(referredPackage);
assertEquals(packageName + " should have no dependencies on " + referredPackage, 0, references);
}
} catch (AssertionFailedError e) {
@@ -98,10 +100,10 @@
}
}
- private static void dir(File dir, DependencyVisitor dependencyVisitor) {
+ private static void dir(final File dir, final DependencyVisitor dependencyVisitor) {
final File[] files = dir.listFiles();
if (files != null) {
- for (File file : files) {
+ for (final File file : files) {
if (file.isDirectory()) {
dir(file, dependencyVisitor);
} else if (file.getName().endsWith(".class")) {
@@ -111,11 +113,11 @@
}
}
- private static void file(File file, DependencyVisitor dependencyVisitor) {
+ private static void file(final File file, final DependencyVisitor dependencyVisitor) {
try {
final InputStream in = IO.read(file);
try {
- ClassReader classReader = new ClassReader(in);
+ final ClassReader classReader = new ClassReader(in);
classReader.accept(dependencyVisitor, ClassWriter.COMPUTE_MAXS);
} finally {
IO.close(in);
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
index 808b081..acde2be 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
@@ -28,7 +28,6 @@
import javax.ejb.Singleton;
import javax.ejb.Stateless;
import javax.sql.DataSource;
-import javax.transaction.UserTransaction;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -48,23 +47,27 @@
@RunWith(ApplicationComposer.class)
public class DataSourceDefinitionTest {
- @EJB private DatasourceDefinitionBean uniqueDataSource;
- @EJB private DatasourceDefinitionsBean multipleDatasources;
+ @EJB
+ private DatasourceDefinitionBean uniqueDataSource;
+ @EJB
+ private DatasourceDefinitionsBean multipleDatasources;
- @Module public Class<?>[] app() throws Exception {
- return new Class<?>[]{ DatasourceDefinitionBean.class, DatasourceDefinitionsBean.class };
+ @Module
+ public Class<?>[] app() throws Exception {
+ return new Class<?>[]{DatasourceDefinitionBean.class, DatasourceDefinitionsBean.class};
}
@DataSourceDefinition(
- name = "java:comp/env/superDS",
- className = "org.hsqldb.jdbc.JDBCDataSource",
- user = "sa",
- password = "",
- url = "jdbc:hsqldb:mem:superDS"
+ name = "java:comp/env/superDS",
+ className = "org.hsqldb.jdbc.JDBCDataSource",
+ user = "sa",
+ password = "",
+ url = "jdbc:hsqldb:mem:superDS"
)
@Singleton
public static class DatasourceDefinitionBean {
- @Resource(name = "java:comp/env/superDS") private DataSource ds;
+ @Resource(name = "java:comp/env/superDS")
+ private DataSource ds;
public DataSource getDs() {
return ds;
@@ -72,25 +75,27 @@
}
@DataSourceDefinitions({
- @DataSourceDefinition(
- name = "java:comp/env/superMegaDS",
- className = "org.hsqldb.jdbc.JDBCDataSource",
- user = "sa",
- password = "",
- url = "jdbc:hsqldb:mem:superDS"
- ),
- @DataSourceDefinition(
- name = "java:comp/env/superGigaDS",
- className = "org.hsqldb.jdbc.JDBCDataSource",
- user = "sa",
- password = "",
- url = "jdbc:hsqldb:mem:superDS"
- )
+ @DataSourceDefinition(
+ name = "java:comp/env/superMegaDS",
+ className = "org.hsqldb.jdbc.JDBCDataSource",
+ user = "sa",
+ password = "",
+ url = "jdbc:hsqldb:mem:superDS"
+ ),
+ @DataSourceDefinition(
+ name = "java:comp/env/superGigaDS",
+ className = "org.hsqldb.jdbc.JDBCDataSource",
+ user = "sa",
+ password = "",
+ url = "jdbc:hsqldb:mem:superDS"
+ )
})
@Stateless
public static class DatasourceDefinitionsBean {
- @Resource(name = "java:comp/env/superMegaDS") private DataSource mega;
- @Resource(name = "java:comp/env/superGigaDS") private DataSource giga;
+ @Resource(name = "java:comp/env/superMegaDS")
+ private DataSource mega;
+ @Resource(name = "java:comp/env/superGigaDS")
+ private DataSource giga;
public DataSource getMega() {
return mega;
@@ -101,11 +106,13 @@
}
}
- @Test public void assertDataSourceDefinition() throws Exception {
+ @Test
+ public void assertDataSourceDefinition() throws Exception {
assertDataSourceDefinitionValues(uniqueDataSource.getDs(), "org.hsqldb.jdbc.JDBCDataSource", "sa", "");
}
- @Test public void assertDatasourceDefinitions() throws Exception {
+ @Test
+ public void assertDatasourceDefinitions() throws Exception {
assertDataSourceDefinitionValues(multipleDatasources.getMega(), "org.hsqldb.jdbc.JDBCDataSource", "foo1", "bar1");
assertDataSourceDefinitionValues(multipleDatasources.getGiga(), "org.hsqldb.jdbc.JDBCDataSource", "foo2", "bar2");
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/EjbRefTest.java b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/EjbRefTest.java
index 680c4ec..eb2c75f 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/EjbRefTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/EjbRefTest.java
@@ -18,14 +18,14 @@
import junit.framework.TestCase;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.config.AppModule;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.core.ivm.naming.InitContextFactory;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
import javax.ejb.EJB;
import javax.naming.InitialContext;
@@ -320,13 +320,13 @@
}
- public void ear(Class ... beans) throws Exception {
+ public void ear(Class... beans) throws Exception {
EjbJar ejbJar = ejbjar(beans);
ear(ejbJar);
}
private void ear(EjbJar... ejbJars) throws OpenEJBException, NamingException, IOException {
- AppModule app = new AppModule(this.getClass().getClassLoader(), "classpath-"+ejbJars.hashCode());
+ AppModule app = new AppModule(this.getClass().getClassLoader(), "classpath-" + ejbJars.hashCode());
for (EjbJar ejbJar : ejbJars) {
app.getEjbModules().add(new EjbModule(ejbJar));
}
@@ -466,8 +466,10 @@
}
public static class YellowGreenBean implements YellowGreen {
- @EJB Color yellow;
- @EJB Color green;
+ @EJB
+ Color yellow;
+ @EJB
+ Color green;
public String getGreen() {
return green.getColor();
@@ -480,6 +482,7 @@
public static interface YellowGreen {
String getYellow();
+
String getGreen();
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ImportSqlScriptTest.java b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ImportSqlScriptTest.java
index 07b49cf..4975a99 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ImportSqlScriptTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ImportSqlScriptTest.java
@@ -59,7 +59,8 @@
return bean;
}
- @Module public Persistence persistence() {
+ @Module
+ public Persistence persistence() {
final PersistenceUnit unit = new PersistenceUnit("ImportSqlScriptTest");
unit.addClass(Something.class);
unit.setProperty("openjpa.RuntimeUnenhancedClasses", "supported");
@@ -90,7 +91,7 @@
}
@Test
- public void checkImportData() {
+ public void checkImportData() {
assertEquals(3, persister.count());
}
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEJBXmlByModuleTest.java b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEJBXmlByModuleTest.java
index ec07535..4eb3ad6 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEJBXmlByModuleTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEJBXmlByModuleTest.java
@@ -16,13 +16,6 @@
*/
package org.apache.openejb.assembler.classic;
-import java.io.IOException;
-import java.util.Properties;
-import javax.annotation.Resource;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.openejb.OpenEJB;
import org.apache.openejb.OpenEJBException;
@@ -36,6 +29,14 @@
import org.junit.Before;
import org.junit.Test;
+import javax.annotation.Resource;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.util.Properties;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
@@ -45,7 +46,8 @@
private UselessBean bean;
- @Before public void setUp() throws OpenEJBException, NamingException, IOException {
+ @Before
+ public void setUp() throws OpenEJBException, NamingException, IOException {
ConfigurationFactory config = new ConfigurationFactory();
Assembler assembler = new Assembler();
@@ -71,14 +73,16 @@
bean = (UselessBean) context.lookup("UselessBeanLocalBean");
}
- @After public void close() throws NamingException {
+ @After
+ public void close() throws NamingException {
if (context != null) {
context.close();
OpenEJB.destroy(); // has to be called manually since we start openejb in a custom way
}
}
- @Test public void test() throws Exception {
+ @Test
+ public void test() throws Exception {
assertNotNull(bean.datasource());
assertTrue(bean.datasource() instanceof BasicDataSource);
BasicDataSource ds = (BasicDataSource) bean.datasource();
@@ -96,10 +100,17 @@
}
public static class UselessBean {
- @Resource(name = "DS") private DataSource ds;
- @Resource(name = "My Resource", type = MyResource.class) private MyResource rs;
+ @Resource(name = "DS")
+ private DataSource ds;
+ @Resource(name = "My Resource", type = MyResource.class)
+ private MyResource rs;
- public DataSource datasource() { return ds; }
- public MyResource resource() { return rs; }
+ public DataSource datasource() {
+ return ds;
+ }
+
+ public MyResource resource() {
+ return rs;
+ }
}
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationAppendixInterceptorTest.java b/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationAppendixInterceptorTest.java
index 73608a5..34343cb 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationAppendixInterceptorTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationAppendixInterceptorTest.java
@@ -16,16 +16,6 @@
*/
package org.apache.openejb.bval;
-import java.io.Serializable;
-import java.util.Properties;
-import javax.ejb.EJB;
-import javax.ejb.Local;
-import javax.ejb.LocalBean;
-import javax.ejb.Remote;
-import javax.ejb.Stateless;
-import javax.validation.ConstraintViolationException;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
import org.apache.openejb.BeanContext;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.Empty;
@@ -36,19 +26,34 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import javax.ejb.EJB;
+import javax.ejb.Local;
+import javax.ejb.LocalBean;
+import javax.ejb.Remote;
+import javax.ejb.Stateless;
+import javax.validation.ConstraintViolationException;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Properties;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@RunWith(ApplicationComposer.class)
public class BeanValidationAppendixInterceptorTest {
- @Local public static interface Manager {
+ @Local
+ public static interface Manager {
String drive(Person person, @Min(18) int age);
+
Person create(@NotNull String name);
}
- @Remote public static interface ManagerRemote {
+ @Remote
+ public static interface ManagerRemote {
String drive(Person person, @Min(16) int age);
+
Person create(String name);
}
@@ -64,7 +69,8 @@
}
}
- @Stateless public static class ManagerBean implements Manager {
+ @Stateless
+ public static class ManagerBean implements Manager {
public String drive(Person person, int age) {
return "vroom";
}
@@ -76,7 +82,8 @@
}
}
- @Stateless public static class ManagerBean2 implements Manager, ManagerRemote {
+ @Stateless
+ public static class ManagerBean2 implements Manager, ManagerRemote {
public String drive(Person person, int age) {
return "vroom";
}
@@ -88,18 +95,22 @@
}
}
- @Stateless @LocalBean public static class ManagerLocalBean {
+ @Stateless
+ @LocalBean
+ public static class ManagerLocalBean {
public void foo(@NotNull String bar) {
// no-op
}
}
- @Test public void valid() {
+ @Test
+ public void valid() {
Person p = mgr.create("foo");
mgr.drive(p, 18);
}
- @Test public void notValid() {
+ @Test
+ public void notValid() {
Person p = null;
try {
p = mgr.create(null);
@@ -119,13 +130,15 @@
}
}
- @Test public void validRemote() {
+ @Test
+ public void validRemote() {
Person p = mgrRemote.create(null);
mgrRemote.drive(p, 26);
mgrRemote.drive(p, 17);
}
- @Test public void notValidRemote() {
+ @Test
+ public void notValidRemote() {
Person p = mgrRemote.create("bar");
try {
mgrRemote.drive(p, 15);
@@ -137,7 +150,8 @@
}
}
- @Test public void localBean() {
+ @Test
+ public void localBean() {
mgrLB.foo("ok");
try {
mgrLB.foo(null);
@@ -149,17 +163,22 @@
}
}
- @EJB private Manager mgr;
- @EJB private ManagerRemote mgrRemote;
- @EJB private ManagerLocalBean mgrLB;
+ @EJB
+ private Manager mgr;
+ @EJB
+ private ManagerRemote mgrRemote;
+ @EJB
+ private ManagerLocalBean mgrLB;
- @Configuration public Properties config() {
+ @Configuration
+ public Properties config() {
final Properties p = new Properties();
p.put(BeanContext.USER_INTERCEPTOR_KEY, BeanValidationAppendixInterceptor.class.getName());
return p;
}
- @Module public EjbJar app() throws Exception {
+ @Module
+ public EjbJar app() throws Exception {
EjbJar ejbJar = new EjbJar("bval-interceptor");
final StatelessBean bean1 = new StatelessBean(ManagerBean.class);
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java b/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java
index 6323348..becea7e 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/bval/BeanValidationTest.java
@@ -53,11 +53,15 @@
@RunWith(ApplicationComposer.class)
public class BeanValidationTest {
- @EJB private PersistManager persistManager;
- @Resource private Validator validator;
- @Resource private ValidatorFactory validatorFactory;
+ @EJB
+ private PersistManager persistManager;
+ @Resource
+ private Validator validator;
+ @Resource
+ private ValidatorFactory validatorFactory;
- @Configuration public Properties config() {
+ @Configuration
+ public Properties config() {
final Properties p = new Properties();
p.put("bvalDatabase", "new://Resource?type=DataSource");
p.put("bvalDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
@@ -65,13 +69,15 @@
return p;
}
- @Module public StatelessBean app() throws Exception {
+ @Module
+ public StatelessBean app() throws Exception {
final StatelessBean bean = new StatelessBean(PersistManager.class);
bean.setLocalBean(new Empty());
return bean;
}
- @Module public Persistence persistence() {
+ @Module
+ public Persistence persistence() {
PersistenceUnit unit = new PersistenceUnit("foo-unit");
unit.addClass(EntityToValidate.class);
unit.setProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
@@ -86,10 +92,13 @@
@LocalBean
@Stateless
public static class PersistManager {
- @PersistenceContext private EntityManager em;
+ @PersistenceContext
+ private EntityManager em;
- @Resource private Validator validator;
- @Resource private ValidatorFactory validatorFactory;
+ @Resource
+ private Validator validator;
+ @Resource
+ private ValidatorFactory validatorFactory;
public void persistValid() {
EntityToValidate entity = new EntityToValidate();
@@ -101,19 +110,25 @@
em.persist(new EntityToValidate());
}
- @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public Validator getValidator() {
+ @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
+ public Validator getValidator() {
return validator;
}
- @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public ValidatorFactory getValidatorFactory() {
+ @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
+ public ValidatorFactory getValidatorFactory() {
return validatorFactory;
}
}
@Entity
public static class EntityToValidate {
- @Id @GeneratedValue private long id;
- @NotNull @Size(min = 1, max = 5) private String name;
+ @Id
+ @GeneratedValue
+ private long id;
+ @NotNull
+ @Size(min = 1, max = 5)
+ private String name;
public long getId() {
return id;
@@ -132,11 +147,13 @@
}
}
- @Test public void valid() {
+ @Test
+ public void valid() {
persistManager.persistValid();
}
- @Test public void notValid() {
+ @Test
+ public void notValid() {
try {
persistManager.persistNotValid();
fail();
@@ -147,31 +164,37 @@
}
}
- @Test public void lookupValidatorFactory() throws Exception {
+ @Test
+ public void lookupValidatorFactory() throws Exception {
ValidatorFactory validatorFactory = (ValidatorFactory) new InitialContext().lookup("java:comp/ValidatorFactory");
assertNotNull(validatorFactory);
}
- @Test public void lookupValidator() throws Exception {
- Validator validator = (Validator) new InitialContext().lookup("java:comp/Validator");
+ @Test
+ public void lookupValidator() throws Exception {
+ Validator validator = (Validator) new InitialContext().lookup("java:comp/Validator");
assertNotNull(validator);
}
- @Test public void injectionValidatorFactory() {
+ @Test
+ public void injectionValidatorFactory() {
ValidatorFactory validatorFactory = persistManager.getValidatorFactory();
assertNotNull(validatorFactory);
}
- @Test public void injectionValidator() {
+ @Test
+ public void injectionValidator() {
Validator validator = persistManager.getValidator();
assertNotNull(validator);
}
- @Test public void injection2ValidatorFactory() {
+ @Test
+ public void injection2ValidatorFactory() {
assertNotNull(validatorFactory);
}
- @Test public void injection2Validator() {
+ @Test
+ public void injection2Validator() {
assertNotNull(validator);
}
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractCDIInjectionTest.java b/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractCDIInjectionTest.java
index 655f26c..56ff116 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractCDIInjectionTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractCDIInjectionTest.java
@@ -16,8 +16,6 @@
*/
package org.apache.openejb.cdi;
-import javax.ejb.Stateless;
-import javax.inject.Inject;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.jee.Beans;
import org.apache.openejb.jee.EjbJar;
@@ -28,14 +26,19 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
import static junit.framework.Assert.assertTrue;
@RunWith(ApplicationComposer.class)
public class AbstractCDIInjectionTest {
- @Inject private AppCDI cdi;
+ @Inject
+ private AppCDI cdi;
- @Module public EjbModule app() throws Exception {
+ @Module
+ public EjbModule app() throws Exception {
final StatelessBean bean = new StatelessBean(AppJpaDAO.class);
bean.setLocalBean(new Empty());
@@ -56,12 +59,15 @@
return jar;
}
- public static abstract class PlcBaseDAO {}
+ public static abstract class PlcBaseDAO {
+ }
- public static abstract class PlcBaseJpaDAO extends PlcBaseDAO {}
+ public static abstract class PlcBaseJpaDAO extends PlcBaseDAO {
+ }
@Stateless
- public static class AppJpaDAO extends PlcBaseJpaDAO {}
+ public static class AppJpaDAO extends PlcBaseJpaDAO {
+ }
public static class AppCDI {
@Inject
@@ -72,7 +78,8 @@
}
}
- @Test public void valid() {
+ @Test
+ public void valid() {
assertTrue(cdi.ok());
}
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java b/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java
index 2372e97..b4c38e7 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java
@@ -16,8 +16,6 @@
*/
package org.apache.openejb.cdi;
-import javax.ejb.EJB;
-import javax.ejb.Stateless;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.jee.Beans;
import org.apache.openejb.jee.EjbJar;
@@ -28,14 +26,19 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+
import static junit.framework.Assert.assertTrue;
@RunWith(ApplicationComposer.class)
public class AbstractInjectionTest {
- @EJB private AppCDI cdi;
+ @EJB
+ private AppCDI cdi;
- @Module public EjbModule app() throws Exception {
+ @Module
+ public EjbModule app() throws Exception {
final StatelessBean bean = new StatelessBean(AppJpaDAO.class);
bean.setLocalBean(new Empty());
@@ -56,12 +59,15 @@
return jar;
}
- public static abstract class PlcBaseDAO {}
+ public static abstract class PlcBaseDAO {
+ }
- public static abstract class PlcBaseJpaDAO extends PlcBaseDAO {}
+ public static abstract class PlcBaseJpaDAO extends PlcBaseDAO {
+ }
@Stateless
- public static class AppJpaDAO extends PlcBaseJpaDAO {}
+ public static class AppJpaDAO extends PlcBaseJpaDAO {
+ }
public static class AppCDI {
@EJB
@@ -72,7 +78,8 @@
}
}
- @Test public void valid() {
+ @Test
+ public void valid() {
assertTrue(cdi.ok());
}
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigPersistenceUnitsTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigPersistenceUnitsTest.java
index b5eb519..3900d91 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigPersistenceUnitsTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigPersistenceUnitsTest.java
@@ -70,7 +70,8 @@
resources = configuration.facilities.resources;
}
- @Override public void tearDown() {
+ @Override
+ public void tearDown() {
System.getProperties().remove(LocalMBeanServer.OPENEJB_JMX_ACTIVE);
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigResourceRefsTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigResourceRefsTest.java
index 6b59fb9..4295db6b 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigResourceRefsTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/AutoConfigResourceRefsTest.java
@@ -128,12 +128,18 @@
public static class WidgetBean implements Widget {
- @Resource javax.jms.Queue redQueue;
- @Resource javax.jms.Queue blueQueue;
- @Resource javax.jms.Queue greenQueue;
+ @Resource
+ javax.jms.Queue redQueue;
+ @Resource
+ javax.jms.Queue blueQueue;
+ @Resource
+ javax.jms.Queue greenQueue;
- @Resource javax.sql.DataSource yellowDataSource;
- @Resource javax.sql.DataSource orangeDataSource;
- @Resource javax.sql.DataSource purpleDataSource;
+ @Resource
+ javax.sql.DataSource yellowDataSource;
+ @Resource
+ javax.sql.DataSource orangeDataSource;
+ @Resource
+ javax.sql.DataSource purpleDataSource;
}
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/AutoDeployerTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/AutoDeployerTest.java
new file mode 100644
index 0000000..31871f1
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/AutoDeployerTest.java
@@ -0,0 +1,256 @@
+/*
+ * 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.config;
+
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.Archives;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AutoDeployerTest extends Assert {
+ @Before
+ @After
+ public void stopAutoDeployer() {
+ final AutoDeployer autoDeployer = SystemInstance.get().getComponent(AutoDeployer.class);
+ if (autoDeployer != null) {
+ autoDeployer.stop();
+ }
+ SystemInstance.reset();
+ }
+
+ @Test
+ public void test() throws Exception {
+ final File tmpdir = Files.tmpdir();
+ final File apps = Files.mkdir(tmpdir, "myapps");
+ final File conf = Files.mkdir(tmpdir, "conf");
+
+ final Properties properties = new Properties();
+ properties.setProperty("openejb.deployments.classpath", "false");
+ properties.setProperty("openejb.deployment.unpack.location", "false");
+ properties.setProperty("openejb.home", tmpdir.getAbsolutePath());
+ properties.setProperty("openejb.base", tmpdir.getAbsolutePath());
+
+ SystemInstance.init(properties);
+
+ { // Setup the configuration location
+ final File config = new File(conf, "openejb.xml");
+ IO.writeString(config, "<openejb><Deployments autoDeploy=\"true\" dir=\"myapps\"/> </openejb>");
+ SystemInstance.get().setProperty("openejb.configuration", config.getAbsolutePath());
+ }
+
+ final ConfigurationFactory configurationFactory = new ConfigurationFactory();
+ configurationFactory.init(properties);
+ final OpenEjbConfiguration configuration = configurationFactory.getOpenEjbConfiguration();
+
+ { // Check the ContainerSystemInfo
+
+ final List<String> autoDeploy = configuration.containerSystem.autoDeploy;
+ assertEquals(1, autoDeploy.size());
+ assertEquals("myapps", autoDeploy.get(0));
+ }
+
+ final Assembler assembler = new Assembler();
+ assembler.buildContainerSystem(configuration);
+
+ /// start with the testing...
+
+ assertFalse(Yellow.deployed);
+ assertFalse(Orange.deployed);
+
+ final File deployed = Files.path(apps, "colors.ear");
+
+ // Hot deploy the EAR
+ final File ear = createEar(tmpdir, Orange.class, State.class);
+ IO.copy(ear, deployed);
+
+ Orange.state.waitForChange(1, TimeUnit.MINUTES);
+
+ assertFalse(Yellow.deployed);
+ assertTrue(Orange.deployed);
+
+ Files.delete(deployed);
+
+ Orange.state.waitForChange(1, TimeUnit.MINUTES);
+
+ assertFalse(Yellow.deployed);
+ assertFalse(Orange.deployed);
+ }
+
+ @Test
+ public void testAltUnpackDir() throws Exception {
+ final File tmpdir = Files.tmpdir();
+ final File apps = Files.mkdir(tmpdir, "myapps");
+ final File conf = Files.mkdir(tmpdir, "conf");
+
+ final Properties properties = new Properties();
+ properties.setProperty("openejb.deployments.classpath", "false");
+ properties.setProperty("tomee.unpack.dir", "work");
+ properties.setProperty("openejb.home", tmpdir.getAbsolutePath());
+ properties.setProperty("openejb.base", tmpdir.getAbsolutePath());
+
+ SystemInstance.init(properties);
+
+ { // Setup the configuration location
+ final File config = new File(conf, "openejb.xml");
+ IO.writeString(config, "<openejb><Deployments autoDeploy=\"true\" dir=\"myapps\"/> </openejb>");
+ SystemInstance.get().setProperty("openejb.configuration", config.getAbsolutePath());
+ }
+
+ final ConfigurationFactory configurationFactory = new ConfigurationFactory();
+ configurationFactory.init(properties);
+ final OpenEjbConfiguration configuration = configurationFactory.getOpenEjbConfiguration();
+
+ { // Check the ContainerSystemInfo
+
+ final List<String> autoDeploy = configuration.containerSystem.autoDeploy;
+ assertEquals(1, autoDeploy.size());
+ assertEquals("myapps", autoDeploy.get(0));
+ }
+
+ final Assembler assembler = new Assembler();
+ assembler.buildContainerSystem(configuration);
+
+ /// start with the testing...
+
+ assertFalse(Yellow.deployed);
+ assertFalse(Orange.deployed);
+
+ final File deployed = Files.path(apps, "colors.ear");
+ deployed.deleteOnExit();
+
+ // Hot deploy the EAR
+ final File ear = createEar(tmpdir, Orange.class, State.class);
+ ear.deleteOnExit();
+ IO.copy(ear, deployed);
+ assertTrue(deployed.exists());
+
+ Orange.state.waitForChange(1, TimeUnit.MINUTES);
+
+ assertFalse(Yellow.deployed);
+ assertTrue(Orange.deployed);
+
+ Files.delete(deployed);
+
+ Orange.state.waitForChange(1, TimeUnit.MINUTES);
+
+ assertFalse(Yellow.deployed);
+ assertFalse(Orange.deployed);
+ }
+
+ private File createEar(File tmpdir, final Class<?>... aClass) throws IOException {
+ final File ear = new File(tmpdir, "colors.ear");
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(aClass));
+ Archives.jarArchive(ear, contents);
+ return ear;
+ }
+
+ public static class State {
+ private volatile boolean b;
+ private final Lock lock = new ReentrantLock();
+ private final Condition condition = lock.newCondition();
+
+ public void toggle() {
+ lock.lock();
+ try {
+ b = !b;
+ condition.signal();
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ public boolean get() {
+ return b;
+ }
+
+ public void waitForChange(long time, TimeUnit unit) {
+ lock.lock();
+ try {
+ condition.await(time, unit);
+ } catch (InterruptedException e) {
+ Thread.interrupted();
+ } finally {
+ lock.unlock();
+ }
+
+ }
+ }
+
+ @Singleton
+ @Startup
+ public static class Orange {
+
+ public static volatile boolean deployed;
+ public static final State state = new State();
+
+ @PostConstruct
+ private void startup() {
+ deployed = true;
+ state.toggle();
+ }
+
+ @PreDestroy
+ private void shutdown() {
+ deployed = false;
+ state.toggle();
+ }
+ }
+
+ @Singleton
+ @Startup
+ public static class Yellow {
+
+ public static volatile boolean deployed;
+
+ @PostConstruct
+ private void startup() {
+ deployed = true;
+ }
+
+ @PreDestroy
+ private void shutdown() {
+ deployed = false;
+ }
+ }
+}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/CheckDescriptorLocationTestFileDeletionHelper.java b/container/openejb-core/src/test/java/org/apache/openejb/config/CheckDescriptorLocationTestFileDeletionHelper.java
index 8e18e19..26a0612 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/CheckDescriptorLocationTestFileDeletionHelper.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/CheckDescriptorLocationTestFileDeletionHelper.java
@@ -29,30 +29,30 @@
@Test
public void deleteFile() {
- File fileLocation = new File(System.getProperty("java.io.tmpdir"));
+ final File fileLocation = new File(System.getProperty("java.io.tmpdir"));
assertTrue(fileLocation.isDirectory());
final File[] list = fileLocation.listFiles();
- List<File> asList = null;
+ final List<File> asList;
if (list != null) {
asList = Arrays.asList(list);
- } else{
+ } else {
asList = new ArrayList<File>();
}
deleteTestCreatedFiles(asList);
}
- private void deleteTestCreatedFiles(List<File> asList) {
- for (File file : asList) {
+ private void deleteTestCreatedFiles(final List<File> asList) {
+ for (final File file : asList) {
deleteOrMarkForDelete(file);
}
}
- private void deleteOrMarkForDelete(File file) {
+ private void deleteOrMarkForDelete(final File file) {
if (file.getName().contains(
CheckDescriptorLocationTest.FILENAME_PREFIX)) {
- boolean deleted = file.delete();
+ final boolean deleted = file.delete();
if (!deleted) {
file.deleteOnExit();
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/DeploymentsElementTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/DeploymentsElementTest.java
new file mode 100644
index 0000000..98d3564
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/DeploymentsElementTest.java
@@ -0,0 +1,658 @@
+/*
+ * 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.config;
+
+import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.config.sys.Deployments;
+import org.apache.openejb.config.sys.JaxbOpenejb;
+import org.apache.openejb.config.sys.Openejb;
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.loader.Zips;
+import org.apache.openejb.util.Archives;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * If an app exists in the apps/ directory in both the
+ * packed and unpacked states, only deploy the app once
+ *
+ * Do not treat this as two applications and deploy each one separately.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DeploymentsElementTest extends Assert {
+
+ @Rule
+ public final ExpectedException exceptions = ExpectedException.none();
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * EAR file not extracted
+ * Application.xml
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Ear_Packed_ApplicationXml() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ final File ear = new File(apps, "colors.ear");
+ {
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Orange.class));
+ contents.put("META-INF/application.xml", "<application><module><ejb>foo.jar</ejb></module></application>");
+ Archives.jarArchive(ear, contents);
+ }
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(1, configuration.containerSystem.applications.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * EAR file not extracted
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Ear_Packed_NoApplicationXml() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ final File ear = new File(apps, "colors.ear");
+ {
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Orange.class));
+ Archives.jarArchive(ear, contents);
+ }
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(1, configuration.containerSystem.applications.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * EAR file extracted
+ * Application.xml
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Ear_Unpacked_ApplicationXml() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ final File ear = new File(server.getBase(), "colors.ear");
+ {
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Orange.class));
+ contents.put("META-INF/application.xml", "<application><module><ejb>foo.jar</ejb></module></application>");
+ Archives.jarArchive(ear, contents);
+ }
+
+ Zips.unzip(ear, Files.mkdir(apps, "colors"));
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(1, configuration.containerSystem.applications.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * EAR file extracted
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Ear_Unpacked_NoApplicationXml() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ final File ear = new File(server.getBase(), "colors.ear");
+ {
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Orange.class));
+ Archives.jarArchive(ear, contents);
+ }
+
+ Zips.unzip(ear, Files.mkdir(apps, "colors"));
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(1, configuration.containerSystem.applications.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * EAR file packed
+ * EAR file extracted
+ * Application.xml
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Ear_Packed_Unpacked_ApplicationXml() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ final File ear = new File(server.getBase(), "colors.ear");
+ {
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Orange.class));
+ contents.put("META-INF/application.xml", "<application><module><ejb>foo.jar</ejb></module></application>");
+ Archives.jarArchive(ear, contents);
+ }
+
+ IO.copy(ear, Files.path(apps, "colors.ear")); // packed
+ Zips.unzip(ear, Files.mkdir(apps, "colors")); // unpacked
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(1, configuration.containerSystem.applications.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * EAR file packed
+ * EAR file extracted
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Ear_Packed_Unpacked_NoApplicationXml() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ final File ear = new File(server.getBase(), "colors.ear");
+ {
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Orange.class));
+ Archives.jarArchive(ear, contents);
+ }
+
+ IO.copy(ear, Files.path(apps, "colors.ear")); // packed
+ Zips.unzip(ear, Files.mkdir(apps, "colors")); // unpacked
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(1, configuration.containerSystem.applications.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * EAR file packed
+ * EAR file extracted
+ *
+ * The packed version is newer and an updated version of the packed version
+ * We should remove the extracted version and unpack the newer ear
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Ear_Packed_Unpacked_Modified() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ { // Unpacked version -- Orange
+
+ final File ear = new File(server.getBase(), "colors.ear");
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Orange.class));
+ contents.put("META-INF/application.xml", "<application><module><ejb>foo.jar</ejb></module></application>");
+ Archives.jarArchive(ear, contents);
+ Zips.unzip(ear, Files.mkdir(apps, "colors")); // unpacked
+ }
+
+ Thread.sleep(100);
+
+ { // Packed version -- Yellow
+
+ final File ear = new File(server.getBase(), "colors.ear");
+ final Map<String, Object> contents = new HashMap<String, Object>();
+ contents.put("foo.jar", Archives.jarArchive(Yellow.class));
+ contents.put("META-INF/application.xml", "<application><module><ejb>foo.jar</ejb></module></application>");
+ Archives.jarArchive(ear, contents);
+ Zips.unzip(ear, Files.mkdir(apps, "colors")); // unpacked
+ }
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(1, configuration.containerSystem.applications.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.size());
+ assertEquals(1, configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Yellow", configuration.containerSystem.applications.get(0).ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * Two ejb jars
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsDir_Jars_Packed() throws Exception {
+ final Server server = new Server();
+ final File apps = server.deploymentsDir("myapps");
+
+ { // Jar one
+ final File ear = new File(apps, "yellow.jar");
+ Archives.jarArchive(ear, null, Yellow.class);
+ }
+
+ { // Jar two
+ final File ear = new File(apps, "orange.jar");
+ Archives.jarArchive(ear, null, Orange.class);
+ }
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(2, configuration.containerSystem.applications.size());
+
+ final AppInfo yellow = select(configuration.containerSystem.applications, "yellow");
+ assertEquals(1, yellow.ejbJars.size());
+ assertEquals(1, yellow.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Yellow", yellow.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+
+ final AppInfo orange = select(configuration.containerSystem.applications, "orange");
+ assertEquals(1, orange.ejbJars.size());
+ assertEquals(1, orange.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", orange.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps"/>
+ *
+ * Two ejb jars
+ *
+ * Order should be guaranteed to be the same as
+ * they are declared in the openejb.xml
+ *
+ * To test, the jars are named intentionally in an order
+ * that would naturally sort to be the reverse.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsFile_Jars_Order() throws Exception {
+ final Server server = new Server();
+
+ { // Jar one
+ final File jar = server.deploymentsFile("2000.jar");
+ Archives.jarArchive(jar, null, Yellow.class);
+ }
+
+ { // Jar two
+ final File jar = server.deploymentsFile("1000.jar");
+ Archives.jarArchive(jar, null, Orange.class);
+ }
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(2, configuration.containerSystem.applications.size());
+ assertEquals("2000", configuration.containerSystem.applications.get(0).appId);
+ assertEquals("1000", configuration.containerSystem.applications.get(1).appId);
+
+ final AppInfo yellow = configuration.containerSystem.applications.get(0);
+ assertEquals(1, yellow.ejbJars.size());
+ assertEquals(1, yellow.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Yellow", yellow.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+
+ final AppInfo orange = configuration.containerSystem.applications.get(1);
+ assertEquals(1, orange.ejbJars.size());
+ assertEquals(1, orange.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", orange.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps/2000.jar"/>
+ * <Deployments dir="myapps"/>
+ *
+ * Order should be guaranteed to be the same as
+ * they are declared in the openejb.xml
+ *
+ * To test, the jars are named intentionally in an order
+ * that would naturally sort to be the reverse.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deploymentsFile_and_Dir_Jars_Order() throws Exception {
+ final Server server = new Server();
+
+ final File apps = Files.mkdir(server.getBase(), "myapps");
+
+ { // Jar one
+ final File jar = server.deploymentsFile("myapps/2000.jar");
+ Archives.jarArchive(jar, null, Yellow.class);
+ }
+
+ { // Jar two
+ server.deploymentsDir("myapps");
+
+ final File jar = Files.path(apps, "1000.jar");
+ Archives.jarArchive(jar, null, Orange.class);
+ }
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(2, configuration.containerSystem.applications.size());
+ assertEquals("2000", configuration.containerSystem.applications.get(0).appId);
+ assertEquals("1000", configuration.containerSystem.applications.get(1).appId);
+
+ final AppInfo yellow = configuration.containerSystem.applications.get(0);
+ assertEquals(1, yellow.ejbJars.size());
+ assertEquals(1, yellow.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Yellow", yellow.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+
+ final AppInfo orange = configuration.containerSystem.applications.get(1);
+ assertEquals(1, orange.ejbJars.size());
+ assertEquals(1, orange.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", orange.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * <Deployments dir="myapps/2000.jar"/>
+ * <Deployments dir="myapps/2000.jar"/>
+ * <Deployments dir="myapps"/>
+ * <Deployments dir="myapps"/>
+ *
+ * Order should be guaranteed to be the same as
+ * they are declared in the openejb.xml
+ *
+ * To test, the jars are named intentionally in an order
+ * that would naturally sort to be the reverse.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void deployments_Duplicates() throws Exception {
+ final Server server = new Server();
+
+ final File apps = Files.mkdir(server.getBase(), "myapps");
+
+ { // Jar one
+ final File jar = server.deploymentsFile("myapps/2000.jar");
+ server.deploymentsFile("myapps/2000.jar");
+ Archives.jarArchive(jar, null, Yellow.class);
+ }
+
+ { // Jar two
+ server.deploymentsDir("myapps");
+ server.deploymentsDir("myapps");
+
+ final File jar = Files.path(apps, "1000.jar");
+ Archives.jarArchive(jar, null, Orange.class);
+ }
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(2, configuration.containerSystem.applications.size());
+ assertEquals("2000", configuration.containerSystem.applications.get(0).appId);
+ assertEquals("1000", configuration.containerSystem.applications.get(1).appId);
+
+ final AppInfo yellow = configuration.containerSystem.applications.get(0);
+ assertEquals(1, yellow.ejbJars.size());
+ assertEquals(1, yellow.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Yellow", yellow.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+
+ final AppInfo orange = configuration.containerSystem.applications.get(1);
+ assertEquals(1, orange.ejbJars.size());
+ assertEquals(1, orange.ejbJars.get(0).enterpriseBeans.size());
+ assertEquals("Orange", orange.ejbJars.get(0).enterpriseBeans.get(0).ejbName);
+ }
+
+ /**
+ * We do not treat this as a failure case due to backwards compatibility
+ *
+ * @throws Exception
+ */
+ @Test
+ public void invalidDir_doesNotExist() throws Exception {
+ final Server server = new Server();
+
+ final File dir = server.deploymentsDir("myapps");
+ Files.delete(dir);
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(0, configuration.containerSystem.applications.size());
+ }
+
+ @Test
+ public void invalidDir_notADirectory() throws Exception {
+ exceptions.expect(RuntimeException.class);
+ exceptions.expectMessage("Deployments dir=");
+ exceptions.expectMessage("Not a directory");
+ exceptions.expectMessage("myapps");
+
+ final Server server = new Server();
+
+ final File dir = server.deploymentsDir("myapps");
+
+ // turn the directory into a file
+ Files.delete(dir);
+ assertTrue(dir.createNewFile());
+
+ server.init();
+ }
+
+ @Test
+ public void invalidDir_notReadable() throws Exception {
+ exceptions.expect(RuntimeException.class);
+ exceptions.expectMessage("Deployments dir=");
+ exceptions.expectMessage("Not readable");
+ exceptions.expectMessage("myapps");
+ final Server server = new Server();
+
+ final File dir = server.deploymentsDir("myapps");
+ assertTrue(dir.setReadable(false));
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(0, configuration.containerSystem.applications.size());
+ }
+
+ @Test
+ public void invalidFile_notAFile() throws Exception {
+ exceptions.expect(RuntimeException.class);
+ exceptions.expectMessage("Deployments file=");
+ exceptions.expectMessage("Not a file");
+ exceptions.expectMessage("myapp.jar");
+
+ final Server server = new Server();
+
+ final File file = server.deploymentsFile("myapp.jar");
+ Files.delete(file);
+ Files.mkdir(file);
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(0, configuration.containerSystem.applications.size());
+ }
+
+ @Test
+ public void invalidFile_doesNotExist() throws Exception {
+ exceptions.expect(RuntimeException.class);
+ exceptions.expectMessage("Deployments file=");
+ exceptions.expectMessage("not exist");
+ exceptions.expectMessage("myapp.jar");
+
+ final Server server = new Server();
+
+ final File file = server.deploymentsFile("myapp.jar");
+ Files.delete(file);
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(0, configuration.containerSystem.applications.size());
+ }
+
+ @Test
+ public void invalidFile_notReadable() throws Exception {
+ exceptions.expect(RuntimeException.class);
+ exceptions.expectMessage("Deployments file=");
+ exceptions.expectMessage("Not readable");
+ exceptions.expectMessage("myapp.jar");
+
+ final Server server = new Server();
+
+ final File file = server.deploymentsFile("myapp.jar");
+ assertTrue(file.createNewFile());
+ assertTrue(file.setReadable(false));
+
+ final OpenEjbConfiguration configuration = server.init();
+
+ assertEquals(0, configuration.containerSystem.applications.size());
+ }
+
+ /**
+ * If something is in the process of being deployed, do not try to autoDeploy it
+ *
+ * @throws Exception
+ */
+ @Test @Ignore
+ public void alreadyInDeployProcess() throws Exception {
+
+ }
+
+ public AppInfo select(List<AppInfo> appInfos, String id) {
+ for (AppInfo appInfo : appInfos) {
+ if (id.equals(appInfo.appId)) {
+ return appInfo;
+ }
+ }
+
+ throw new RuntimeException("No AppInfo with id: " + id);
+ }
+
+
+ @Before
+ public void after() {
+ SystemInstance.reset();
+ }
+
+ @Singleton
+ @Startup
+ public static class Orange {
+ }
+
+ @Singleton
+ @Startup
+ public static class Yellow {
+ }
+
+ private class Server {
+ private final File base;
+ private final Properties properties;
+ private final Openejb openejb = new Openejb();
+ private final File configFile;
+
+ private Server() {
+ base = Files.tmpdir();
+
+ final File conf = Files.mkdir(base, "conf");
+
+ properties = new Properties();
+ properties.setProperty("openejb.deployments.classpath", "false");
+ properties.setProperty("openejb.home", base.getAbsolutePath());
+ properties.setProperty("openejb.base", base.getAbsolutePath());
+
+ configFile = new File(conf, "openejb.xml");
+
+ properties.setProperty("openejb.configuration", configFile.getAbsolutePath());
+ }
+
+
+ public OpenEjbConfiguration init() throws Exception {
+ try {
+ IO.writeString(configFile, JaxbOpenejb.marshal(Openejb.class, openejb));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ SystemInstance.init(properties);
+
+ final ConfigurationFactory configurationFactory = new ConfigurationFactory();
+ configurationFactory.init(properties);
+
+ return configurationFactory.getOpenEjbConfiguration();
+ }
+
+ public File getBase() {
+ return base;
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ public File deploymentsDir(String dir) {
+ openejb.getDeployments().add(new Deployments().dir(dir));
+ return Files.mkdir(base, dir);
+ }
+
+ public File deploymentsFile(String file) {
+ openejb.getDeployments().add(new Deployments().file(file));
+ return Files.path(base, file);
+ }
+ }
+}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java
index 7b9ae40..90ee930 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckTowManyInterfaceTest.java
@@ -20,11 +20,7 @@
import org.apache.openejb.jee.StatelessBean;
import org.junit.runner.RunWith;
-import javax.annotation.Resource;
import javax.ejb.Stateless;
-import javax.ejb.TransactionManagement;
-import javax.ejb.TransactionManagementType;
-import javax.transaction.UserTransaction;
import java.util.concurrent.Callable;
/**
@@ -33,7 +29,7 @@
@RunWith(ValidationRunner.class)
public class CheckTowManyInterfaceTest {
- @Keys( @Key("too.many.interfaces") )
+ @Keys(@Key("too.many.interfaces"))
public EjbJar testSLSBwithUserTransaction() throws Exception {
EjbJar ejbJar = new EjbJar();
ejbJar.addEnterpriseBean(new StatelessBean(TwoManyInterface.class));
@@ -42,8 +38,12 @@
@Stateless
public static class TwoManyInterface implements Callable, Runnable {
- public Object call() throws Exception { return null; }
- @Override public void run() {}
- }
+ public Object call() throws Exception {
+ return null;
+ }
+ @Override
+ public void run() {
+ }
+ }
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
index dcaa133..b4c4efe 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/InvalidInterfacesTest.java
@@ -16,6 +16,13 @@
*/
package org.apache.openejb.config.rules;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.loader.SystemInstance;
+import org.junit.After;
+import org.junit.runner.RunWith;
+
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.EJBHome;
@@ -26,13 +33,6 @@
import javax.ejb.Remote;
import javax.interceptor.AroundInvoke;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.StatelessBean;
-import org.apache.openejb.loader.SystemInstance;
-import org.junit.After;
-import org.junit.runner.RunWith;
-
/**
* @version $Rev$ $Date$
*/
@@ -49,59 +49,59 @@
return ejbJar;
}
- @Keys( { @Key("xml.remote.businessLocal"), @Key("xml.home.businessLocal"), @Key("xml.local.businessLocal"), @Key("xml.localHome.businessLocal") })
+ @Keys({@Key("xml.remote.businessLocal"), @Key("xml.home.businessLocal"), @Key("xml.local.businessLocal"), @Key("xml.localHome.businessLocal")})
public EjbJar testBusinessLocal() throws Exception {
return validate(FooLocal.class);
}
- @Keys( { @Key("xml.remote.businessRemote"), @Key("xml.home.businessRemote"), @Key("xml.local.businessRemote"), @Key("xml.localHome.businessRemote") })
+ @Keys({@Key("xml.remote.businessRemote"), @Key("xml.home.businessRemote"), @Key("xml.local.businessRemote"), @Key("xml.localHome.businessRemote")})
public EjbJar testBusinessRemote() throws Exception {
return validate(FooRemote.class);
}
- @Keys( { @Key("xml.home.ejbObject"), @Key("xml.local.ejbObject"), @Key("xml.localHome.ejbObject"), @Key("xml.businessLocal.ejbObject"), @Key("xml.businessRemote.ejbObject") })
+ @Keys({@Key("xml.home.ejbObject"), @Key("xml.local.ejbObject"), @Key("xml.localHome.ejbObject"), @Key("xml.businessLocal.ejbObject"), @Key("xml.businessRemote.ejbObject")})
public EjbJar testEJBObject() throws Exception {
return validate(FooEJBObject.class);
}
- @Keys( { @Key("xml.remote.ejbHome"), @Key("xml.local.ejbHome"), @Key("xml.localHome.ejbHome"), @Key("xml.businessLocal.ejbHome"), @Key("xml.businessRemote.ejbHome") })
+ @Keys({@Key("xml.remote.ejbHome"), @Key("xml.local.ejbHome"), @Key("xml.localHome.ejbHome"), @Key("xml.businessLocal.ejbHome"), @Key("xml.businessRemote.ejbHome")})
public EjbJar testEJBHome() throws Exception {
return validate(FooEJBHome.class);
}
- @Keys( { @Key("xml.remote.ejbLocalHome"), @Key("xml.home.ejbLocalHome"), @Key("xml.local.ejbLocalHome"), @Key("xml.businessLocal.ejbLocalHome"),
- @Key("xml.businessRemote.ejbLocalHome") })
+ @Keys({@Key("xml.remote.ejbLocalHome"), @Key("xml.home.ejbLocalHome"), @Key("xml.local.ejbLocalHome"), @Key("xml.businessLocal.ejbLocalHome"),
+ @Key("xml.businessRemote.ejbLocalHome")})
public EjbJar testEJBLocalHome() throws Exception {
return validate(FooEJBLocalHome.class);
}
- @Keys( { @Key("xml.remote.ejbLocalObject"), @Key("xml.home.ejbLocalObject"), @Key("xml.localHome.ejbLocalObject"), @Key("xml.businessLocal.ejbLocalObject"),
- @Key("xml.businessRemote.ejbLocalObject") })
+ @Keys({@Key("xml.remote.ejbLocalObject"), @Key("xml.home.ejbLocalObject"), @Key("xml.localHome.ejbLocalObject"), @Key("xml.businessLocal.ejbLocalObject"),
+ @Key("xml.businessRemote.ejbLocalObject")})
public EjbJar testEJBLocalObject() throws Exception {
return validate(FooEJBLocalObject.class);
}
- @Keys( { @Key("xml.remote.unknown"), @Key("xml.home.unknown"), @Key("xml.localHome.unknown"), @Key("xml.local.unknown"), @Key("xml.localRemote.conflict") })
+ @Keys({@Key("xml.remote.unknown"), @Key("xml.home.unknown"), @Key("xml.localHome.unknown"), @Key("xml.local.unknown"), @Key("xml.localRemote.conflict")})
public EjbJar testUnkown() throws Exception {
SystemInstance.get().setProperty("openejb.strict.interface.declaration", "true");
return validate(FooUnknown.class);
}
- @Keys( { @Key("xml.remote.beanClass"), @Key("xml.home.beanClass"), @Key("xml.localHome.beanClass"), @Key("xml.local.beanClass"), @Key("xml.businessRemote.beanClass"),
- @Key("xml.businessLocal.beanClass") })
+ @Keys({@Key("xml.remote.beanClass"), @Key("xml.home.beanClass"), @Key("xml.localHome.beanClass"), @Key("xml.local.beanClass"), @Key("xml.businessRemote.beanClass"),
+ @Key("xml.businessLocal.beanClass")})
public EjbJar testBeanClass() throws Exception {
return validate(FooBean.class);
}
- @Keys( { @Key("xml.remote.notInterface"), @Key("xml.home.notInterface"), @Key("xml.localHome.notInterface"), @Key("xml.local.notInterface"),
- @Key("xml.businessRemote.notInterface"), @Key("xml.businessLocal.notInterface") })
+ @Keys({@Key("xml.remote.notInterface"), @Key("xml.home.notInterface"), @Key("xml.localHome.notInterface"), @Key("xml.local.notInterface"),
+ @Key("xml.businessRemote.notInterface"), @Key("xml.businessLocal.notInterface")})
public EjbJar testNotInterface() throws Exception {
return validate(FooClass.class);
}
- @Keys( { @Key("ann.notAnInterface"), @Key("xml.businessLocal.notInterface"), @Key("ann.localRemote.conflict"), @Key("ann.remoteOrLocal.ejbHome"),
+ @Keys({@Key("ann.notAnInterface"), @Key("xml.businessLocal.notInterface"), @Key("ann.localRemote.conflict"), @Key("ann.remoteOrLocal.ejbHome"),
@Key("xml.businessRemote.ejbHome"), @Key("ann.remoteOrLocal.ejbObject"), @Key("xml.businessRemote.ejbObject"), @Key(value = "ann.remoteOrLocal.ejbLocalHome"),
- @Key(value = "ann.remoteOrLocal.ejbLocalObject"), @Key("xml.businessLocal.ejbLocalHome"), @Key("xml.businessLocal.ejbLocalObject") })
+ @Key(value = "ann.remoteOrLocal.ejbLocalObject"), @Key("xml.businessLocal.ejbLocalHome"), @Key("xml.businessLocal.ejbLocalObject")})
public EjbJar test() throws OpenEJBException {
SystemInstance.get().setProperty("openejb.strict.interface.declaration", "true");
EjbJar ejbJar = new EjbJar();
@@ -110,23 +110,26 @@
StatelessBean mybean1 = ejbJar.addEnterpriseBean(new StatelessBean("MyBean1", MyBean.class));
return ejbJar;
}
- @Keys({@Key(value="interface.beanOnlyAnnotation",type=KeyType.WARNING),@Key(value="interfaceMethod.beanOnlyAnnotation",type=KeyType.WARNING),@Key("aroundInvoke.invalidArguments")})
- public EjbJar test1(){
+
+ @Keys({@Key(value = "interface.beanOnlyAnnotation", type = KeyType.WARNING), @Key(value = "interfaceMethod.beanOnlyAnnotation", type = KeyType.WARNING), @Key("aroundInvoke.invalidArguments")})
+ public EjbJar test1() {
SystemInstance.get().setProperty("openejb.strict.interface.declaration", "true");
EjbJar ejbJar = new EjbJar();
ejbJar.addEnterpriseBean(new StatelessBean(DBean.class));
return ejbJar;
-
+
}
- @Keys({@Key(value="ann.remoteOrLocal.converse.parent",count=2)})
- public EjbJar test2(){
- SystemInstance.get().setProperty("openejb.strict.interface.declaration", "true");
+
+ @Keys({@Key(value = "ann.remoteOrLocal.converse.parent", count = 2)})
+ public EjbJar test2() {
+ SystemInstance.get().setProperty("openejb.strict.interface.declaration", "true");
EjbJar ejbJar = new EjbJar();
ejbJar.addEnterpriseBean(new StatelessBean(EBean.class));
ejbJar.addEnterpriseBean(new StatelessBean(FBean.class));
return ejbJar;
-
+
}
+
@After
public void after() {
SystemInstance.get().setProperty("openejb.strict.interface.declaration", "false");
@@ -142,66 +145,103 @@
return ejbJar;
}
- public static class FooBean {}
+ public static class FooBean {
+ }
- public static interface FooEJBHome extends EJBHome {}
+ public static interface FooEJBHome extends EJBHome {
+ }
- public static interface FooEJBObject extends EJBObject {}
+ public static interface FooEJBObject extends EJBObject {
+ }
- public static interface FooEJBLocalHome extends EJBLocalHome {}
+ public static interface FooEJBLocalHome extends EJBLocalHome {
+ }
- public static interface FooEJBLocalObject extends EJBLocalObject {}
+ public static interface FooEJBLocalObject extends EJBLocalObject {
+ }
@Remote
- public static interface FooRemote {}
+ public static interface FooRemote {
+ }
@Local
- public static interface FooLocal {}
+ public static interface FooLocal {
+ }
- public static interface FooUnknown {}
+ public static interface FooUnknown {
+ }
- public static class FooClass {}
+ public static class FooClass {
+ }
- public static interface MyRemoteHome extends EJBHome {}
+ public static interface MyRemoteHome extends EJBHome {
+ }
- public static interface MyLocalHome extends EJBLocalHome {}
+ public static interface MyLocalHome extends EJBLocalHome {
+ }
- public static interface MyRemote extends EJBObject {}
+ public static interface MyRemote extends EJBObject {
+ }
- public static interface MyLocal extends EJBLocalObject {}
+ public static interface MyLocal extends EJBLocalObject {
+ }
- @Remote( { MyRemoteHome.class, MyRemote.class })
- @Local( { MyLocalHome.class, MyLocal.class })
- public static class MyBean {}
+ @Remote({MyRemoteHome.class, MyRemote.class})
+ @Local({MyLocalHome.class, MyLocal.class})
+ public static class MyBean {
+ }
- public static class ABean {}
+ public static class ABean {
+ }
@Local(ABean.class)
- public static class BBean extends ABean {}
+ public static class BBean extends ABean {
+ }
- public static interface C {}
+ public static interface C {
+ }
@Local(C.class)
@Remote(C.class)
- public static class CBean {}
+ public static class CBean {
+ }
+
@EJB
- public static interface D{
+ public static interface D {
@PostConstruct
public void foo();
}
+
@Local(D.class)
- public static class DBean{
- public void foo(){}
- @AroundInvoke public Object bar(){return null;}
+ public static class DBean {
+ public void foo() {
+ }
+
+ @AroundInvoke
+ public Object bar() {
+ return null;
+ }
}
+
@Local
- public static interface E{}
+ public static interface E {
+ }
+
@Remote
- public static interface E1 extends E{}
- public static class EBean implements E1{}
+ public static interface E1 extends E {
+ }
+
+ public static class EBean implements E1 {
+ }
+
@Remote
- public static interface F{}
+ public static interface F {
+ }
+
@Local
- public static interface F1 extends F{}
- public static class FBean implements F1{}
+ public static interface F1 extends F {
+ }
+
+ public static class FBean implements F1 {
+ }
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/KeysAnnotationVisitor.java b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/KeysAnnotationVisitor.java
index 6ad8d45..f692e66 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/KeysAnnotationVisitor.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/KeysAnnotationVisitor.java
@@ -16,24 +16,25 @@
*/
package org.apache.openejb.config.rules;
-import java.util.HashSet;
-
-import org.apache.openejb.config.rules.ValidationRunner;
import org.apache.xbean.asm.AnnotationVisitor;
import org.apache.xbean.asm.MethodVisitor;
import org.apache.xbean.asm.Type;
import org.apache.xbean.asm.commons.EmptyVisitor;
+import java.util.HashSet;
+
public class KeysAnnotationVisitor extends EmptyVisitor {
- private ClassInfo current;;
+ private ClassInfo current;
private MethodInfo currentMethod;
public static HashSet<ClassInfo> classInfos = new HashSet<ClassInfo>();
- public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
+ @Override
+ public void visit(final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) {
current = new ClassInfo(name);
}
- public AnnotationVisitor visitAnnotation(String desc, boolean arg1) {
+ @Override
+ public AnnotationVisitor visitAnnotation(final String desc, final boolean arg1) {
if (desc.contains("RunWith"))
return this;
if (desc.contains("Keys")) {
@@ -43,22 +44,24 @@
return null;
}
- public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
+ @Override
+ public MethodVisitor visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) {
currentMethod = new MethodInfo(name);
return this;
}
- public void visit(String name, Object value) {
+ @Override
+ public void visit(final String name, final Object value) {
if ("value".equals(name)) {
if (value instanceof Type) {
- Type type = (Type) value;
- int sort = type.getSort();
+ final Type type = (Type) value;
+ final int sort = type.getSort();
switch (sort) {
- case Type.OBJECT:
- if (type.getClassName().equals(ValidationRunner.class.getName())) {
- classInfos.add(current);
- }
- break;
+ case Type.OBJECT:
+ if (type.getClassName().equals(ValidationRunner.class.getName())) {
+ classInfos.add(current);
+ }
+ break;
}
} else {
currentMethod.keys.add((String) value);
@@ -66,14 +69,16 @@
}
}
- public AnnotationVisitor visitAnnotation(String name, String desc) {
+ @Override
+ public AnnotationVisitor visitAnnotation(final String name, final String desc) {
if (desc.contains("Key")) {
return this;
}
return null;
}
- public AnnotationVisitor visitArray(String arg0) {
+ @Override
+ public AnnotationVisitor visitArray(final String arg0) {
return this;
}
@@ -81,7 +86,7 @@
String clazz;
HashSet<MethodInfo> methuds;
- public ClassInfo(String clazz) {
+ public ClassInfo(final String clazz) {
this.clazz = clazz;
methuds = new HashSet<MethodInfo>();
}
@@ -95,14 +100,14 @@
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
- ClassInfo other = (ClassInfo) obj;
+ final ClassInfo other = (ClassInfo) obj;
if (clazz == null) {
if (other.clazz != null)
return false;
@@ -116,7 +121,7 @@
String methud;
HashSet<String> keys;
- public MethodInfo(String methud) {
+ public MethodInfo(final String methud) {
this.methud = methud;
keys = new HashSet<String>();
}
@@ -130,14 +135,14 @@
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
- MethodInfo other = (MethodInfo) obj;
+ final MethodInfo other = (MethodInfo) obj;
if (methud == null) {
if (other.methud != null)
return false;
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/ValidationKeysAuditorTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/ValidationKeysAuditorTest.java
index 8a8f4f9..12c0763 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/rules/ValidationKeysAuditorTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/rules/ValidationKeysAuditorTest.java
@@ -16,22 +16,6 @@
*/
package org.apache.openejb.config.rules;
-import static org.apache.openejb.util.URLs.toFile;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.ResourceBundle;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.Map.Entry;
-
import org.apache.openejb.config.rules.KeysAnnotationVisitor.ClassInfo;
import org.apache.openejb.config.rules.KeysAnnotationVisitor.MethodInfo;
import org.apache.openejb.loader.IO;
@@ -42,6 +26,21 @@
import org.junit.BeforeClass;
import org.junit.Test;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Map.Entry;
+import java.util.ResourceBundle;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import static org.apache.openejb.util.URLs.toFile;
+
/**
* This class is not meant to be a container for tests. Its an audit tool which generates a report of how many of the keys listed in
* org.apache.openejb.config.rules.Messages.properties have tests written for them
@@ -51,20 +50,20 @@
@BeforeClass
public static void init() {
- ResourceBundle bundle = ResourceBundle.getBundle("org.apache.openejb.config.rules.Messages");
+ final ResourceBundle bundle = ResourceBundle.getBundle("org.apache.openejb.config.rules.Messages");
allKeys = bundle.keySet();
allKeys = stripPrefixes(allKeys);
}
@Test
public void audit() {
- URL resource = ValidationKeysAuditorTest.class.getResource("/org/apache/openejb/config/rules/Keys.class");
- File file = toFile(resource);
- KeysAnnotationVisitor visitor = new KeysAnnotationVisitor();
+ final URL resource = ValidationKeysAuditorTest.class.getResource("/org/apache/openejb/config/rules/Keys.class");
+ final File file = toFile(resource);
+ final KeysAnnotationVisitor visitor = new KeysAnnotationVisitor();
dir(file.getParentFile(), visitor);
try {
generateReport(file, visitor);
- String confluenceOutput = generateConfluenceReport(file, visitor);
+ final String confluenceOutput = generateConfluenceReport(file, visitor);
writeToConfluence(confluenceOutput);
} catch (IOException e) {
// ignore it
@@ -75,18 +74,18 @@
/**
* This method will write to confluence only if you supply the system properties confluenceUsername and confluencePassword example usage mvn test
* -Dtest=ValidationKeysAuditorTest -DconfluenceUsername=<<your username>> -DconfluencePassword=<<your password>>
- *
+ *
* @param confluenceOutput
*/
- private void writeToConfluence(String confluenceOutput) {
- String username = System.getProperty("confluenceUsername");
- String password = System.getProperty("confluencePassword");
+ private void writeToConfluence(final String confluenceOutput) {
+ final String username = System.getProperty("confluenceUsername");
+ final String password = System.getProperty("confluencePassword");
if (validate(username) && validate(password)) {
try {
- String endpoint = "https://cwiki.apache.org/confluence/rpc/xmlrpc";
- Confluence confluence = new Confluence(endpoint);
+ final String endpoint = "https://cwiki.apache.org/confluence/rpc/xmlrpc";
+ final Confluence confluence = new Confluence(endpoint);
confluence.login(username, password);
- Page page = confluence.getPage("OPENEJB", "Validation Keys Audit Report");
+ final Page page = confluence.getPage("OPENEJB", "Validation Keys Audit Report");
page.setContent(confluenceOutput);
confluence.storePage(page);
confluence.logout();
@@ -96,7 +95,7 @@
}
}
- private boolean validate(String str) {
+ private boolean validate(final String str) {
if (str == null)
return false;
if ("true".equalsIgnoreCase(str))
@@ -108,10 +107,10 @@
return true;
}
- private String generateConfluenceReport(File file, KeysAnnotationVisitor visitor) throws IOException {
- StringBuilder output = new StringBuilder();
- String newLine = System.getProperty("line.separator");
- Set<String> testedKeys = getTestedKeys(visitor.classInfos);
+ private String generateConfluenceReport(final File file, final KeysAnnotationVisitor visitor) throws IOException {
+ final StringBuilder output = new StringBuilder();
+ final String newLine = System.getProperty("line.separator");
+ final Set<String> testedKeys = getTestedKeys(visitor.classInfos);
Set<String> untestedKeys = getUntestedKeys(testedKeys);
untestedKeys = new TreeSet<String>(untestedKeys);// sort the keys
prepareConfluenceSummary(untestedKeys, output, newLine);
@@ -121,34 +120,34 @@
return output.toString();
}
- private void prepareConfluenceTestedKeysDetailedReport(HashSet<ClassInfo> classInfos, StringBuilder output, String newLine) {
- TreeMap<String, TreeSet<String>> info = new TreeMap<String, TreeSet<String>>();
+ private void prepareConfluenceTestedKeysDetailedReport(final HashSet<ClassInfo> classInfos, final StringBuilder output, final String newLine) {
+ final TreeMap<String, TreeSet<String>> info = new TreeMap<String, TreeSet<String>>();
output.append("h2.List of keys which have been tested.").append(newLine);
output.append("{table-plus:autoNumber=true}").append(newLine);
output.append("|| Key | Method which tests the key ||").append(newLine);
- for (ClassInfo classInfo : classInfos) {
- HashSet<MethodInfo> methuds = classInfo.methuds;
- for (MethodInfo methodInfo : methuds) {
- HashSet<String> keys = methodInfo.keys;
- for (String key : keys) {
+ for (final ClassInfo classInfo : classInfos) {
+ final HashSet<MethodInfo> methuds = classInfo.methuds;
+ for (final MethodInfo methodInfo : methuds) {
+ final HashSet<String> keys = methodInfo.keys;
+ for (final String key : keys) {
if (!info.containsKey(key)) {
- TreeSet<String> set = new TreeSet<String>();
+ final TreeSet<String> set = new TreeSet<String>();
set.add(createConfluenceLink(classInfo.clazz + "." + methodInfo.methud + "()"));
info.put(key, set);
} else {
- TreeSet<String> set = info.get(key);
+ final TreeSet<String> set = info.get(key);
set.add(createConfluenceLink(classInfo.clazz + "." + methodInfo.methud + "()"));
}
}
}
}
- Set<Entry<String, TreeSet<String>>> entrySet = info.entrySet();
- for (Entry<String, TreeSet<String>> entry : entrySet) {
- String key = entry.getKey();
+ final Set<Entry<String, TreeSet<String>>> entrySet = info.entrySet();
+ for (final Entry<String, TreeSet<String>> entry : entrySet) {
+ final String key = entry.getKey();
output.append("| ").append(key).append(" | ");
int count = 0;
- TreeSet<String> values = entry.getValue();
- for (String value : values) {
+ final TreeSet<String> values = entry.getValue();
+ for (final String value : values) {
if (count > 0) {
output.append(" \\\\ ");
}
@@ -160,78 +159,78 @@
output.append("{table-plus}").append(newLine);
}
- private String createConfluenceLink(String string) {
+ private String createConfluenceLink(final String string) {
String link = "[" + string + " | ";
- String temp = string.substring(0, string.lastIndexOf("."));
- String location = "https://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/" + temp + ".java?revision=HEAD&view=markup ]";
+ final String temp = string.substring(0, string.lastIndexOf("."));
+ final String location = "https://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/" + temp + ".java?revision=HEAD&view=markup ]";
link = link + location;
return link;
}
- private void prepareConfluenceUntestedKeyList(Set<String> untestedKeys, StringBuilder output, String newLine) {
+ private void prepareConfluenceUntestedKeyList(final Set<String> untestedKeys, final StringBuilder output, final String newLine) {
output.append("{table-plus:autoNumber=true}").append(newLine);
output.append("|| h2.List of untested keys \\\\ ||").append(newLine);
- for (String key : untestedKeys) {
+ for (final String key : untestedKeys) {
output.append(" | ").append(key).append(" | ").append(newLine);
}
output.append("{table-plus}").append(newLine);
}
- private void prepareConfluenceSummary(Set<String> untestedKeys, StringBuilder output, String newLine) {
- int total = allKeys.size();
- int untested = untestedKeys.size();
- int tested = total - untested;
- double coverage = (((tested + 0.0) / (total + 0.0)) * 100);
+ private void prepareConfluenceSummary(final Set<String> untestedKeys, final StringBuilder output, final String newLine) {
+ final int total = allKeys.size();
+ final int untested = untestedKeys.size();
+ final int tested = total - untested;
+ final double coverage = (((tested + 0.0) / (total + 0.0)) * 100);
output.append("{warning:title=Warning}This page is auto-generated. Any manual changes would be over-written the next time this page is regenerated{warning}").append(
newLine);
- output.append("{info:title=Audit Result}h2.Out of a total of " + total + " keys, " + tested + " have been tested. Test coverage for keys is " + coverage + " %.{info}")
+ output.append("{info:title=Audit Result}h2.Out of a total of ").append(total).append(" keys, ").append(tested).append(" have been tested. Test coverage for keys is ").append(coverage).append(" %.{info}")
.append(newLine);
}
- private void generateReport(File file, KeysAnnotationVisitor visitor) throws IOException {
- StringBuilder output = new StringBuilder();
- String newLine = System.getProperty("line.separator");
- Set<String> testedKeys = getTestedKeys(visitor.classInfos);
+ private void generateReport(final File file, final KeysAnnotationVisitor visitor) throws IOException {
+ final StringBuilder output = new StringBuilder();
+ final String newLine = System.getProperty("line.separator");
+ final Set<String> testedKeys = getTestedKeys(KeysAnnotationVisitor.classInfos);
Set<String> untestedKeys = getUntestedKeys(testedKeys);
untestedKeys = new TreeSet<String>(untestedKeys);// sort the keys
prepareSummary(untestedKeys, output, newLine);
prepareUntestedKeyList(untestedKeys, output, newLine);
- prepareTestedKeysDetailedReport(visitor.classInfos, output, newLine);
+ prepareTestedKeysDetailedReport(KeysAnnotationVisitor.classInfos, output, newLine);
writeToFile(file, output, "ValidationKeyAuditReport.txt");
}
- private void prepareTestedKeysDetailedReport(HashSet<ClassInfo> classInfos, StringBuilder output, String newLine) throws IOException {
+ private void prepareTestedKeysDetailedReport(final HashSet<ClassInfo> classInfos, final StringBuilder output, final String newLine) throws IOException {
output.append("================================================================================================").append(newLine);
output.append("List of all keys tested. Next to each is the the test method which tests the key").append(newLine);
output.append("================================================================================================").append(newLine);
- TreeMap<String, TreeSet<String>> info = new TreeMap<String, TreeSet<String>>();
- for (ClassInfo classInfo : classInfos) {
- HashSet<MethodInfo> methuds = classInfo.methuds;
- for (MethodInfo methodInfo : methuds) {
- HashSet<String> keys = methodInfo.keys;
- for (String key : keys) {
+ final TreeMap<String, TreeSet<String>> info = new TreeMap<String, TreeSet<String>>();
+ for (final ClassInfo classInfo : classInfos) {
+ final HashSet<MethodInfo> methuds = classInfo.methuds;
+ for (final MethodInfo methodInfo : methuds) {
+ final HashSet<String> keys = methodInfo.keys;
+ for (final String key : keys) {
if (!info.containsKey(key)) {
- TreeSet<String> set = new TreeSet<String>();
+ final TreeSet<String> set = new TreeSet<String>();
set.add(classInfo.clazz + "." + methodInfo.methud + "()");
info.put(key, set);
} else {
- TreeSet<String> set = info.get(key);
+ final TreeSet<String> set = info.get(key);
set.add(classInfo.clazz + "." + methodInfo.methud + "()");
}
}
}
}
- Set<Entry<String, TreeSet<String>>> entrySet = info.entrySet();
- for (Entry<String, TreeSet<String>> entry : entrySet) {
- String key = entry.getKey();
+ final Set<Entry<String, TreeSet<String>>> entrySet = info.entrySet();
+ for (final Entry<String, TreeSet<String>> entry : entrySet) {
+ final String key = entry.getKey();
output.append(key).append(" --> ");
int count = 0;
- TreeSet<String> values = entry.getValue();
- for (String value : values) {
+ final TreeSet<String> values = entry.getValue();
+ for (final String value : values) {
if (count > 0) {
// put as many spaces as there are characters in the key to indent and align multiple values for the same key
- StringBuilder spaces = new StringBuilder();
- for(int i=0;i<key.length();i++){
+ final StringBuilder spaces = new StringBuilder();
+ for (int i = 0; i < key.length(); i++) {
spaces.append(" ");
}
output.append(spaces).append(" --> ");
@@ -242,54 +241,66 @@
}
}
- private void writeToFile(File file, StringBuilder output, String fileName) throws IOException {
- File surefireReports = new File(dir(file), "surefire-reports");
+ private void writeToFile(final File file, final StringBuilder output, final String fileName) throws IOException {
+ final File surefireReports = new File(dir(file), "surefire-reports");
if (!surefireReports.exists()) {
surefireReports.mkdir();
}
- File auditResults = new File(surefireReports, fileName);
+ final File auditResults = new File(surefireReports, fileName);
BufferedWriter bw = null;
try {
- FileWriter writer = new FileWriter(auditResults);
+ final FileWriter writer = new FileWriter(auditResults);
bw = new BufferedWriter(writer);
bw.append(output.toString());
} finally {
- bw.flush();
- bw.close();
+ if (bw != null) {
+ try {
+ bw.flush();
+ } catch (Throwable e) {
+ //Ignore
+ }
+ }
+ if (bw != null) {
+ try {
+ bw.close();
+ } catch (Throwable e) {
+ //Ignore
+ }
+ }
}
}
- private void prepareUntestedKeyList(Set<String> untestedKeys, StringBuilder output, String newLine) {
+ private void prepareUntestedKeyList(final Set<String> untestedKeys, final StringBuilder output, final String newLine) {
output.append("================================================================================================").append(newLine);
output.append("List of all keys which have not been tested yet.").append(newLine);
output.append("================================================================================================").append(newLine);
- for (String key : untestedKeys) {
+ for (final String key : untestedKeys) {
output.append(key).append(newLine);
}
}
- private Set<String> getUntestedKeys(Set<String> testedKeys) {
- Set<String> untestedKeys = new HashSet<String>();
- for (String key : allKeys) {
+ private Set<String> getUntestedKeys(final Set<String> testedKeys) {
+ final Set<String> untestedKeys = new HashSet<String>();
+ for (final String key : allKeys) {
if (!testedKeys.contains(key))
untestedKeys.add(key);
}
return untestedKeys;
}
- private Set<String> getTestedKeys(HashSet<ClassInfo> classInfos) {
- Set<String> testedKeys = new HashSet<String>();
- for (ClassInfo classInfo : classInfos) {
- HashSet<MethodInfo> methuds = classInfo.methuds;
- for (MethodInfo methodInfo : methuds) {
+ private Set<String> getTestedKeys(final HashSet<ClassInfo> classInfos) {
+ final Set<String> testedKeys = new HashSet<String>();
+ for (final ClassInfo classInfo : classInfos) {
+ final HashSet<MethodInfo> methuds = classInfo.methuds;
+ for (final MethodInfo methodInfo : methuds) {
testedKeys.addAll(methodInfo.keys);
}
}
return testedKeys;
}
- private static Set<String> stripPrefixes(Set<String> allKeys) {
- Set<String> keys = new HashSet<String>();
+ private static Set<String> stripPrefixes(final Set<String> allKeys) {
+ final Set<String> keys = new HashSet<String>();
for (String key : allKeys) {
key = key.substring(key.indexOf(".") + 1);
if (!keys.contains(key))
@@ -298,13 +309,13 @@
return keys;
}
- private void prepareSummary(Set<String> untestedKeys, StringBuilder output, String newLine) {
- int total = allKeys.size();
- int untested = untestedKeys.size();
- int tested = total - untested;
- double coverage = (((tested + 0.0) / (total + 0.0)) * 100);
+ private void prepareSummary(final Set<String> untestedKeys, final StringBuilder output, final String newLine) {
+ final int total = allKeys.size();
+ final int untested = untestedKeys.size();
+ final int tested = total - untested;
+ final double coverage = (((tested + 0.0) / (total + 0.0)) * 100);
output.append("================================================================================================").append(newLine);
- output.append("Out of a total of " + total + " keys, " + tested + " have been tested. Test coverage for keys is " + coverage + " %.").append(newLine);
+ output.append("Out of a total of ").append(total).append(" keys, ").append(tested).append(" have been tested. Test coverage for keys is ").append(coverage).append(" %.").append(newLine);
output.append("================================================================================================").append(newLine);
}
@@ -320,10 +331,10 @@
return null;
}
- private static void dir(File dir, KeysAnnotationVisitor visitor) {
+ private static void dir(final File dir, final KeysAnnotationVisitor visitor) {
final File[] files = dir.listFiles();
if (files != null) {
- for (File file : files) {
+ for (final File file : files) {
if (file.isDirectory()) {
dir(file, visitor);
} else if (file.getName().endsWith(".class")) {
@@ -333,11 +344,11 @@
}
}
- private static void file(File file, KeysAnnotationVisitor visitor) {
+ private static void file(final File file, final KeysAnnotationVisitor visitor) {
try {
- InputStream in = IO.read(file);
+ final InputStream in = IO.read(file);
try {
- ClassReader classReader = new ClassReader(in);
+ final ClassReader classReader = new ClassReader(in);
classReader.accept(visitor, ClassWriter.COMPUTE_MAXS);
} finally {
IO.close(in);
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/sys/OpenejbTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/sys/OpenejbTest.java
index 48f1fd8..e8611da 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/sys/OpenejbTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/sys/OpenejbTest.java
@@ -80,7 +80,7 @@
private Deployments jar(String s) {
final Deployments deployments = new Deployments();
- deployments.setJar(s);
+ deployments.setFile(s);
return deployments;
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java b/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java
index 6dfca4f..c602bdb 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/core/singleton/SingletonCircularTest.java
@@ -16,17 +16,7 @@
*/
package org.apache.openejb.core.singleton;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.ejb.EJB;
-import javax.ejb.Singleton;
-import javax.ejb.Startup;
-
import junit.framework.TestCase;
-
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
import org.apache.openejb.assembler.classic.SecurityServiceInfo;
@@ -37,11 +27,19 @@
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.SingletonBean;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ejb.EJB;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* @version $Rev$ $Date$
*/
public class SingletonCircularTest extends TestCase {
-
+
private static final String one = "one";
private static final String two = "two";
@@ -58,7 +56,7 @@
// containers
assembler.createContainer(config.configureService(SingletonSessionContainerInfo.class));
-
+
actual.clear();
EjbJar ejbJar = new EjbJar();
@@ -79,8 +77,9 @@
@Startup
public static class One {
- @EJB Two two;
-
+ @EJB
+ Two two;
+
@PostConstruct
@PreDestroy
public void callback() {
@@ -92,13 +91,14 @@
@Startup
public static class Two {
- @EJB One one;
-
+ @EJB
+ One one;
+
@PostConstruct
@PreDestroy
public void callback() {
actual.add(two);
}
}
-
+
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/iTest.java b/container/openejb-core/src/test/java/org/apache/openejb/iTest.java
index 470d9d9..62b70e3 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/iTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/iTest.java
@@ -38,6 +38,7 @@
* To run this from your ide, set -Dopenejb.home=target/test-classes/
* @throws Exception
*/
+ @Override
protected void setUp() throws Exception {
try {
OpenEJB.destroy();
@@ -69,6 +70,7 @@
TestManager.start();
}
+ @Override
protected void tearDown() throws Exception {
TestManager.stop();
OpenEJB.destroy();
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java b/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java
index 921cb0a..3012536 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/mbeans/Parent.java
@@ -24,14 +24,16 @@
private int i = -1;
@ManagedAttribute
- @Description("just a value") public int getValue() {
+ @Description("just a value")
+ public int getValue() {
if (i < 0) {
return 2;
}
return i;
}
- @ManagedAttribute public void setValue(int v) {
+ @ManagedAttribute
+ public void setValue(int v) {
i = v;
}
}
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java b/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java
index fd88485..2d4e39a 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java
@@ -63,7 +63,8 @@
return p;
}
- @Test public void reload() {
+ @Test
+ public void reload() {
final ReloadableEntityManagerFactory remft = (ReloadableEntityManagerFactory) emf;
final EntityManagerFactory originalEmf = remft.getDelegate();
assertEquals("false", emf.getProperties().get("openjpa.DataCache"));
@@ -80,13 +81,14 @@
private void select() {
emf.createEntityManager()
- .createQuery("select m from ReloadableEntityManagerFactoryTest$MyEntity m")
- .getResultList();
+ .createQuery("select m from ReloadableEntityManagerFactoryTest$MyEntity m")
+ .getResultList();
}
@Entity
public static class MyEntity {
- @Id @GeneratedValue
+ @Id
+ @GeneratedValue
private long id;
public long getId() {
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/ActiveMQResourceAdapterTest.java b/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/ActiveMQResourceAdapterTest.java
index da07674..86d8c3b 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/ActiveMQResourceAdapterTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/resource/activemq/ActiveMQResourceAdapterTest.java
@@ -26,7 +26,7 @@
public class ActiveMQResourceAdapterTest extends TestCase {
public void test() throws Exception {
ActiveMQResourceAdapter resourceAdapter = new ActiveMQResourceAdapter();
- resourceAdapter.setServerUrl("vm://localhost?waitForStart=20000&async=true");
+ resourceAdapter.setServerUrl("vm://localhost?waitForStart=30000&async=false");
String brokerAddress = NetworkUtil.getLocalAddress("broker:(tcp://", ")?useJmx=false");
resourceAdapter.setBrokerXmlConfig(brokerAddress);
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/timer/TimerContainerTest.java b/container/openejb-core/src/test/java/org/apache/openejb/timer/TimerContainerTest.java
index c9c1a0c..9304042 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/timer/TimerContainerTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/timer/TimerContainerTest.java
@@ -17,14 +17,7 @@
*/
package org.apache.openejb.timer;
-import javax.annotation.Resource;
-import javax.ejb.SessionContext;
-import javax.ejb.Stateless;
-import javax.ejb.TimerService;
-import javax.naming.InitialContext;
-
import junit.framework.TestCase;
-
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
import org.apache.openejb.assembler.classic.SecurityServiceInfo;
@@ -35,12 +28,18 @@
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.StatelessBean;
+import javax.annotation.Resource;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+import javax.ejb.TimerService;
+import javax.naming.InitialContext;
+
/**
* @version $Revision$ $Date$
*/
public class TimerContainerTest extends TestCase {
- public void testTimerServiceInjection() throws Exception {
+ public void testTimerServiceInjection() throws Exception {
InitialContext ctx = new InitialContext();
Object object = ctx.lookup("WidgetBeanLocal");
@@ -50,7 +49,7 @@
Widget widget = (Widget) object;
// Do a business method...
- assertTrue("Timer was not injected", widget.isTimerSet());
+ assertTrue("Timer was not injected", widget.isTimerSet());
}
protected void setUp() throws Exception {
@@ -95,9 +94,10 @@
@Stateless
public static class WidgetBean implements Widget, RemoteWidget {
- @Resource TimerService timer;
+ @Resource
+ TimerService timer;
- public WidgetBean() {
+ public WidgetBean() {
}
@Resource
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java b/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java
index a90d77e..2bbaa97 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/util/Archives.java
@@ -135,7 +135,7 @@
out.closeEntry();
}
- for (Map.Entry<String, ?> entry : entries.entrySet()) {
+ if (entries != null) for (Map.Entry<String, ?> entry : entries.entrySet()) {
out.putNextEntry(new ZipEntry(entry.getKey()));
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/util/DynamicEJBImplTest.java b/container/openejb-core/src/test/java/org/apache/openejb/util/DynamicEJBImplTest.java
index e228979..1d9d0f1 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/util/DynamicEJBImplTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/util/DynamicEJBImplTest.java
@@ -59,39 +59,49 @@
public class DynamicEJBImplTest {
private static boolean initDone = false;
- @EJB private UserDAO dao = null;
- @EJB private UtilBean util = null;
- @EJB private UserDAOChild child = null;
- @EJB private DynamicCustomProxy custom = null;
+ @EJB
+ private UserDAO dao = null;
+ @EJB
+ private UtilBean util = null;
+ @EJB
+ private UserDAOChild child = null;
+ @EJB
+ private DynamicCustomProxy custom = null;
- @Test public void custom() {
+ @Test
+ public void custom() {
assertEquals("method = foo", custom.foo());
}
- @Before public void initDatabaseIfNotDone() {
+ @Before
+ public void initDatabaseIfNotDone() {
if (!initDone) {
util.init();
initDone = true;
}
}
- @After public void checkAll() {
+ @After
+ public void checkAll() {
Collection<User> users = dao.findAll();
assertEquals(10, users.size());
}
- @Test public void simple() {
+ @Test
+ public void simple() {
User user = dao.findById(1);
assertNotNull(user);
assertEquals(1, user.getId());
}
- @Test public void findAll() {
+ @Test
+ public void findAll() {
Collection<User> users = dao.findAll();
assertEquals(10, users.size());
}
- @Test public void pagination() {
+ @Test
+ public void pagination() {
Collection<User> users = dao.findAll(0, 5);
assertEquals(5, users.size());
@@ -100,14 +110,16 @@
assertEquals(7, users.iterator().next().getId());
}
- @Test public void persist() {
+ @Test
+ public void persist() {
User u = new User();
dao.save(u);
assertNotNull(u.getId());
util.remove(u);
}
- @Test public void remove() {
+ @Test
+ public void remove() {
User u = new User();
dao.save(u);
assertNotNull(u.getId());
@@ -120,7 +132,8 @@
}
}
- @Test public void merge() {
+ @Test
+ public void merge() {
User u = new User();
u.setInfo("one");
dao.save(u);
@@ -134,7 +147,8 @@
dao.delete(u);
}
- @Test public void oneCriteria() {
+ @Test
+ public void oneCriteria() {
Collection<User> users = dao.findByName("foo");
assertEquals(4, users.size());
for (User user : users) {
@@ -142,7 +156,8 @@
}
}
- @Test public void twoCriteria() {
+ @Test
+ public void twoCriteria() {
Collection<User> users = dao.findByNameAndInfo("bar-1", "1");
assertEquals(1, users.size());
@@ -151,13 +166,15 @@
assertEquals("1", user.getInfo());
}
- @Test public void checkInjections() {
+ @Test
+ public void checkInjections() {
UserDAO injection = util.getDao();
assertNotNull(injection);
assertEquals(10, injection.findAll().size());
}
- @Test public void query() {
+ @Test
+ public void query() {
Map<String, String> params = new HashMap<String, String>();
params.put("name", "foo");
@@ -182,7 +199,8 @@
assertEquals(4, users.size());
}
- @Test public void inheritance() {
+ @Test
+ public void inheritance() {
Map<String, String> params = new HashMap<String, String>();
params.put("name", "foo");
@@ -207,7 +225,9 @@
assertEquals(4, users.size());
}
- @Stateless @PersistenceContext(name = "pu") public static interface UserDAO {
+ @Stateless
+ @PersistenceContext(name = "pu")
+ public static interface UserDAO {
User findById(long id);
Collection<User> findByName(String name);
@@ -215,11 +235,15 @@
Collection<User> findByNameAndInfo(String name, String info);
Collection<User> findAll();
+
Collection<User> findAll(int first, int max);
Collection<User> namedQuery(String name, Map<String, ?> params, int first, int max);
+
Collection<User> namedQuery(String name, int first, int max, Map<String, ?> params);
+
Collection<User> namedQuery(String name, Map<String, ?> params);
+
Collection<User> namedQuery(String name);
Collection<User> query(String value, Map<String, ?> params);
@@ -231,16 +255,21 @@
User update(User u);
}
- @Stateless @PersistenceContext(name = "pu") public static interface UserDAOChild extends UserDAO {
+ @Stateless
+ @PersistenceContext(name = "pu")
+ public static interface UserDAOChild extends UserDAO {
// just inherited methods
}
@NamedQueries({
- @NamedQuery(name = "dynamic-ejb-impl-test.query", query = "SELECT u FROM DynamicEJBImplTest$User AS u WHERE u.name LIKE :name"),
- @NamedQuery(name = "dynamic-ejb-impl-test.all", query = "SELECT u FROM DynamicEJBImplTest$User AS u")
+ @NamedQuery(name = "dynamic-ejb-impl-test.query", query = "SELECT u FROM DynamicEJBImplTest$User AS u WHERE u.name LIKE :name"),
+ @NamedQuery(name = "dynamic-ejb-impl-test.all", query = "SELECT u FROM DynamicEJBImplTest$User AS u")
})
- @Entity public static class User {
- @Id @GeneratedValue private long id;
+ @Entity
+ public static class User {
+ @Id
+ @GeneratedValue
+ private long id;
private String name;
private String info;
@@ -268,14 +297,18 @@
this.info = info;
}
- @Override public String toString() {
+ @Override
+ public String toString() {
return "User{info='" + info + '\'' + ", name='" + name + '\'' + ", id=" + id + '}';
}
}
- @Singleton public static class UtilBean {
- @PersistenceContext private EntityManager em;
- @EJB private UserDAO dao = null;
+ @Singleton
+ public static class UtilBean {
+ @PersistenceContext
+ private EntityManager em;
+ @EJB
+ private UserDAO dao = null;
public void init() {
for (int i = 0; i < 10; i++) {
@@ -300,7 +333,8 @@
}
public static class Handler implements InvocationHandler {
- @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return "method = " + method.getName();
}
}
@@ -311,7 +345,8 @@
public String foo();
}
- @Configuration public Properties config() {
+ @Configuration
+ public Properties config() {
final Properties p = new Properties();
p.put("dynamicEjbDatabase", "new://Resource?type=DataSource");
p.put("dynamicEjbDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
@@ -319,7 +354,8 @@
return p;
}
- @Module public EjbJar app() throws Exception {
+ @Module
+ public EjbJar app() throws Exception {
EjbJar ejbJar = new EjbJar("dynamic");
ejbJar.addEnterpriseBean(new SingletonBean(UtilBean.class));
ejbJar.addEnterpriseBean(new SingletonBean(DynamicCustomProxy.class));
@@ -328,7 +364,8 @@
return ejbJar;
}
- @Module public Persistence persistence() {
+ @Module
+ public Persistence persistence() {
PersistenceUnit unit = new PersistenceUnit("pu");
unit.addClass(User.class);
unit.setProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
diff --git a/container/openejb-core/src/test/resources/altddPU1/META-INF/persistence.xml b/container/openejb-core/src/test/resources/altddPU1/META-INF/persistence.xml
index af844a0..705fa62 100644
--- a/container/openejb-core/src/test/resources/altddPU1/META-INF/persistence.xml
+++ b/container/openejb-core/src/test/resources/altddPU1/META-INF/persistence.xml
@@ -1,29 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
- 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
+ <persistence-unit name="unit">
+ <jta-data-source>movieDatabase</jta-data-source>
+ <properties>
+ <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
+ </properties>
+ </persistence-unit>
- 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.
--->
-<!-- START SNIPPET: code -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
-
- <persistence-unit name="unit">
- <jta-data-source>movieDatabase</jta-data-source>
- <properties>
- <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
- </properties>
- </persistence-unit>
</persistence>
-<!-- END SNIPPET: code -->
diff --git a/container/openejb-javaagent/pom.xml b/container/openejb-javaagent/pom.xml
index 72cb99a..ab12071 100644
--- a/container/openejb-javaagent/pom.xml
+++ b/container/openejb-javaagent/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-javaagent</artifactId>
diff --git a/container/openejb-jaxbagent/pom.xml b/container/openejb-jaxbagent/pom.xml
index 1d1bdc3..aa78b1f 100644
--- a/container/openejb-jaxbagent/pom.xml
+++ b/container/openejb-jaxbagent/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-jaxbagent</artifactId>
diff --git a/container/openejb-jee-accessors/pom.xml b/container/openejb-jee-accessors/pom.xml
index 2fd4805..5331783 100644
--- a/container/openejb-jee-accessors/pom.xml
+++ b/container/openejb-jee-accessors/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-jee-accessors</artifactId>
diff --git a/container/openejb-jee/pom.xml b/container/openejb-jee/pom.xml
index 25632f1..096142e 100644
--- a/container/openejb-jee/pom.xml
+++ b/container/openejb-jee/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-jee</artifactId>
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java
index dc68733..680b6c4 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java
@@ -93,6 +93,8 @@
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
protected String id;
+ @XmlTransient
+ protected String origin;
public ResourceRef() {
}
@@ -251,6 +253,14 @@
this.id = value;
}
+ public String getOrigin() {
+ return origin;
+ }
+
+ public void setOrigin(String origin) {
+ this.origin = origin;
+ }
+
@Override
public String toString() {
return "ResourceRef{" +
diff --git a/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/PersistenceUnit.java b/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/PersistenceUnit.java
index 171ca84..7866b84 100644
--- a/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/PersistenceUnit.java
+++ b/container/openejb-jee/src/main/java/org/apache/openejb/jee/jpa/unit/PersistenceUnit.java
@@ -275,6 +275,16 @@
}
public ValidationMode getValidationMode() {
+ if (validationMode == null) {
+ final String propConfig = getProperty("javax.persistence.validation.mode");
+ if (propConfig != null) {
+ try {
+ validationMode = ValidationMode.valueOf(propConfig.toUpperCase());
+ } catch (IllegalArgumentException iae) { // can happen since some provider allow more than the enum
+ // no-op
+ }
+ }
+ }
return (validationMode == null) ? ValidationMode.AUTO : validationMode;
}
diff --git a/container/openejb-jpa-integration/pom.xml b/container/openejb-jpa-integration/pom.xml
index 3ef14f8..cf4bc1b 100644
--- a/container/openejb-jpa-integration/pom.xml
+++ b/container/openejb-jpa-integration/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/container/openejb-junit/pom.xml b/container/openejb-junit/pom.xml
index 3d9821f..1228f1b 100644
--- a/container/openejb-junit/pom.xml
+++ b/container/openejb-junit/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-junit</artifactId>
diff --git a/container/openejb-loader/pom.xml b/container/openejb-loader/pom.xml
index 09d5433..1ca0d42 100644
--- a/container/openejb-loader/pom.xml
+++ b/container/openejb-loader/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>container</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-loader</artifactId>
diff --git a/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java b/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
index 90906a4..555d4d7 100644
--- a/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
+++ b/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
@@ -29,9 +29,9 @@
*/
public class Files {
- public static File path(String... parts) {
+ public static File path(final String... parts) {
File dir = null;
- for (String part : parts) {
+ for (final String part : parts) {
if (dir == null) {
dir = new File(part);
} else {
@@ -39,15 +39,25 @@
}
}
- return dir;
+ return null != dir ? dir.getAbsoluteFile() : dir;
}
- public static File path(File dir, String... parts) {
- for (String part : parts) {
- dir = new File(dir, part);
+ public static File path(final File dir, final String... parts) {
+ File base = dir;
+ int idx = 0;
+ if (parts.length >= 1) {
+ final File partFile = new File(parts[0]);
+ if (partFile.exists() && partFile.isAbsolute()) {
+ base = partFile;
+ idx = 1;
+ }
}
- return dir;
+ for (int i = idx; i < parts.length; i++) {
+ base = new File(base, parts[i]);
+ }
+
+ return base.getAbsoluteFile();
}
public static List<File> collect(final File dir, final String regex) {
@@ -57,66 +67,76 @@
public static List<File> collect(final File dir, final Pattern pattern) {
return collect(dir, new FileFilter() {
@Override
- public boolean accept(File file) {
+ public boolean accept(final File file) {
return pattern.matcher(file.getName()).matches();
}
});
}
- public static List<File> collect(File dir, FileFilter filter) {
+ public static List<File> collect(final File dir, final FileFilter filter) {
final List<File> accepted = new ArrayList<File>();
if (filter.accept(dir)) accepted.add(dir);
final File[] files = dir.listFiles();
- if (files != null) for (File file : files) {
+ if (files != null) for (final File file : files) {
accepted.addAll(collect(file, filter));
}
return accepted;
}
- public static File exists(File file, String s) {
- if (!file.exists()) throw new FileRuntimeException(s + " does not exist: " + file.getAbsolutePath());
+ public static File exists(final File file, final String s) {
+ if (!file.exists()) throw new FileDoesNotExistException(s + " does not exist: " + file.getAbsolutePath());
return file;
}
- public static File exists(File file) {
- if (!file.exists()) throw new FileRuntimeException("Does not exist: " + file.getAbsolutePath());
+ public static File exists(final File file) {
+ if (!file.exists()) throw new FileDoesNotExistException("Does not exist: " + file.getAbsolutePath());
return file;
}
- public static File dir(File file) {
+ public static File dir(final File file) {
if (!file.isDirectory()) throw new FileRuntimeException("Not a directory: " + file.getAbsolutePath());
return file;
}
- public static File file(File file) {
+ public static File file(final File file) {
exists(file);
if (!file.isFile()) throw new FileRuntimeException("Not a file: " + file.getAbsolutePath());
return file;
}
- public static File writable(File file) {
+ public static File notHidden(final File file) {
+ exists(file);
+ if (file.isHidden()) throw new FileRuntimeException("File is hidden: " + file.getAbsolutePath());
+ return file;
+ }
+
+ public static File writable(final File file) {
if (!file.canWrite()) throw new FileRuntimeException("Not writable: " + file.getAbsolutePath());
return file;
}
- public static File readable(File file) {
+ public static File readable(final File file) {
if (!file.canRead()) throw new FileRuntimeException("Not readable: " + file.getAbsolutePath());
return file;
}
- public static File readableFile(File file) {
+ public static File readableFile(final File file) {
return readable(file(file));
}
- public static File mkdir(File file) {
+ public static File mkdir(final File file) {
if (file.exists()) return file;
if (!file.mkdirs()) throw new FileRuntimeException("Cannot mkdir: " + file.getAbsolutePath());
return file;
}
+ public static File mkdir(final File file, final String name) {
+ return mkdir(new File(file, name));
+ }
+
public static File tmpdir() {
try {
final File file = File.createTempFile("temp", "dir");
@@ -129,12 +149,12 @@
}
}
- public static File mkparent(File file) {
+ public static File mkparent(final File file) {
mkdirs(file.getParentFile());
return file;
}
- public static File mkdirs(File file) {
+ public static File mkdirs(final File file) {
if (!file.exists()) {
@@ -151,51 +171,82 @@
static final List<String> delete = new ArrayList<String>();
static {
- Runtime.getRuntime().addShutdownHook(new Thread() {
- @Override
- public void run() {
- delete();
- }
- });
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(Files.class.getClassLoader());
+ try {
+ final Thread deleteShutdownHook = new Thread() {
+ @Override
+ public void run() {
+ delete();
+ }
+ };
+ Runtime.getRuntime().addShutdownHook(deleteShutdownHook);
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
+ }
}
- public static void deleteOnExit(File file) {
+ public static void deleteOnExit(final File file) {
delete.add(file.getAbsolutePath());
}
private static void delete() {
- for (String path : delete) {
+ for (final String path : delete) {
delete(new File(path));
}
}
- public static void delete(File file) {
+ public static void delete(final File file) {
if (file.exists()) {
if (file.isDirectory()) {
- for (File f : file.listFiles()) {
- delete(f);
+ final File[] files = file.listFiles();
+ if (null != files) {
+ for (final File f : files) {
+ delete(f);
+ }
}
}
- if(!file.delete()){
- file.deleteOnExit();
+ if (!file.delete()) {
+ try {
+ file.deleteOnExit();
+ } catch (Throwable e) {
+ //Ignore
+ }
}
}
}
- public static File select(File dir, String pattern) {
+ public static void remove(final File file) {
+ if (file == null) return;
+ if (!file.exists()) return;
+
+ if (file.isDirectory()) {
+ final File[] files = file.listFiles();
+ if (files != null) {
+ for (final File child : files) {
+ remove(child);
+ }
+ }
+ }
+ if (!file.delete()) {
+ throw new IllegalStateException("Could not delete file: " + file.getAbsolutePath());
+ }
+ }
+
+ public static File select(final File dir, final String pattern) {
final List<File> matches = collect(dir, pattern);
if (matches.size() == 0) throw new IllegalStateException(String.format("Missing '%s'", pattern));
if (matches.size() > 1) throw new IllegalStateException(String.format("Too many found '%s': %s", pattern, join(", ", matches)));
return matches.get(0);
}
- private static String join(String delimiter, Collection<File> collection) {
+ private static String join(final String delimiter, final Collection<File> collection) {
if (collection.size() == 0) {
return "";
}
- StringBuilder sb = new StringBuilder();
- for (File obj : collection) {
+ final StringBuilder sb = new StringBuilder();
+ for (final File obj : collection) {
sb.append(obj.getName()).append(delimiter);
}
return sb.substring(0, sb.length() - delimiter.length());
@@ -210,4 +261,15 @@
super(e);
}
}
+
+ public static class FileDoesNotExistException extends FileRuntimeException {
+ public FileDoesNotExistException(final String str) {
+ super(str);
+ }
+
+ public FileDoesNotExistException(final Exception e) {
+ super(e);
+ }
+ }
+
}
diff --git a/container/openejb-loader/src/main/java/org/apache/openejb/loader/IO.java b/container/openejb-loader/src/main/java/org/apache/openejb/loader/IO.java
index 44f2467..2b9e0aa 100644
--- a/container/openejb-loader/src/main/java/org/apache/openejb/loader/IO.java
+++ b/container/openejb-loader/src/main/java/org/apache/openejb/loader/IO.java
@@ -16,25 +16,7 @@
*/
package org.apache.openejb.loader;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.Flushable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
@@ -43,6 +25,8 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
@@ -54,11 +38,11 @@
public static String readFileAsString(final URI uri) throws IOException {
final StringBuilder builder = new StringBuilder("");
- for (Proxy proxy : ProxySelector.getDefault().select(uri)) {
- InputStream is;
+ for (final Proxy proxy : ProxySelector.getDefault().select(uri)) {
+ final InputStream is;
try {
- URLConnection urlConnection = uri.toURL().openConnection(proxy);
+ final URLConnection urlConnection = uri.toURL().openConnection(proxy);
urlConnection.setConnectTimeout(MAX_TIMEOUT);
is = urlConnection.getInputStream();
} catch (IOException e) {
@@ -79,11 +63,11 @@
return builder.toString();
}
- public static Properties readProperties(URL resource) throws IOException {
+ public static Properties readProperties(final URL resource) throws IOException {
return readProperties(resource, new Properties());
}
- public static Properties readProperties(URL resource, Properties properties) throws IOException {
+ public static Properties readProperties(final URL resource, final Properties properties) throws IOException {
return readProperties(read(resource), properties);
}
@@ -91,64 +75,65 @@
return readProperties(resource, new Properties());
}
- public static Properties readProperties(File resource, Properties properties) throws IOException {
+ public static Properties readProperties(final File resource, final Properties properties) throws IOException {
return readProperties(read(resource), properties);
}
/**
* Reads and closes the input stream
- * @param in
- * @param properties
- * @return
+ *
+ * @param in InputStream
+ * @param properties Properties
+ * @return Properties
* @throws IOException
*/
- public static Properties readProperties(InputStream in, Properties properties) throws IOException {
+ public static Properties readProperties(final InputStream in, final Properties properties) throws IOException {
if (in == null) throw new NullPointerException("InputStream is null");
if (properties == null) throw new NullPointerException("Properties is null");
try {
properties.load(in);
- } finally{
+ } finally {
close(in);
}
return properties;
}
- public static String readString(URL url) throws IOException {
+ public static String readString(final URL url) throws IOException {
final InputStream in = url.openStream();
try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(in));
return reader.readLine();
} finally {
close(in);
}
}
- public static String readString(File file) throws IOException {
+ public static String readString(final File file) throws IOException {
final FileReader in = new FileReader(file);
try {
- BufferedReader reader = new BufferedReader(in);
+ final BufferedReader reader = new BufferedReader(in);
return reader.readLine();
} finally {
close(in);
}
}
- public static String slurp(File file) throws IOException {
+ public static String slurp(final File file) throws IOException {
return slurp(read(file));
}
- public static String slurp(URL url) throws IOException {
+ public static String slurp(final URL url) throws IOException {
return slurp(url.openStream());
}
- public static String slurp(InputStream in) throws IOException {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ public static String slurp(final InputStream in) throws IOException {
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
copy(in, out);
return new String(out.toByteArray());
}
- public static void writeString(File file, String string) throws IOException {
+ public static void writeString(final File file, final String string) throws IOException {
final FileWriter out = new FileWriter(file);
try {
final BufferedWriter bufferedWriter = new BufferedWriter(out);
@@ -183,10 +168,10 @@
if (destDir == null) {
throw new NullPointerException("Destination must not be null");
}
- if (srcDir.exists() == false) {
+ if (!srcDir.exists()) {
throw new FileNotFoundException("Source '" + srcDir + "' does not exist");
}
- if (srcDir.isDirectory() == false) {
+ if (!srcDir.isDirectory()) {
throw new IOException("Source '" + srcDir + "' exists but is not a directory");
}
if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath())) {
@@ -196,11 +181,11 @@
// Cater for destination being directory within the source directory (see IO-141)
List<String> exclusionList = null;
if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) {
- File[] srcFiles = srcDir.listFiles();
+ final File[] srcFiles = srcDir.listFiles();
if (srcFiles != null && srcFiles.length > 0) {
exclusionList = new ArrayList<String>(srcFiles.length);
- for (File srcFile : srcFiles) {
- File copiedFile = new File(destDir, srcFile.getName());
+ for (final File srcFile : srcFiles) {
+ final File copiedFile = new File(destDir, srcFile.getName());
exclusionList.add(copiedFile.getCanonicalPath());
}
}
@@ -214,18 +199,18 @@
throw new IOException("Failed to list contents of " + srcDir);
}
if (destDir.exists()) {
- if (destDir.isDirectory() == false) {
+ if (!destDir.isDirectory()) {
throw new IOException("Destination '" + destDir + "' exists but is not a directory");
}
} else {
- if (destDir.mkdirs() == false) {
+ if (!destDir.mkdirs()) {
throw new IOException("Destination '" + destDir + "' directory cannot be created");
}
}
- if (destDir.canWrite() == false) {
+ if (!destDir.canWrite()) {
throw new IOException("Destination '" + destDir + "' cannot be written to");
}
- for (File file : files) {
+ for (final File file : files) {
final File copiedFile = new File(destDir, file.getName());
if (exclusionList == null || !exclusionList.contains(file.getCanonicalPath())) {
if (file.isDirectory()) {
@@ -237,7 +222,7 @@
}
}
- public static void copy(File from, OutputStream to) throws IOException {
+ public static void copy(final File from, final OutputStream to) throws IOException {
final InputStream read = read(from);
try {
copy(read, to);
@@ -246,7 +231,7 @@
}
}
- public static void copy(URL from, OutputStream to) throws IOException {
+ public static void copy(final URL from, final OutputStream to) throws IOException {
final InputStream read = read(from);
try {
copy(read, to);
@@ -255,7 +240,7 @@
}
}
- public static void copy(InputStream from, File to) throws IOException {
+ public static void copy(final InputStream from, final File to) throws IOException {
final OutputStream write = write(to);
try {
copy(from, write);
@@ -264,7 +249,7 @@
}
}
- public static void copy(InputStream from, File to, boolean append) throws IOException {
+ public static void copy(final InputStream from, final File to, final boolean append) throws IOException {
final OutputStream write = write(to, append);
try {
copy(from, write);
@@ -273,8 +258,8 @@
}
}
- public static void copy(InputStream from, OutputStream to) throws IOException {
- byte[] buffer = new byte[1024];
+ public static void copy(final InputStream from, final OutputStream to) throws IOException {
+ final byte[] buffer = new byte[1024];
int length;
while ((length = from.read(buffer)) != -1) {
to.write(buffer, 0, length);
@@ -282,76 +267,78 @@
to.flush();
}
- public static void copy(byte[] from, File to) throws IOException {
+ public static void copy(final byte[] from, final File to) throws IOException {
copy(new ByteArrayInputStream(from), to);
}
- public static void copy(byte[] from, OutputStream to) throws IOException {
+ public static void copy(final byte[] from, final OutputStream to) throws IOException {
copy(new ByteArrayInputStream(from), to);
}
- public static ZipOutputStream zip(File file) throws IOException {
+ public static ZipOutputStream zip(final File file) throws IOException {
final OutputStream write = write(file);
return new ZipOutputStream(write);
}
- public static ZipInputStream unzip(File file) throws IOException {
+ public static ZipInputStream unzip(final File file) throws IOException {
final InputStream read = read(file);
return new ZipInputStream(read);
}
- public static void close(Closeable closeable) {
+ public static void close(final Closeable closeable) {
if (closeable == null) return;
try {
- if (closeable instanceof Flushable) {
+ if (Flushable.class.isInstance(closeable)) {
((Flushable) closeable).flush();
}
- } catch (IOException e) {
+ } catch (Throwable e) {
+ //Ignore
}
try {
closeable.close();
- } catch (IOException e) {
+ } catch (Throwable e) {
+ //Ignore
}
}
- public static boolean delete(File file) {
+ public static boolean delete(final File file) {
if (file == null) return false;
if (!file.delete()) {
- System.err.println("Delete failed " + file.getAbsolutePath());
+ Logger.getLogger(IO.class.getName()).log(Level.WARNING, "Delete failed on: " + file.getAbsolutePath());
return false;
}
return true;
}
- public static OutputStream write(File destination) throws FileNotFoundException {
+ public static OutputStream write(final File destination) throws FileNotFoundException {
final OutputStream out = new FileOutputStream(destination);
return new BufferedOutputStream(out, 32768);
}
- public static OutputStream write(File destination, boolean append) throws FileNotFoundException {
+ public static OutputStream write(final File destination, final boolean append) throws FileNotFoundException {
final OutputStream out = new FileOutputStream(destination, append);
return new BufferedOutputStream(out, 32768);
}
- public static InputStream read(File source) throws FileNotFoundException {
+ public static InputStream read(final File source) throws FileNotFoundException {
final InputStream in = new FileInputStream(source);
return new BufferedInputStream(in, 32768);
}
- public static InputStream read(String content) {
+ public static InputStream read(final String content) {
return read(content.getBytes());
}
- public static InputStream read(String content, String encoding) throws UnsupportedEncodingException {
+ public static InputStream read(final String content, final String encoding) throws UnsupportedEncodingException {
return read(content.getBytes(encoding));
}
- public static InputStream read(byte[] content) {
+ public static InputStream read(final byte[] content) {
return new ByteArrayInputStream(content);
}
- public static InputStream read(URL url) throws IOException {
+ public static InputStream read(final URL url) throws IOException {
return url.openStream();
}
}
\ No newline at end of file
diff --git a/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java b/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
index 9be477a..7bfdeb2 100644
--- a/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
+++ b/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
@@ -71,10 +71,10 @@
public static InputStream inputStreamTryingProxies(final URI source) throws Exception {
final URL url = source.toURL();
- for (Proxy proxy : ProxySelector.getDefault().select(source)) {
+ for (final Proxy proxy : ProxySelector.getDefault().select(source)) {
// try to connect
try {
- URLConnection urlConnection = url.openConnection(proxy);
+ final URLConnection urlConnection = url.openConnection(proxy);
urlConnection.setConnectTimeout(CONNECT_TIMEOUT);
return new BufferedInputStream(urlConnection.getInputStream());
} catch (IOException e) {
@@ -92,7 +92,7 @@
return location.substring(idx + 1, location.length());
}
- public static String realLocation(String rawLocation) {
+ public static String realLocation(final String rawLocation) {
if (rawLocation.startsWith(HTTP_PREFIX)) {
final File file = cacheFile(lastPart(rawLocation));
@@ -117,7 +117,7 @@
}
public static void addAdditionalLibraries() throws IOException {
- File conf = SystemInstance.get().getConf(ADDITIONAL_LIB_CONFIG);
+ final File conf = SystemInstance.get().getConf(ADDITIONAL_LIB_CONFIG);
if (conf == null || !conf.exists()) {
return;
}
@@ -127,18 +127,18 @@
final List<String> libToCopy = new ArrayList<String>();
final String toCopy = additionalLibProperties.getProperty(JAR_KEY);
if (toCopy != null) {
- for (String lib : toCopy.split(",")) {
+ for (final String lib : toCopy.split(",")) {
libToCopy.add(realLocation(lib.trim()));
}
}
final String toExtract = additionalLibProperties.getProperty(ZIP_KEY);
if (toExtract != null) {
- for (String zip : toExtract.split(",")) {
+ for (final String zip : toExtract.split(",")) {
libToCopy.addAll(extract(realLocation(zip)));
}
}
- File destination;
+ final File destination;
if (additionalLibProperties.containsKey(DESTINATION_KEY)) {
destination = new File(additionalLibProperties.getProperty(DESTINATION_KEY));
} else {
@@ -148,7 +148,7 @@
Files.mkdirs(destination);
}
- for (String lib : libToCopy) {
+ for (final String lib : libToCopy) {
copy(new File(lib), destination);
}
}
@@ -194,7 +194,7 @@
return Collections.emptyList();
}
- for (File file : files) {
+ for (final File file : files) {
if (file.isDirectory()) {
libs.addAll(list(file));
} else {
diff --git a/container/pom.xml b/container/pom.xml
index 147546d..9455b77 100644
--- a/container/pom.xml
+++ b/container/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>container</artifactId>
diff --git a/deps/mbean-annotation-api/pom.xml b/deps/mbean-annotation-api/pom.xml
index d0c634c..ba3fb3b 100644
--- a/deps/mbean-annotation-api/pom.xml
+++ b/deps/mbean-annotation-api/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>deps</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<artifactId>mbean-annotation-api</artifactId>
<name>OpenEJB :: Dependencies :: MBean Annotation API</name>
diff --git a/deps/pom.xml b/deps/pom.xml
index 5fbe860..bc2eacf 100644
--- a/deps/pom.xml
+++ b/deps/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>deps</artifactId>
diff --git a/examples/access-timeout-meta/pom.xml b/examples/access-timeout-meta/pom.xml
index c35e95f..158c178 100644
--- a/examples/access-timeout-meta/pom.xml
+++ b/examples/access-timeout-meta/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>access-timeout-meta</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @AccessTimeout (Meta)</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/access-timeout/pom.xml b/examples/access-timeout/pom.xml
index 2a7cfa8..df63317 100644
--- a/examples/access-timeout/pom.xml
+++ b/examples/access-timeout/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>access-timeout</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @AccessTimeout</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/alternate-descriptors/pom.xml b/examples/alternate-descriptors/pom.xml
index bd41222..3cb0cd1 100644
--- a/examples/alternate-descriptors/pom.xml
+++ b/examples/alternate-descriptors/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>alternate-descriptors</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Alternate Descriptors</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/applet/pom.xml b/examples/applet/pom.xml
index 60b4092..e0f46bb 100644
--- a/examples/applet/pom.xml
+++ b/examples/applet/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz.applet</groupId>
<artifactId>applet</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: Signed Applet EJB Client</name>
<url>http://openejb.apache.org</url>
<properties>
@@ -44,7 +44,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-client</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -112,7 +112,7 @@
<artifactItem>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-client</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<outputDirectory>${project.build.directory}/${project.build.finalName}</outputDirectory>
<destFileName>openejb-client.jar</destFileName>
</artifactItem>
diff --git a/examples/application-composer/pom.xml b/examples/application-composer/pom.xml
index 317c6fb..cc43b70 100644
--- a/examples/application-composer/pom.xml
+++ b/examples/application-composer/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>application-composer</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Application Composer</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/applicationexception/pom.xml b/examples/applicationexception/pom.xml
index 8a3ad5b..4e2e84c 100644
--- a/examples/applicationexception/pom.xml
+++ b/examples/applicationexception/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>applicationexception</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @ApplicationException inheritance</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -81,7 +81,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/async-methods/pom.xml b/examples/async-methods/pom.xml
index b5a0ae2..decb905 100644
--- a/examples/async-methods/pom.xml
+++ b/examples/async-methods/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>async-methods</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @Asynchronous Methods</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/bean-validation-design-by-contract/pom.xml b/examples/bean-validation-design-by-contract/pom.xml
index b1daf5e..8199239 100755
--- a/examples/bean-validation-design-by-contract/pom.xml
+++ b/examples/bean-validation-design-by-contract/pom.xml
@@ -20,11 +20,11 @@
<groupId>org.superbiz</groupId>
<artifactId>bean-validation-design-by-contract</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Bean Validation Design By Contract</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
<build>
<defaultGoal>install</defaultGoal>
@@ -66,7 +66,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -86,4 +86,4 @@
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/cdi-alternative-and-stereotypes/pom.xml b/examples/cdi-alternative-and-stereotypes/pom.xml
index e5db994..ff0434e 100644
--- a/examples/cdi-alternative-and-stereotypes/pom.xml
+++ b/examples/cdi-alternative-and-stereotypes/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-alternative-and-stereotypes</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: CDI Stereotypes</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/cdi-application-scope/pom.xml b/examples/cdi-application-scope/pom.xml
index c54ce82..36db77f 100644
--- a/examples/cdi-application-scope/pom.xml
+++ b/examples/cdi-application-scope/pom.xml
@@ -14,7 +14,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-application-scope</artifactId>
<name>OpenEJB :: Examples :: CDI Application Scope</name>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<build>
<defaultGoal>install</defaultGoal>
@@ -53,7 +53,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/cdi-basic/pom.xml b/examples/cdi-basic/pom.xml
index 6d4aa9a..de79a92 100644
--- a/examples/cdi-basic/pom.xml
+++ b/examples/cdi-basic/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-basic</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Basic CDI</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -66,7 +66,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/cdi-ejbcontext-jaas/pom.xml b/examples/cdi-ejbcontext-jaas/pom.xml
index 772f372..61189f1 100644
--- a/examples/cdi-ejbcontext-jaas/pom.xml
+++ b/examples/cdi-ejbcontext-jaas/pom.xml
@@ -23,7 +23,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-ejbcontext-jaas</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<packaging>war</packaging>
<name>OpenEJB :: Examples :: CDI, EJBContext and JAAS</name>
@@ -31,7 +31,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -64,7 +64,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<configuration>
<systemVariables>
<java.security.auth.login.config>${project.build.directory}/apache-tomee/conf/login.config</java.security.auth.login.config>
diff --git a/examples/cdi-events/pom.xml b/examples/cdi-events/pom.xml
index 97899e1..6df5d72 100644
--- a/examples/cdi-events/pom.xml
+++ b/examples/cdi-events/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-events</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: CDI Events</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- to show events we log them in the test -->
diff --git a/examples/cdi-interceptors/pom.xml b/examples/cdi-interceptors/pom.xml
index 39a9e89..f5de090 100644
--- a/examples/cdi-interceptors/pom.xml
+++ b/examples/cdi-interceptors/pom.xml
@@ -18,7 +18,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-interceptors</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: CDI Interceptors</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -64,7 +64,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/cdi-produces-disposes/pom.xml b/examples/cdi-produces-disposes/pom.xml
index f9328e2..5c5a28a 100644
--- a/examples/cdi-produces-disposes/pom.xml
+++ b/examples/cdi-produces-disposes/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-produces-disposes</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: CDI-Disposes</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/cdi-produces-field/pom.xml b/examples/cdi-produces-field/pom.xml
index d2e4346..50d18f9 100644
--- a/examples/cdi-produces-field/pom.xml
+++ b/examples/cdi-produces-field/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-produces-field</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: CDI-Field Producer</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/cdi-query/pom.xml b/examples/cdi-query/pom.xml
deleted file mode 100644
index fa94955..0000000
--- a/examples/cdi-query/pom.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>org.superbiz</groupId>
- <artifactId>cdi-query</artifactId>
- <packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
- <name>OpenEJB :: Examples :: CDI Query</name>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0-4</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>com.mysema.querydsl</groupId>
- <artifactId>querydsl-jpa</artifactId>
- <version>2.8.0</version>
- </dependency>
- <dependency>
- <groupId>com.ctp.cdi.query</groupId>
- <artifactId>cdi-query-api</artifactId>
- <version>1.0.0.Alpha5-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>com.ctp.cdi.query</groupId>
- <artifactId>cdi-query-impl</artifactId>
- <version>1.0.0.Alpha5-SNAPSHOT</version>
- <scope>runtime</scope>
- <exclusions>
- <exclusion>
- <groupId>org.jboss.arquillian.junit</groupId>
- <artifactId>arquillian-junit-container</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.jboss.arquillian.protocol</groupId>
- <artifactId>arquillian-protocol-servlet</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
- <build>
- <defaultGoal>install</defaultGoal>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <repositories>
- <repository>
- <id>apache-m2-snapshot</id>
- <name>Apache Snapshot Repository</name>
- <url>http://repository.apache.org/snapshots</url>
- </repository>
- <repository>
- <id>ctp-consulting-m2-snapshot</id>
- <name>Ctp Consulting Snapshot Repository</name>
- <url>https://repository-ctpconsulting.forge.cloudbees.com/snapshot/</url>
- </repository>
- </repositories>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <!--
- This section allows you to configure where to publish libraries for sharing.
- It is not required and may be deleted. For more information see:
- http://maven.apache.org/plugins/maven-deploy-plugin/
- -->
- <distributionManagement>
- <repository>
- <id>localhost</id>
- <url>file://${basedir}/target/repo/</url>
- </repository>
- <snapshotRepository>
- <id>localhost</id>
- <url>file://${basedir}/target/snapshot-repo/</url>
- </snapshotRepository>
- </distributionManagement>
-</project>
-
diff --git a/examples/cdi-query/src/main/java/org/superbiz/dynamic/EntityManagerProducer.java b/examples/cdi-query/src/main/java/org/superbiz/dynamic/EntityManagerProducer.java
deleted file mode 100644
index 0fcbe12..0000000
--- a/examples/cdi-query/src/main/java/org/superbiz/dynamic/EntityManagerProducer.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.superbiz.dynamic;
-
-
-import javax.ejb.Stateless;
-import javax.enterprise.inject.Produces;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
-@Stateless
-public class EntityManagerProducer {
- @PersistenceContext
- @Produces
- private EntityManager em;
-}
diff --git a/examples/cdi-query/src/main/java/org/superbiz/dynamic/User.java b/examples/cdi-query/src/main/java/org/superbiz/dynamic/User.java
deleted file mode 100644
index e8a1428..0000000
--- a/examples/cdi-query/src/main/java/org/superbiz/dynamic/User.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.superbiz.dynamic;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-
-@Entity
-public class User {
- @Id
- @GeneratedValue
- private long id;
- private String name;
- private int age;
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-}
diff --git a/examples/cdi-query/src/main/java/org/superbiz/dynamic/UserDao.java b/examples/cdi-query/src/main/java/org/superbiz/dynamic/UserDao.java
deleted file mode 100644
index f973499..0000000
--- a/examples/cdi-query/src/main/java/org/superbiz/dynamic/UserDao.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 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.superbiz.dynamic;
-
-import com.ctp.cdi.query.Dao;
-import com.ctp.cdi.query.EntityDao;
-
-@Dao
-public interface UserDao extends EntityDao<User, Long> {
-}
diff --git a/examples/cdi-query/src/main/resources/META-INF/persistence.xml b/examples/cdi-query/src/main/resources/META-INF/persistence.xml
deleted file mode 100644
index 97d2ba5..0000000
--- a/examples/cdi-query/src/main/resources/META-INF/persistence.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<persistence version="2.0"
- xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
- <persistence-unit name="dynamic" transaction-type="JTA">
- <jta-data-source>jdbc/dynamicDB</jta-data-source>
- <class>org.superbiz.dynamic.User</class>
- <properties>
- <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
- </properties>
- </persistence-unit>
-</persistence>
diff --git a/examples/cdi-query/src/test/java/org/superbiz/dynamic/CdiQueryTest.java b/examples/cdi-query/src/test/java/org/superbiz/dynamic/CdiQueryTest.java
deleted file mode 100644
index 6fd554d..0000000
--- a/examples/cdi-query/src/test/java/org/superbiz/dynamic/CdiQueryTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.superbiz.dynamic;
-
-import java.util.Collection;
-import java.util.Properties;
-import javax.ejb.Lock;
-import javax.ejb.LockType;
-import javax.ejb.Singleton;
-import javax.ejb.embeddable.EJBContainer;
-import javax.inject.Inject;
-import javax.naming.NamingException;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import static junit.framework.Assert.assertEquals;
-
-/**
- * the UserDao can be injected but doesn't manage transaction so we create
- * a TxProvider bean which provides the tx context.
- *
- * In this sample it simply delegates but in real life it often aggregates multiple calls.
- */
-public class CdiQueryTest {
- private static EJBContainer container;
- private static boolean initialized = false;
-
- @Inject
- private TxProvider dao;
-
- @Test
- public void findAll() {
- Collection<User> users = dao.findAll();
- assertEquals(10, users.size());
- }
-
- @BeforeClass
- public static void start() throws Exception {
- final Properties p = new Properties();
-
- p.setProperty("jdbc/CdiQueryTest", "new://Resource?type=DataSource");
- p.setProperty("jdbc/CdiQueryTest.JdbcDriver", "org.hsqldb.jdbcDriver");
- p.setProperty("jdbc/CdiQueryTest.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
- p.setProperty("jdbc/CdiQueryTest.UserName", "sa");
- p.setProperty("jdbc/CdiQueryTest.Password", "");
-
- container = EJBContainer.createEJBContainer(p);
- }
-
- @Before
- public void injectAndInit() throws NamingException {
- container.getContext().bind("inject", this);
- if (!initialized) {
- for (int i = 0; i < 10; i++) {
- final User u = new User();
- u.setAge(i % 4);
- if (i % 3 == 0) {
- u.setName("foo");
- } else {
- u.setName("bar-" + i);
- }
- dao.save(u);
- }
- initialized = true;
- }
- }
-
- @AfterClass
- public static void close() {
- container.close();
- }
-
- @Singleton
- @Lock(LockType.READ)
- public static class TxProvider { // just here to provide the transactional context
- @Inject
- private UserDao dao;
-
- public Collection<User> findAll() {
- return dao.findAll();
- }
-
- public void save(final User u) {
- dao.save(u);
- }
- }
-}
diff --git a/examples/cdi-realm/pom.xml b/examples/cdi-realm/pom.xml
index 591e5f7..565aaa2 100644
--- a/examples/cdi-realm/pom.xml
+++ b/examples/cdi-realm/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-realm</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: CDI Realm</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -50,7 +50,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</plugin>
</plugins>
</build>
diff --git a/examples/cdi-request-scope/pom.xml b/examples/cdi-request-scope/pom.xml
index d55d08e..3768c72 100644
--- a/examples/cdi-request-scope/pom.xml
+++ b/examples/cdi-request-scope/pom.xml
@@ -14,7 +14,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-request-scope</artifactId>
<name>OpenEJB :: Examples :: CDI Request Scope</name>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<build>
<defaultGoal>install</defaultGoal>
@@ -53,7 +53,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/cdi-session-scope/pom.xml b/examples/cdi-session-scope/pom.xml
index 5845907..aacc393 100644
--- a/examples/cdi-session-scope/pom.xml
+++ b/examples/cdi-session-scope/pom.xml
@@ -15,7 +15,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cdi-session-scope</artifactId>
<name>OpenEJB :: Examples :: CDI Session Scope</name>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<packaging>war</packaging>
<properties>
@@ -45,7 +45,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</plugin>
</plugins>
</build>
diff --git a/examples/change-jaxws-url/pom.xml b/examples/change-jaxws-url/pom.xml
index db84fef..4d7cb34 100644
--- a/examples/change-jaxws-url/pom.xml
+++ b/examples/change-jaxws-url/pom.xml
@@ -21,12 +21,12 @@
<groupId>org.superbiz</groupId>
<artifactId>change-jaxws-url</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: Change JAXWS URL</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
+ <openejb.version>4.5.1</openejb.version>
+ <tomee.version>1.5.1</tomee.version>
</properties>
<repositories>
<repository>
@@ -71,7 +71,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<configuration>
<tomeeVersion>${tomee.version}</tomeeVersion>
<tomeeClassifier>plus</tomeeClassifier>
@@ -80,7 +80,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-embedded-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
diff --git a/examples/client-resource-lookup-preview/pom.xml b/examples/client-resource-lookup-preview/pom.xml
index 9054351..bc9d517 100644
--- a/examples/client-resource-lookup-preview/pom.xml
+++ b/examples/client-resource-lookup-preview/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.superbiz</groupId>
<artifactId>client-resource-lookup-preview</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Client Resource Lookup</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -59,13 +59,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-client</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-ejbd</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
@@ -84,7 +84,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -103,4 +103,4 @@
</snapshotRepository>
</distributionManagement>
- </project>
\ No newline at end of file
+ </project>
diff --git a/examples/component-interfaces/pom.xml b/examples/component-interfaces/pom.xml
index 745c22e..bea8a43 100644
--- a/examples/component-interfaces/pom.xml
+++ b/examples/component-interfaces/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>component-interfaces</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: EJB 2.1 Component Interfaces</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -78,7 +78,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/cucumber-jvm/pom.xml b/examples/cucumber-jvm/pom.xml
index d615bd09..eec7d7d 100644
--- a/examples/cucumber-jvm/pom.xml
+++ b/examples/cucumber-jvm/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>cucumber-jvm</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Cucumber JVM</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -66,7 +66,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/examples/custom-injection/pom.xml b/examples/custom-injection/pom.xml
index 6993c3a..1350bb0 100644
--- a/examples/custom-injection/pom.xml
+++ b/examples/custom-injection/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>custom-injection</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Expanded support for Env Entries</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/datasource-ciphered-password/pom.xml b/examples/datasource-ciphered-password/pom.xml
index 3d3ab06..a50be9e 100644
--- a/examples/datasource-ciphered-password/pom.xml
+++ b/examples/datasource-ciphered-password/pom.xml
@@ -20,11 +20,11 @@
<groupId>org.superbiz</groupId>
<artifactId>datasource-ciphered-password</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Datasource Ciphered Password</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
<build>
<defaultGoal>install</defaultGoal>
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/datasource-definition/pom.xml b/examples/datasource-definition/pom.xml
index fc560b4..080c88d 100644
--- a/examples/datasource-definition/pom.xml
+++ b/examples/datasource-definition/pom.xml
@@ -20,11 +20,11 @@
<groupId>org.superbiz</groupId>
<artifactId>datasource-definition</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Datasource Definition</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
<build>
<defaultGoal>install</defaultGoal>
@@ -116,7 +116,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/decorators/pom.xml b/examples/decorators/pom.xml
index 5c0e697..7048363 100644
--- a/examples/decorators/pom.xml
+++ b/examples/decorators/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>decorators</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Decorators</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/deltaspike-configproperty/pom.xml b/examples/deltaspike-configproperty/pom.xml
index ae828ba..7a5771e 100644
--- a/examples/deltaspike-configproperty/pom.xml
+++ b/examples/deltaspike-configproperty/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>deltaspike-configproperty</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: DeltaSpike @ConfigProperty</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -76,13 +76,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/deltaspike-exception-handling/pom.xml b/examples/deltaspike-exception-handling/pom.xml
index 63cb290..4acafc0 100644
--- a/examples/deltaspike-exception-handling/pom.xml
+++ b/examples/deltaspike-exception-handling/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>deltaspike-exception-handling</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: DeltaSpike Exception Handling</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -76,13 +76,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/deltaspike-i18n/pom.xml b/examples/deltaspike-i18n/pom.xml
index 093b4ba..8fcd02b 100644
--- a/examples/deltaspike-i18n/pom.xml
+++ b/examples/deltaspike-i18n/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>deltaspike-i18n</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: DeltaSpike I18n</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -76,13 +76,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/dynamic-dao-implementation/pom.xml b/examples/dynamic-dao-implementation/pom.xml
index 991a1b6..0a621ce 100644
--- a/examples/dynamic-dao-implementation/pom.xml
+++ b/examples/dynamic-dao-implementation/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.superbiz</groupId>
<artifactId>dynamic-dao-implementation</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Dynamic DAO Implementation</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -68,7 +68,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/dynamic-datasource-routing/pom.xml b/examples/dynamic-datasource-routing/pom.xml
index 64017a2..037785b 100755
--- a/examples/dynamic-datasource-routing/pom.xml
+++ b/examples/dynamic-datasource-routing/pom.xml
@@ -20,11 +20,11 @@
<groupId>org.superbiz</groupId>
<artifactId>dynamic-datasource-routing</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Dynamic Datasource Routing</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
<build>
<defaultGoal>install</defaultGoal>
@@ -66,7 +66,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
</dependencies>
<!--
@@ -84,4 +84,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/dynamic-implementation/pom.xml b/examples/dynamic-implementation/pom.xml
index 3d69bbc..ea7400a 100644
--- a/examples/dynamic-implementation/pom.xml
+++ b/examples/dynamic-implementation/pom.xml
@@ -20,7 +20,7 @@
<groupId>org.superbiz</groupId>
<artifactId>dynamic-implementation</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Dynamic Implementation</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -56,7 +56,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-api</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
@@ -72,7 +72,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/dynamic-proxy-to-access-mbean/pom.xml b/examples/dynamic-proxy-to-access-mbean/pom.xml
index e8569c4..5c932cb 100644
--- a/examples/dynamic-proxy-to-access-mbean/pom.xml
+++ b/examples/dynamic-proxy-to-access-mbean/pom.xml
@@ -20,7 +20,7 @@
<groupId>org.superbiz</groupId>
<artifactId>dynamic-proxy-to-access-mbean</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Dynamic MBean Proxy</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -64,7 +64,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-api</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -81,7 +81,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/ear-testing/README.md b/examples/ear-testing/README.md
index 3c5e277..80d6566 100644
--- a/examples/ear-testing/README.md
+++ b/examples/ear-testing/README.md
@@ -33,7 +33,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.superbiz</groupId>
<artifactId>myear</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
@@ -64,7 +64,7 @@
<parent>
<groupId>org.superbiz</groupId>
<artifactId>myear</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -94,7 +94,7 @@
<parent>
<groupId>org.superbiz</groupId>
<artifactId>myear</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/examples/ear-testing/business-logic/pom.xml b/examples/ear-testing/business-logic/pom.xml
index 08d18e8..3adaa57 100644
--- a/examples/ear-testing/business-logic/pom.xml
+++ b/examples/ear-testing/business-logic/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.superbiz</groupId>
<artifactId>myear</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>business-logic</artifactId>
@@ -77,8 +77,8 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/ear-testing/business-model/pom.xml b/examples/ear-testing/business-model/pom.xml
index 26b974c..03bc8b1 100644
--- a/examples/ear-testing/business-model/pom.xml
+++ b/examples/ear-testing/business-model/pom.xml
@@ -23,7 +23,7 @@
<parent>
<groupId>org.superbiz</groupId>
<artifactId>myear</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>business-model</artifactId>
diff --git a/examples/ear-testing/pom.xml b/examples/ear-testing/pom.xml
index 439353b..27d7e7b 100644
--- a/examples/ear-testing/pom.xml
+++ b/examples/ear-testing/pom.xml
@@ -24,7 +24,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.superbiz</groupId>
<artifactId>myear</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<packaging>pom</packaging>
<name>OpenEJB :: Examples :: Ear Testing</name>
<modules>
diff --git a/examples/ejb-examples/pom.xml b/examples/ejb-examples/pom.xml
index 01df04c..f209bd3 100644
--- a/examples/ejb-examples/pom.xml
+++ b/examples/ejb-examples/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>ejb-examples</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: EJB Examples War</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -65,7 +65,7 @@
<webappArtifact>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-tomcat-webapp</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<contextPath>openejb</contextPath>
</webappArtifact>
</webapps>
@@ -102,4 +102,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/ejb-examples/src/main/webapp/META-INF/context.xml b/examples/ejb-examples/src/main/webapp/META-INF/context.xml
index bfe42c1..a9093bc 100644
--- a/examples/ejb-examples/src/main/webapp/META-INF/context.xml
+++ b/examples/ejb-examples/src/main/webapp/META-INF/context.xml
@@ -22,7 +22,7 @@
<Context>
<!-- This only works if the context is installed under the correct name -->
<Realm className="org.apache.catalina.realm.MemoryRealm"
- pathname="webapps/ejb-examples-1.0-SNAPSHOT/WEB-INF/tomcat-users.xml"/>
+ pathname="webapps/ejb-examples-1.0/WEB-INF/tomcat-users.xml"/>
<Environment
name="context.xml/environment"
diff --git a/examples/ejb-webservice/pom.xml b/examples/ejb-webservice/pom.xml
index 58300db..623e4e6 100644
--- a/examples/ejb-webservice/pom.xml
+++ b/examples/ejb-webservice/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>ejb-webservice</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: EJB WebService</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -84,4 +84,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/groovy-cdi/pom.xml b/examples/groovy-cdi/pom.xml
index c8b3e2c..8e0aeec 100644
--- a/examples/groovy-cdi/pom.xml
+++ b/examples/groovy-cdi/pom.xml
@@ -23,7 +23,7 @@
<groupId>org.superbiz</groupId>
<artifactId>groovy-cdi</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Groovy CDI</name>
<properties>
@@ -84,13 +84,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/groovy-jpa/pom.xml b/examples/groovy-jpa/pom.xml
index ac48269..413458f 100644
--- a/examples/groovy-jpa/pom.xml
+++ b/examples/groovy-jpa/pom.xml
@@ -23,7 +23,7 @@
<groupId>org.superbiz</groupId>
<artifactId>groovy-jpa</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Groovy JPA</name>
<properties>
@@ -86,13 +86,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/groovy-spock/pom.xml b/examples/groovy-spock/pom.xml
index 9fda31b..e81ed6c 100644
--- a/examples/groovy-spock/pom.xml
+++ b/examples/groovy-spock/pom.xml
@@ -23,7 +23,7 @@
<groupId>org.superbiz</groupId>
<artifactId>groovy-spock</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Groovy Spock</name>
<properties>
@@ -94,13 +94,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/examples/helloworld-weblogic/pom.xml b/examples/helloworld-weblogic/pom.xml
index fc5ce01..88879de 100644
--- a/examples/helloworld-weblogic/pom.xml
+++ b/examples/helloworld-weblogic/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>helloworld-weblogic</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Hello World - Weblogic</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/injection-of-connectionfactory/pom.xml b/examples/injection-of-connectionfactory/pom.xml
index 690ac4e..6d433dd 100644
--- a/examples/injection-of-connectionfactory/pom.xml
+++ b/examples/injection-of-connectionfactory/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>injection-of-connectionfactory</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @Resource javax.jms.ConnectionFactory</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/injection-of-datasource/pom.xml b/examples/injection-of-datasource/pom.xml
index 226449d..c0690f5 100644
--- a/examples/injection-of-datasource/pom.xml
+++ b/examples/injection-of-datasource/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>injection-of-datasource</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @Resource DataSource Injection</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/injection-of-ejbs/pom.xml b/examples/injection-of-ejbs/pom.xml
index f03fb7d..bf377e4 100644
--- a/examples/injection-of-ejbs/pom.xml
+++ b/examples/injection-of-ejbs/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>injection-of-ejbs</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @EJB Injection</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/injection-of-entitymanager/pom.xml b/examples/injection-of-entitymanager/pom.xml
index 78bd719..3646fed 100644
--- a/examples/injection-of-entitymanager/pom.xml
+++ b/examples/injection-of-entitymanager/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>injection-of-entitymanager</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @PersistenceContext EntityManager Injection</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/injection-of-env-entry/pom.xml b/examples/injection-of-env-entry/pom.xml
index faa2bf7..b037bce 100644
--- a/examples/injection-of-env-entry/pom.xml
+++ b/examples/injection-of-env-entry/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>injection-of-env-entry</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @Resource env-entry Injection</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/interceptors/pom.xml b/examples/interceptors/pom.xml
index 2197b94..05bcc0e 100644
--- a/examples/interceptors/pom.xml
+++ b/examples/interceptors/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>interceptors</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Interceptors</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/jpa-eclipselink/pom.xml b/examples/jpa-eclipselink/pom.xml
index 749695c..3fb2f69 100644
--- a/examples/jpa-eclipselink/pom.xml
+++ b/examples/jpa-eclipselink/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>jpa-eclipselink</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: JPA with EclipseLink</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -73,7 +73,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- toplink dependencies -->
@@ -99,4 +99,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/jpa-enumerated/pom.xml b/examples/jpa-enumerated/pom.xml
index ec7533e..dd8b10b 100644
--- a/examples/jpa-enumerated/pom.xml
+++ b/examples/jpa-enumerated/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>jpa-enumerated</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: JPA @Enumerated</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/jpa-hibernate/pom.xml b/examples/jpa-hibernate/pom.xml
index 4cf5592..0ea4883 100644
--- a/examples/jpa-hibernate/pom.xml
+++ b/examples/jpa-hibernate/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>jpa-hibernate</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: JPA with Hibernate</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -81,7 +81,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core-hibernate</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<type>pom</type>
<scope>test</scope>
</dependency>
@@ -101,4 +101,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/jsf-cdi-and-ejb/pom.xml b/examples/jsf-cdi-and-ejb/pom.xml
index e8185ad..9c948cc 100644
--- a/examples/jsf-cdi-and-ejb/pom.xml
+++ b/examples/jsf-cdi-and-ejb/pom.xml
@@ -23,7 +23,7 @@
<artifactId>jsf-cdi-and-ejb</artifactId>
<packaging>war</packaging>
<name>OpenEJB :: Web Examples :: JSF - CDI and EJB</name>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<url>http://openejb.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -129,4 +129,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/jsf-managedBean-and-ejb/pom.xml b/examples/jsf-managedBean-and-ejb/pom.xml
index f66bf89..6a9d22b 100644
--- a/examples/jsf-managedBean-and-ejb/pom.xml
+++ b/examples/jsf-managedBean-and-ejb/pom.xml
@@ -23,7 +23,7 @@
<artifactId>jsf-managedBean-and-ejb</artifactId>
<packaging>war</packaging>
<name>OpenEJB :: Web Examples :: JSF - ManangedBean and EJB</name>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<url>http://openejb.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -43,7 +43,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</plugin>
</plugins>
</build>
diff --git a/examples/lookup-of-ejbs-with-descriptor/pom.xml b/examples/lookup-of-ejbs-with-descriptor/pom.xml
index 6b97dd3..00fcb16 100644
--- a/examples/lookup-of-ejbs-with-descriptor/pom.xml
+++ b/examples/lookup-of-ejbs-with-descriptor/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>lookup-of-ejbs-with-descriptor</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: EJB Lookup with descriptor</name>
<properties>
<!--
@@ -74,7 +74,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/lookup-of-ejbs/pom.xml b/examples/lookup-of-ejbs/pom.xml
index ed55f39..b7b83e1 100644
--- a/examples/lookup-of-ejbs/pom.xml
+++ b/examples/lookup-of-ejbs/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>lookup-of-ejbs</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @EJB Lookup</name>
<properties>
<!--
@@ -74,7 +74,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/mbean-auto-registration/pom.xml b/examples/mbean-auto-registration/pom.xml
index af71361..d566c24 100755
--- a/examples/mbean-auto-registration/pom.xml
+++ b/examples/mbean-auto-registration/pom.xml
@@ -20,11 +20,11 @@
<groupId>org.superbiz</groupId>
<artifactId>mbean-auto-registration</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: MBean Auto Registration</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
<build>
<defaultGoal>install</defaultGoal>
@@ -57,7 +57,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>mbean-annotation-api</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -72,7 +72,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/moviefun-old/README.md b/examples/moviefun-old/README.md
deleted file mode 100644
index 2bcb5f6..0000000
--- a/examples/moviefun-old/README.md
+++ /dev/null
@@ -1,1216 +0,0 @@
-Title: Moviefun
-
-*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*
-
- /**
- * 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.superbiz.moviefun;
-
- import javax.ejb.EJB;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.ListIterator;
-
- /**
- * @version $Revision$ $Date$
- */
- public class ActionServlet extends HttpServlet {
-
- @EJB(name = "movies")
- private Movies moviesBean;
-
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
-
- private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- HttpSession session = request.getSession();
-
- List<Movie> movies = null;
- ListIterator<Movie> listIterator = null;
- int display = 5;
-
- String action = request.getParameter("action");
-
-
- if ("Add".equals(action)) {
-
- String title = request.getParameter("title");
- String director = request.getParameter("director");
- String genre = request.getParameter("genre");
- int rating = Integer.parseInt(request.getParameter("rating"));
- int year = Integer.parseInt(request.getParameter("year"));
-
- Movie movie = new Movie(title, director, genre, rating, year);
-
- moviesBean.addMovie(movie);
-
- } else if ("Remove".equals(action)) {
-
- String[] ids = request.getParameterValues("id");
- for (String id : ids) {
- moviesBean.deleteMovieId(new Long(id));
- }
-
- } else if (">>".equals(action)) {
-
- movies = (List) session.getAttribute("movies.collection");
- listIterator = (ListIterator) session.getAttribute("movies.iterator");
-
- } else if ("<<".equals(action)) {
-
- movies = (List) session.getAttribute("movies.collection");
- listIterator = (ListIterator) session.getAttribute("movies.iterator");
- for (int i = display * 2; i > 0 && listIterator.hasPrevious(); i--) {
- listIterator.previous(); // backup
- }
-
- } else if ("findByTitle".equals(action)) {
-
- movies = moviesBean.findByTitle(request.getParameter("key"));
-
- } else if ("findByDirector".equals(action)) {
-
- movies = moviesBean.findByDirector(request.getParameter("key"));
-
- } else if ("findByGenre".equals(action)) {
-
- movies = moviesBean.findByGenre(request.getParameter("key"));
- }
-
- if (movies == null) {
- try {
- movies = moviesBean.getMovies();
- } catch (Throwable e) {
- // We must not have run setup yet
- response.sendRedirect("setup.jsp");
- return;
- }
- }
-
- if (listIterator == null) {
- listIterator = movies.listIterator();
- }
-
- session.setAttribute("movies.collection", movies);
- session.setAttribute("movies.iterator", listIterator);
-
- List<Movie> moviesToShow = new ArrayList<Movie>();
-
- boolean hasPrevious = listIterator.hasPrevious();
-
- int start = listIterator.nextIndex();
-
- for (int i=display; i > 0 && listIterator.hasNext(); i-- ) {
- Movie movie = (Movie) listIterator.next();
- moviesToShow.add(movie);
- }
-
- boolean hasNext = listIterator.hasNext();
-
- int end = listIterator.nextIndex();
- request.setAttribute("movies", moviesToShow);
- request.setAttribute("start", start);
- request.setAttribute("end", end);
- request.setAttribute("total", movies.size());
- request.setAttribute("display", display);
- request.setAttribute("hasNext", hasNext);
- request.setAttribute("hasPrev", hasPrevious);
-
- request.getRequestDispatcher("WEB-INF/moviefun.jsp").forward(request, response);
- }
-
- }
- /**
- * 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.superbiz.moviefun;
-
- import org.superbiz.moviefun.util.JsfUtil;
- import org.superbiz.moviefun.util.PaginationHelper;
-
- import javax.ejb.EJB;
- import javax.faces.bean.ManagedBean;
- import javax.faces.bean.SessionScoped;
- import javax.faces.component.UIComponent;
- import javax.faces.context.FacesContext;
- import javax.faces.convert.Converter;
- import javax.faces.convert.FacesConverter;
- import javax.faces.model.DataModel;
- import javax.faces.model.ListDataModel;
- import javax.faces.model.SelectItem;
- import java.io.Serializable;
- import java.util.ResourceBundle;
-
- @ManagedBean(name = "movieController")
- @SessionScoped
- public class MovieController implements Serializable {
-
-
- private Movie current;
- private DataModel items = null;
- @EJB
- private MoviesImpl ejbFacade;
- private PaginationHelper pagination;
- private int selectedItemIndex;
-
- public MovieController() {
- }
-
- public Movie getSelected() {
- if (current == null) {
- current = new Movie();
- selectedItemIndex = -1;
- }
- return current;
- }
-
- private MoviesImpl getFacade() {
- return ejbFacade;
- }
-
- public PaginationHelper getPagination() {
- if (pagination == null) {
- pagination = new PaginationHelper(10) {
-
- @Override
- public int getItemsCount() {
- return getFacade().count();
- }
-
- @Override
- public DataModel createPageDataModel() {
- return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()}));
- }
- };
- }
- return pagination;
- }
-
- public String prepareList() {
- recreateModel();
- return "List";
- }
-
- public String prepareView() {
- current = (Movie) getItems().getRowData();
- selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
- return "View";
- }
-
- public String prepareCreate() {
- current = new Movie();
- selectedItemIndex = -1;
- return "Create";
- }
-
- public String create() {
- try {
- getFacade().addMovie(current);
- JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("MovieCreated"));
- return prepareCreate();
- } catch (Exception e) {
- JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
- return null;
- }
- }
-
- public String prepareEdit() {
- current = (Movie) getItems().getRowData();
- selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
- return "Edit";
- }
-
- public String update() {
- try {
- getFacade().editMovie(current);
- JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("MovieUpdated"));
- return "View";
- } catch (Exception e) {
- JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
- return null;
- }
- }
-
- public String destroy() {
- current = (Movie) getItems().getRowData();
- selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
- performDestroy();
- recreateModel();
- return "List";
- }
-
- public String destroyAndView() {
- performDestroy();
- recreateModel();
- updateCurrentItem();
- if (selectedItemIndex >= 0) {
- return "View";
- } else {
- // all items were removed - go back to list
- recreateModel();
- return "List";
- }
- }
-
- private void performDestroy() {
- try {
- getFacade().deleteMovieId(current.getId());
- JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("MovieDeleted"));
- } catch (Exception e) {
- JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
- }
- }
-
- private void updateCurrentItem() {
- int count = getFacade().count();
- if (selectedItemIndex >= count) {
- // selected index cannot be bigger than number of items:
- selectedItemIndex = count - 1;
- // go to previous page if last page disappeared:
- if (pagination.getPageFirstItem() >= count) {
- pagination.previousPage();
- }
- }
- if (selectedItemIndex >= 0) {
- current = getFacade().findRange(new int[]{selectedItemIndex, selectedItemIndex + 1}).get(0);
- }
- }
-
- public DataModel getItems() {
- if (items == null) {
- items = getPagination().createPageDataModel();
- }
- return items;
- }
-
- private void recreateModel() {
- items = null;
- }
-
- public String next() {
- getPagination().nextPage();
- recreateModel();
- return "List";
- }
-
- public String previous() {
- getPagination().previousPage();
- recreateModel();
- return "List";
- }
-
- public SelectItem[] getItemsAvailableSelectMany() {
- return JsfUtil.getSelectItems(ejbFacade.getMovies(), false);
- }
-
- public SelectItem[] getItemsAvailableSelectOne() {
- return JsfUtil.getSelectItems(ejbFacade.getMovies(), true);
- }
-
- @FacesConverter(forClass = Movie.class)
- public static class MovieControllerConverter implements Converter {
-
- public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
- if (value == null || value.length() == 0) {
- return null;
- }
- MovieController controller = (MovieController) facesContext.getApplication().getELResolver().
- getValue(facesContext.getELContext(), null, "movieController");
- return controller.ejbFacade.find(getKey(value));
- }
-
- long getKey(String value) {
- long key;
- key = Long.parseLong(value);
- return key;
- }
-
- String getStringKey(long value) {
- StringBuffer sb = new StringBuffer();
- sb.append(value);
- return sb.toString();
- }
-
- public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
- if (object == null) {
- return null;
- }
- if (object instanceof Movie) {
- Movie o = (Movie) object;
- return getStringKey(o.getId());
- } else {
- throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + MovieController.class.getName());
- }
- }
-
- }
-
- }
- /**
- * 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.superbiz.moviefun;
-
- import javax.ejb.EJB;
- import javax.ejb.LocalBean;
- import javax.ejb.Stateless;
- import javax.jws.WebService;
- import javax.persistence.EntityManager;
- import javax.persistence.PersistenceContext;
- import javax.persistence.TypedQuery;
- import javax.persistence.criteria.CriteriaBuilder;
- import javax.persistence.criteria.CriteriaQuery;
- import javax.persistence.criteria.Path;
- import javax.persistence.criteria.Predicate;
- import javax.persistence.criteria.Root;
- import javax.persistence.metamodel.EntityType;
- import java.util.List;
-
- @LocalBean
- @Stateless(name = "Movies")
- @WebService(portName = "MoviesPort",
- serviceName = "MoviesWebService",
- targetNamespace = "http://superbiz.org/wsdl")
- public class MoviesImpl implements Movies, MoviesRemote {
-
- @EJB
- private Notifier notifier;
-
- @PersistenceContext(unitName = "movie-unit")
- private EntityManager entityManager;
-
- @Override
- public Movie find(Long id) {
- return entityManager.find(Movie.class, id);
- }
-
- @Override
- public void addMovie(Movie movie) {
- entityManager.persist(movie);
- }
-
- @Override
- public void editMovie(Movie movie) {
- entityManager.merge(movie);
- }
-
- @Override
- public void deleteMovie(Movie movie) {
- entityManager.remove(movie);
- notifier.notify("Deleted Movie \"" + movie.getTitle() + "\" (" + movie.getYear() + ")");
- }
-
- @Override
- public void deleteMovieId(long id) {
- Movie movie = entityManager.find(Movie.class, id);
- deleteMovie(movie);
- }
-
- @Override
- public List<Movie> getMovies() {
- CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
- cq.select(cq.from(Movie.class));
- return entityManager.createQuery(cq).getResultList();
- }
-
- @Override
- public List<Movie> findByTitle(String title) {
- return findByStringField("title", title);
- }
-
- @Override
- public List<Movie> findByGenre(String genre) {
- return findByStringField("genre", genre);
- }
-
- @Override
- public List<Movie> findByDirector(String director) {
- return findByStringField("director", director);
- }
-
- private List<Movie> findByStringField(String fieldname, String param) {
- CriteriaBuilder builder = entityManager.getCriteriaBuilder();
- CriteriaQuery<Movie> query = builder.createQuery(Movie.class);
- Root<Movie> root = query.from(Movie.class);
- EntityType<Movie> type = entityManager.getMetamodel().entity(Movie.class);
-
- Path<String> path = root.get(type.getDeclaredSingularAttribute(fieldname, String.class));
- Predicate condition = builder.like(path, "%" + param + "%");
-
- query.where(condition);
-
- return entityManager.createQuery(query).getResultList();
- }
-
- @Override
- public List<Movie> findRange(int[] range) {
- CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
- cq.select(cq.from(Movie.class));
- TypedQuery<Movie> q = entityManager.createQuery(cq);
- q.setMaxResults(range[1] - range[0]);
- q.setFirstResult(range[0]);
- return q.getResultList();
- }
-
- @Override
- public int count() {
- CriteriaQuery<Long> cq = entityManager.getCriteriaBuilder().createQuery(Long.class);
- Root<Movie> rt = cq.from(Movie.class);
- cq.select(entityManager.getCriteriaBuilder().count(rt));
- TypedQuery<Long> q = entityManager.createQuery(cq);
- return (q.getSingleResult()).intValue();
- }
-
- }/**
- * 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.superbiz.moviefun;
-
- /**
- * @version $Revision$ $Date$
- */
- public interface Notifier {
- void notify(String message);
- }
- /**
- * 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.superbiz.moviefun;
-
- import javax.annotation.Resource;
- import javax.ejb.Stateless;
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- import javax.jms.DeliveryMode;
- import javax.jms.JMSException;
- import javax.jms.MessageProducer;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import javax.jms.Topic;
-
- @Stateless
- public class NotifierImpl implements Notifier {
-
- @Resource
- private ConnectionFactory connectionFactory;
-
- @Resource(name = "notifications")
- private Topic notificationsTopic;
-
- public void notify(String message) {
- try {
- Connection connection = null;
- Session session = null;
-
- try {
- connection = connectionFactory.createConnection();
- connection.start();
-
- // Create a Session
- session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- // Create a MessageProducer from the Session to the Topic or Queue
- MessageProducer producer = session.createProducer(notificationsTopic);
- producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
-
- // Create a message
- TextMessage textMessage = session.createTextMessage(message);
-
- // Tell the producer to send the message
- producer.send(textMessage);
- } finally {
- // Clean up
- if (session != null) session.close();
- if (connection != null) connection.close();
- }
- } catch (JMSException e) {
- throw new IllegalStateException(e);
- }
-
- }
-
- }
- /**
- * 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.superbiz.moviefun.util;
-
- import javax.faces.application.FacesMessage;
- import javax.faces.component.UIComponent;
- import javax.faces.context.FacesContext;
- import javax.faces.convert.Converter;
- import javax.faces.model.SelectItem;
- import java.util.List;
-
- public class JsfUtil {
-
- public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {
- int size = selectOne ? entities.size() + 1 : entities.size();
- SelectItem[] items = new SelectItem[size];
- int i = 0;
- if (selectOne) {
- items[0] = new SelectItem("", "---");
- i++;
- }
- for (Object x : entities) {
- items[i++] = new SelectItem(x, x.toString());
- }
- return items;
- }
-
- public static void addErrorMessage(Exception ex, String defaultMsg) {
- String msg = ex.getLocalizedMessage();
- if (msg != null && msg.length() > 0) {
- addErrorMessage(msg);
- } else {
- addErrorMessage(defaultMsg);
- }
- }
-
- public static void addErrorMessages(List<String> messages) {
- for (String message : messages) {
- addErrorMessage(message);
- }
- }
-
- public static void addErrorMessage(String msg) {
- FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
- FacesContext.getCurrentInstance().addMessage(null, facesMsg);
- }
-
- public static void addSuccessMessage(String msg) {
- FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
- FacesContext.getCurrentInstance().addMessage("successInfo", facesMsg);
- }
-
- public static String getRequestParameter(String key) {
- return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key);
- }
-
- public static Object getObjectFromRequestParameter(String requestParameterName, Converter converter, UIComponent component) {
- String theId = JsfUtil.getRequestParameter(requestParameterName);
- return converter.getAsObject(FacesContext.getCurrentInstance(), component, theId);
- }
-
- }/**
- * 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.superbiz.moviefun.util;
-
- import javax.faces.model.DataModel;
-
- public abstract class PaginationHelper {
-
- private int pageSize;
- private int page;
-
- public PaginationHelper(int pageSize) {
- this.pageSize = pageSize;
- }
-
- public abstract int getItemsCount();
-
- public abstract DataModel createPageDataModel();
-
- public int getPageFirstItem() {
- return page * pageSize;
- }
-
- public int getPageLastItem() {
- int i = getPageFirstItem() + pageSize - 1;
- int count = getItemsCount() - 1;
- if (i > count) {
- i = count;
- }
- if (i < 0) {
- i = 0;
- }
- return i;
- }
-
- public boolean isHasNextPage() {
- return (page + 1) * pageSize + 1 <= getItemsCount();
- }
-
- public void nextPage() {
- if (isHasNextPage()) {
- page++;
- }
- }
-
- public boolean isHasPreviousPage() {
- return page > 0;
- }
-
- public void previousPage() {
- if (isHasPreviousPage()) {
- page--;
- }
- }
-
- public int getPageSize() {
- return pageSize;
- }
-
- }
- /**
- * 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.superbiz.moviefun;
-
- import com.gargoylesoftware.htmlunit.WebClient;
- import com.gargoylesoftware.htmlunit.html.DomNodeList;
- import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
- import com.gargoylesoftware.htmlunit.html.HtmlElement;
- import com.gargoylesoftware.htmlunit.html.HtmlPage;
- import org.junit.Test;
-
- import java.util.Iterator;
-
- import static org.junit.Assert.assertTrue;
-
- public class MoviesIT {
-
- @Test
- public void testShouldMakeSureWebappIsWorking() throws Exception {
- WebClient webClient = new WebClient();
- HtmlPage page = webClient.getPage("http://localhost:9999/moviefun/setup.jsp");
-
- assertMoviesPresent(page);
-
- page = webClient.getPage("http://localhost:9999/moviefun/faces/movie/List.xhtml");
-
- assertMoviesPresent(page);
- webClient.closeAllWindows();
- }
-
- private void assertMoviesPresent(HtmlPage page) {
- String pageAsText = page.asText();
- assertTrue(pageAsText.contains("Wedding Crashers"));
- assertTrue(pageAsText.contains("Starsky & Hutch"));
- assertTrue(pageAsText.contains("Shanghai Knights"));
- assertTrue(pageAsText.contains("I-Spy"));
- assertTrue(pageAsText.contains("The Royal Tenenbaums"));
- assertTrue(pageAsText.contains("Zoolander"));
- assertTrue(pageAsText.contains("Shanghai Noon"));
- }
-
- private void clickOnLink(HtmlPage page, String lookFor) throws Exception {
- DomNodeList<HtmlElement> links = page.getElementsByTagName("a");
- Iterator<HtmlElement> iterator = links.iterator();
- while (iterator.hasNext()) {
- HtmlAnchor anchor = (HtmlAnchor) iterator.next();
-
- if (lookFor.equals(anchor.getTextContent())) {
- anchor.click();
- break;
- }
- }
- }
-
- }
- /**
- * 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.superbiz.moviefun;
-
- import junit.framework.TestCase;
- import org.apache.openejb.api.LocalClient;
-
- import javax.annotation.Resource;
- import javax.ejb.EJB;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.persistence.EntityManager;
- import javax.persistence.PersistenceContext;
- import javax.transaction.UserTransaction;
- import java.util.List;
- import java.util.Properties;
-
- @LocalClient
- public class MoviesTest extends TestCase {
-
- @EJB
- private Movies movies;
-
- @Resource
- private UserTransaction userTransaction;
-
- @PersistenceContext
- private EntityManager entityManager;
-
- public void setUp() throws Exception {
- Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
- p.put("movieDatabase", "new://Resource?type=DataSource");
- p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
- p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
-
- InitialContext initialContext = new InitialContext(p);
-
- // Here's the fun part
- initialContext.bind("inject", this);
- }
-
- public void test() throws Exception {
-
- userTransaction.begin();
-
- try {
- entityManager.persist(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
- entityManager.persist(new Movie("Joel Coen", "Fargo", 1996));
- entityManager.persist(new Movie("Joel Coen", "The Big Lebowski", 1998));
-
- List<Movie> list = movies.getMovies();
- assertEquals("List.size()", 3, list.size());
-
- for (Movie movie : list) {
- movies.deleteMovie(movie);
- }
-
- assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
-
- } finally {
- userTransaction.commit();
- }
- }
- }/**
- * 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.superbiz.moviefun;
-
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import java.io.Serializable;
-
- @Entity
- public class Movie implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private long id;
-
- private String director;
- private String title;
- private int year;
- private String genre;
- private int rating;
-
-
- public Movie() {
- }
-
- public Movie(String title, String director, String genre, int rating, int year) {
- this.director = director;
- this.title = title;
- this.year = year;
- this.genre = genre;
- this.rating = rating;
- }
-
- public Movie(String director, String title, int year) {
- this.director = director;
- this.title = title;
- this.year = year;
- }
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public String getDirector() {
- return director;
- }
-
- public void setDirector(String director) {
- this.director = director;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public int getYear() {
- return year;
- }
-
- public void setYear(int year) {
- this.year = year;
- }
-
- public String getGenre() {
- return genre;
- }
-
- public void setGenre(String genre) {
- this.genre = genre;
- }
-
- public int getRating() {
- return rating;
- }
-
- public void setRating(int rating) {
- this.rating = rating;
- }
- }/**
- * 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.superbiz.moviefun;
-
- import javax.ejb.Local;
- import java.util.List;
-
- @Local
- public interface Movies {
- public int count();
-
- public List<Movie> findRange(int[] range);
-
- public List<Movie> findByDirector(String director);
-
- public List<Movie> findByGenre(String genre);
-
- public List<Movie> findByTitle(String title);
-
- public List<Movie> getMovies();
-
- public void deleteMovieId(long id);
-
- public void deleteMovie(Movie movie);
-
- public void editMovie(Movie movie);
-
- public void addMovie(Movie movie);
-
- public Movie find(Long id);
- }
- /**
- * 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.superbiz.moviefun;
-
- import javax.ejb.Remote;
- import java.util.List;
-
- @Remote
- public interface MoviesRemote {
- public int count();
-
- public List<Movie> findRange(int[] range);
-
- public List<Movie> findByDirector(String director);
-
- public List<Movie> findByGenre(String genre);
-
- public List<Movie> findByTitle(String title);
-
- public List<Movie> getMovies();
-
- public void deleteMovieId(long id);
-
- public void deleteMovie(Movie movie);
-
- public void editMovie(Movie movie);
-
- public void addMovie(Movie movie);
-
- public Movie find(Long id);
- }
- /*
- * 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.superbiz.moviefun;
-
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.net.MalformedURLException;
- import java.net.URL;
-
- public class NotificationMonitor {
- private static TrayIcon trayIcon;
-
- public static void main(String[] args) throws NamingException, InterruptedException, AWTException, MalformedURLException {
- addSystemTrayIcon();
-
- // Boot the embedded EJB Container
- new InitialContext();
-
- System.out.println("Starting monitor...");
- }
-
- private static void addSystemTrayIcon() throws AWTException, MalformedURLException {
- SystemTray tray = SystemTray.getSystemTray();
-
- URL moviepng = NotificationMonitor.class.getClassLoader().getResource("movie.png");
- Image image = Toolkit.getDefaultToolkit().getImage(moviepng);
-
- ActionListener exitListener = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- System.out.println("Exiting monitor...");
- System.exit(0);
- }
- };
-
- PopupMenu popup = new PopupMenu();
- MenuItem defaultItem = new MenuItem("Exit");
- defaultItem.addActionListener(exitListener);
- popup.add(defaultItem);
-
- trayIcon = new TrayIcon(image, "Notification Monitor", popup);
- trayIcon.setImageAutoSize(true);
- tray.add(trayIcon);
-
-
- }
-
- public static void showAlert(String message) {
- synchronized (trayIcon) {
- trayIcon.displayMessage("Alert received", message, TrayIcon.MessageType.WARNING);
- }
- }
- }/*
- * 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.superbiz.moviefun;
-
- import javax.ejb.ActivationConfigProperty;
- import javax.ejb.MessageDriven;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import javax.jms.TextMessage;
-
- @MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "notifications")})
- public class NotificationsBean implements MessageListener {
-
- public void onMessage(Message message) {
- try {
- TextMessage textMessage = (TextMessage) message;
- String text = textMessage.getText();
-
- System.out.println("");
- System.out.println("====================================");
- System.out.println("Notification received: " + text);
- System.out.println("====================================");
- System.out.println("");
-
- NotificationMonitor.showAlert(text);
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- }
\ No newline at end of file
diff --git a/examples/moviefun-old/app/delete-movie.pl b/examples/moviefun-old/app/delete-movie.pl
deleted file mode 100644
index 22fe3a7..0000000
--- a/examples/moviefun-old/app/delete-movie.pl
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env perl -w
-#============================================================
-# 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.
-#============================================================
-
-#use SOAP::Lite 'trace', 'debug';
-use SOAP::Lite;
-
-my $ID = $ARGV[0];
-print $ID;
-my $namespace = 'http://superbiz.org/wsdl';
-
-my $service = SOAP::Lite-> uri($namespace)
- ->proxy('http://localhost:8080/Movies')
- ->on_action (sub { return '' } );
-
-my $method = SOAP::Data->name("ns1:deleteMovieId")
- ->attr({'xmlns:ns1' => $namespace});
-
-my @params = (SOAP::Data->name('arg0'=> $ID)->type('long'));
-
-
-my $response = $service->call($method=>@params);
-
diff --git a/examples/moviefun-old/app/get-movies.pl b/examples/moviefun-old/app/get-movies.pl
deleted file mode 100644
index 6911467..0000000
--- a/examples/moviefun-old/app/get-movies.pl
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env perl
-#============================================================
-# 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.
-#============================================================
-
-#use SOAP::Lite 'trace', 'debug';
-use SOAP::Lite;
-
-my $namespace = 'http://superbiz.org/wsdl';
-
-my $service = SOAP::Lite-> uri($namespace)
- ->proxy('http://localhost:8080/Movies')
- ->on_action (sub { return '' } );
-
-my $method = SOAP::Data->name("ns1:getMovies")
- ->attr({'xmlns:ns1' => $namespace});
-
-#my @params = (
-# SOAP::Data->name('arg0'=>3),
-# SOAP::Data->name('arg1'=>4));
-
-my $response = $service->call($method=>@params);
-
-for my $movie ($response->valueof('//return')) {
- while ( my ($key, $value) = each(%$movie) ) {
- print "$key => $value\n";
- }
- print "\n";
-}
-
-
-
-
-
diff --git a/examples/moviefun-old/app/pom.xml b/examples/moviefun-old/app/pom.xml
deleted file mode 100644
index 6e331c0..0000000
--- a/examples/moviefun-old/app/pom.xml
+++ /dev/null
@@ -1,192 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-
-<!-- $Rev: 684173 $ $Date: 2008-08-08 20:13:24 -0700 (Fri, 08 Aug 2008) $ -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun</artifactId>
- <version>1.1-SNAPSHOT</version>
- </parent>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun-app</artifactId>
- <packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
- <name>OpenEJB :: Web Examples :: Moviefun :: App</name>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <repositories>
- <repository>
- <id>apache-m2-snapshot</id>
- <name>Apache Snapshot Repository</name>
- <url>http://repository.apache.org/snapshots</url>
- </repository>
- </repositories>
- <build>
- <finalName>moviefun</finalName>
- <defaultGoal>install</defaultGoal>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.12</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-eclipse-plugin</artifactId>
- <version>2.8</version>
- <configuration>
- <configuration>
- <wtpapplicationxml>true</wtpapplicationxml>
- <wtpversion>2.0</wtpversion>
- </configuration>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.openejb.maven</groupId>
- <artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
- <configuration>
- <tomeeClassifier>plus</tomeeClassifier>
- <args>-Xmx512m -XX:PermSize=256m</args>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0-4</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jstl</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.myfaces.core</groupId>
- <artifactId>myfaces-impl</artifactId>
- <version>2.1.6</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun-iface</artifactId>
- <version>1.1-SNAPSHOT</version>
- <type>jar</type>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>net.sourceforge.htmlunit</groupId>
- <artifactId>htmlunit</artifactId>
- <version>2.8</version>
- <type>jar</type>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <!-- This section allows you to configure where to publish libraries for
- sharing. It is not required and may be deleted. For more information see:
- http://maven.apache.org/plugins/maven-deploy-plugin/ -->
- <distributionManagement>
- <repository>
- <id>localhost</id>
- <url>file://${basedir}/target/repo/</url>
- </repository>
- <snapshotRepository>
- <id>localhost</id>
- <url>file://${basedir}/target/snapshot-repo/</url>
- </snapshotRepository>
- </distributionManagement>
-
- <profiles>
- <profile>
- <id>itest</id>
- <build>
- <defaultGoal>install</defaultGoal>
- <plugins>
- <plugin>
- <groupId>com.googlecode.t7mp</groupId>
- <artifactId>maven-t7-plugin</artifactId>
- <version>0.9.6</version>
- <configuration>
- <tomcatHttpPort>9999</tomcatHttpPort>
- <tomcatShutdownPort>9998</tomcatShutdownPort>
- <tomcatVersion>7.0.27</tomcatVersion>
- <webapps>
- <webappArtifact>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-tomcat-webapp</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- <contextPath>openejb</contextPath>
- </webappArtifact>
- </webapps>
- </configuration>
- <executions>
- <execution>
- <id>start-tomcat</id>
- <goals>
- <goal>run</goal>
- </goals>
- <phase>pre-integration-test</phase>
- <configuration>
- <tomcatSetAwait>false</tomcatSetAwait>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <artifactId>maven-failsafe-plugin</artifactId>
- <version>2.6</version>
- <executions>
- <execution>
- <goals>
- <goal>integration-test</goal>
- <goal>verify</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-</project>
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/ActionServlet.java b/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/ActionServlet.java
deleted file mode 100644
index a3c7e26..0000000
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/ActionServlet.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import javax.ejb.EJB;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ListIterator;
-
-/**
- * @version $Revision$ $Date$
- */
-public class ActionServlet extends HttpServlet {
-
- @EJB(name = "movies")
- private Movies moviesBean;
-
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
-
- private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- HttpSession session = request.getSession();
-
- List<Movie> movies = null;
- ListIterator<Movie> listIterator = null;
- int display = 5;
-
- String action = request.getParameter("action");
-
-
- if ("Add".equals(action)) {
-
- String title = request.getParameter("title");
- String director = request.getParameter("director");
- String genre = request.getParameter("genre");
- int rating = Integer.parseInt(request.getParameter("rating"));
- int year = Integer.parseInt(request.getParameter("year"));
-
- Movie movie = new Movie(title, director, genre, rating, year);
-
- moviesBean.addMovie(movie);
-
- } else if ("Remove".equals(action)) {
-
- String[] ids = request.getParameterValues("id");
- for (String id : ids) {
- moviesBean.deleteMovieId(new Long(id));
- }
-
- } else if (">>".equals(action)) {
-
- movies = (List) session.getAttribute("movies.collection");
- listIterator = (ListIterator) session.getAttribute("movies.iterator");
-
- } else if ("<<".equals(action)) {
-
- movies = (List) session.getAttribute("movies.collection");
- listIterator = (ListIterator) session.getAttribute("movies.iterator");
- for (int i = display * 2; i > 0 && listIterator.hasPrevious(); i--) {
- listIterator.previous(); // backup
- }
-
- } else if ("findByTitle".equals(action)) {
-
- movies = moviesBean.findByTitle(request.getParameter("key"));
-
- } else if ("findByDirector".equals(action)) {
-
- movies = moviesBean.findByDirector(request.getParameter("key"));
-
- } else if ("findByGenre".equals(action)) {
-
- movies = moviesBean.findByGenre(request.getParameter("key"));
- }
-
- if (movies == null) {
- try {
- movies = moviesBean.getMovies();
- } catch (Throwable e) {
- // We must not have run setup yet
- response.sendRedirect("setup.jsp");
- return;
- }
- }
-
- if (listIterator == null) {
- listIterator = movies.listIterator();
- }
-
- session.setAttribute("movies.collection", movies);
- session.setAttribute("movies.iterator", listIterator);
-
- List<Movie> moviesToShow = new ArrayList<Movie>();
-
- boolean hasPrevious = listIterator.hasPrevious();
-
- int start = listIterator.nextIndex();
-
- for (int i = display; i > 0 && listIterator.hasNext(); i--) {
- Movie movie = (Movie) listIterator.next();
- moviesToShow.add(movie);
- }
-
- boolean hasNext = listIterator.hasNext();
-
- int end = listIterator.nextIndex();
- request.setAttribute("movies", moviesToShow);
- request.setAttribute("start", start);
- request.setAttribute("end", end);
- request.setAttribute("total", movies.size());
- request.setAttribute("display", display);
- request.setAttribute("hasNext", hasNext);
- request.setAttribute("hasPrev", hasPrevious);
-
- request.getRequestDispatcher("WEB-INF/moviefun.jsp").forward(request, response);
- }
-
-}
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/MovieController.java b/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/MovieController.java
deleted file mode 100644
index f8280c0..0000000
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/MovieController.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import org.superbiz.moviefun.util.JsfUtil;
-import org.superbiz.moviefun.util.PaginationHelper;
-
-import javax.ejb.EJB;
-import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.convert.FacesConverter;
-import javax.faces.model.DataModel;
-import javax.faces.model.ListDataModel;
-import javax.faces.model.SelectItem;
-import java.io.Serializable;
-import java.util.ResourceBundle;
-
-@ManagedBean(name = "movieController")
-@SessionScoped
-public class MovieController implements Serializable {
-
-
- private Movie current;
- private DataModel items = null;
- @EJB
- private MoviesImpl ejbFacade;
- private PaginationHelper pagination;
- private int selectedItemIndex;
-
- public MovieController() {
- }
-
- public Movie getSelected() {
- if (current == null) {
- current = new Movie();
- selectedItemIndex = -1;
- }
- return current;
- }
-
- private MoviesImpl getFacade() {
- return ejbFacade;
- }
-
- public PaginationHelper getPagination() {
- if (pagination == null) {
- pagination = new PaginationHelper(10) {
-
- @Override
- public int getItemsCount() {
- return getFacade().count();
- }
-
- @Override
- public DataModel createPageDataModel() {
- return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()}));
- }
- };
- }
- return pagination;
- }
-
- public String prepareList() {
- recreateModel();
- return "List";
- }
-
- public String prepareView() {
- current = (Movie) getItems().getRowData();
- selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
- return "View";
- }
-
- public String prepareCreate() {
- current = new Movie();
- selectedItemIndex = -1;
- return "Create";
- }
-
- public String create() {
- try {
- getFacade().addMovie(current);
- JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("MovieCreated"));
- return prepareCreate();
- } catch (Exception e) {
- JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
- return null;
- }
- }
-
- public String prepareEdit() {
- current = (Movie) getItems().getRowData();
- selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
- return "Edit";
- }
-
- public String update() {
- try {
- getFacade().editMovie(current);
- JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("MovieUpdated"));
- return "View";
- } catch (Exception e) {
- JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
- return null;
- }
- }
-
- public String destroy() {
- current = (Movie) getItems().getRowData();
- selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
- performDestroy();
- recreateModel();
- return "List";
- }
-
- public String destroyAndView() {
- performDestroy();
- recreateModel();
- updateCurrentItem();
- if (selectedItemIndex >= 0) {
- return "View";
- } else {
- // all items were removed - go back to list
- recreateModel();
- return "List";
- }
- }
-
- private void performDestroy() {
- try {
- getFacade().deleteMovieId(current.getId());
- JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("MovieDeleted"));
- } catch (Exception e) {
- JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
- }
- }
-
- private void updateCurrentItem() {
- int count = getFacade().count();
- if (selectedItemIndex >= count) {
- // selected index cannot be bigger than number of items:
- selectedItemIndex = count - 1;
- // go to previous page if last page disappeared:
- if (pagination.getPageFirstItem() >= count) {
- pagination.previousPage();
- }
- }
- if (selectedItemIndex >= 0) {
- current = getFacade().findRange(new int[]{selectedItemIndex, selectedItemIndex + 1}).get(0);
- }
- }
-
- public DataModel getItems() {
- if (items == null) {
- items = getPagination().createPageDataModel();
- }
- return items;
- }
-
- private void recreateModel() {
- items = null;
- }
-
- public String next() {
- getPagination().nextPage();
- recreateModel();
- return "List";
- }
-
- public String previous() {
- getPagination().previousPage();
- recreateModel();
- return "List";
- }
-
- public SelectItem[] getItemsAvailableSelectMany() {
- return JsfUtil.getSelectItems(ejbFacade.getMovies(), false);
- }
-
- public SelectItem[] getItemsAvailableSelectOne() {
- return JsfUtil.getSelectItems(ejbFacade.getMovies(), true);
- }
-
- @FacesConverter(forClass = Movie.class)
- public static class MovieControllerConverter implements Converter {
-
- public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
- if (value == null || value.length() == 0) {
- return null;
- }
- MovieController controller = (MovieController) facesContext.getApplication().getELResolver().
- getValue(facesContext.getELContext(), null, "movieController");
- return controller.ejbFacade.find(getKey(value));
- }
-
- long getKey(String value) {
- long key;
- key = Long.parseLong(value);
- return key;
- }
-
- String getStringKey(long value) {
- StringBuffer sb = new StringBuffer();
- sb.append(value);
- return sb.toString();
- }
-
- public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
- if (object == null) {
- return null;
- }
- if (object instanceof Movie) {
- Movie o = (Movie) object;
- return getStringKey(o.getId());
- } else {
- throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + MovieController.class.getName());
- }
- }
-
- }
-
-}
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/MoviesImpl.java b/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/MoviesImpl.java
deleted file mode 100644
index 00816b6..0000000
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/MoviesImpl.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import javax.ejb.EJB;
-import javax.ejb.LocalBean;
-import javax.ejb.Stateless;
-import javax.jws.WebService;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.persistence.metamodel.EntityType;
-import java.util.List;
-
-@LocalBean
-@Stateless(name = "Movies")
-@WebService(portName = "MoviesPort",
- serviceName = "MoviesWebService",
- targetNamespace = "http://superbiz.org/wsdl")
-public class MoviesImpl implements Movies, MoviesRemote {
-
- @EJB
- private Notifier notifier;
-
- @PersistenceContext(unitName = "movie-unit")
- private EntityManager entityManager;
-
- @Override
- public Movie find(Long id) {
- return entityManager.find(Movie.class, id);
- }
-
- @Override
- public void addMovie(Movie movie) {
- entityManager.persist(movie);
- }
-
- @Override
- public void editMovie(Movie movie) {
- entityManager.merge(movie);
- }
-
- @Override
- public void deleteMovie(Movie movie) {
- entityManager.remove(movie);
- notifier.notify("Deleted Movie \"" + movie.getTitle() + "\" (" + movie.getYear() + ")");
- }
-
- @Override
- public void deleteMovieId(long id) {
- Movie movie = entityManager.find(Movie.class, id);
- deleteMovie(movie);
- }
-
- @Override
- public List<Movie> getMovies() {
- CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
- cq.select(cq.from(Movie.class));
- return entityManager.createQuery(cq).getResultList();
- }
-
- @Override
- public List<Movie> findByTitle(String title) {
- return findByStringField("title", title);
- }
-
- @Override
- public List<Movie> findByGenre(String genre) {
- return findByStringField("genre", genre);
- }
-
- @Override
- public List<Movie> findByDirector(String director) {
- return findByStringField("director", director);
- }
-
- private List<Movie> findByStringField(String fieldname, String param) {
- CriteriaBuilder builder = entityManager.getCriteriaBuilder();
- CriteriaQuery<Movie> query = builder.createQuery(Movie.class);
- Root<Movie> root = query.from(Movie.class);
- EntityType<Movie> type = entityManager.getMetamodel().entity(Movie.class);
-
- Path<String> path = root.get(type.getDeclaredSingularAttribute(fieldname, String.class));
- Predicate condition = builder.like(path, "%" + param + "%");
-
- query.where(condition);
-
- return entityManager.createQuery(query).getResultList();
- }
-
- @Override
- public List<Movie> findRange(int[] range) {
- CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
- cq.select(cq.from(Movie.class));
- TypedQuery<Movie> q = entityManager.createQuery(cq);
- q.setMaxResults(range[1] - range[0]);
- q.setFirstResult(range[0]);
- return q.getResultList();
- }
-
- @Override
- public int count() {
- CriteriaQuery<Long> cq = entityManager.getCriteriaBuilder().createQuery(Long.class);
- Root<Movie> rt = cq.from(Movie.class);
- cq.select(entityManager.getCriteriaBuilder().count(rt));
- TypedQuery<Long> q = entityManager.createQuery(cq);
- return (q.getSingleResult()).intValue();
- }
-
-}
\ No newline at end of file
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/NotifierImpl.java b/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/NotifierImpl.java
deleted file mode 100644
index 96cedd0..0000000
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/NotifierImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import javax.annotation.Resource;
-import javax.ejb.Stateless;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.JMSException;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-import javax.jms.Topic;
-
-@Stateless
-public class NotifierImpl implements Notifier {
-
- @Resource
- private ConnectionFactory connectionFactory;
-
- @Resource(name = "notifications")
- private Topic notificationsTopic;
-
- public void notify(String message) {
- try {
- Connection connection = null;
- Session session = null;
-
- try {
- connection = connectionFactory.createConnection();
- connection.start();
-
- // Create a Session
- session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- // Create a MessageProducer from the Session to the Topic or Queue
- MessageProducer producer = session.createProducer(notificationsTopic);
- producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
-
- // Create a message
- TextMessage textMessage = session.createTextMessage(message);
-
- // Tell the producer to send the message
- producer.send(textMessage);
- } finally {
- // Clean up
- if (session != null) session.close();
- if (connection != null) connection.close();
- }
- } catch (JMSException e) {
- throw new IllegalStateException(e);
- }
-
- }
-
-}
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/util/JsfUtil.java b/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/util/JsfUtil.java
deleted file mode 100644
index 8c2ea51..0000000
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/util/JsfUtil.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 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.superbiz.moviefun.util;
-
-import javax.faces.application.FacesMessage;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.convert.Converter;
-import javax.faces.model.SelectItem;
-import java.util.List;
-
-public class JsfUtil {
-
- public static SelectItem[] getSelectItems(List<?> entities, boolean selectOne) {
- int size = selectOne ? entities.size() + 1 : entities.size();
- SelectItem[] items = new SelectItem[size];
- int i = 0;
- if (selectOne) {
- items[0] = new SelectItem("", "---");
- i++;
- }
- for (Object x : entities) {
- items[i++] = new SelectItem(x, x.toString());
- }
- return items;
- }
-
- public static void addErrorMessage(Exception ex, String defaultMsg) {
- String msg = ex.getLocalizedMessage();
- if (msg != null && msg.length() > 0) {
- addErrorMessage(msg);
- } else {
- addErrorMessage(defaultMsg);
- }
- }
-
- public static void addErrorMessages(List<String> messages) {
- for (String message : messages) {
- addErrorMessage(message);
- }
- }
-
- public static void addErrorMessage(String msg) {
- FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
- FacesContext.getCurrentInstance().addMessage(null, facesMsg);
- }
-
- public static void addSuccessMessage(String msg) {
- FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg);
- FacesContext.getCurrentInstance().addMessage("successInfo", facesMsg);
- }
-
- public static String getRequestParameter(String key) {
- return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key);
- }
-
- public static Object getObjectFromRequestParameter(String requestParameterName, Converter converter, UIComponent component) {
- String theId = JsfUtil.getRequestParameter(requestParameterName);
- return converter.getAsObject(FacesContext.getCurrentInstance(), component, theId);
- }
-
-}
\ No newline at end of file
diff --git a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/util/PaginationHelper.java b/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/util/PaginationHelper.java
deleted file mode 100644
index 6b3cc9a..0000000
--- a/examples/moviefun-old/app/src/main/java/org/superbiz/moviefun/util/PaginationHelper.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * 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.superbiz.moviefun.util;
-
-import javax.faces.model.DataModel;
-
-public abstract class PaginationHelper {
-
- private int pageSize;
- private int page;
-
- public PaginationHelper(int pageSize) {
- this.pageSize = pageSize;
- }
-
- public abstract int getItemsCount();
-
- public abstract DataModel createPageDataModel();
-
- public int getPageFirstItem() {
- return page * pageSize;
- }
-
- public int getPageLastItem() {
- int i = getPageFirstItem() + pageSize - 1;
- int count = getItemsCount() - 1;
- if (i > count) {
- i = count;
- }
- if (i < 0) {
- i = 0;
- }
- return i;
- }
-
- public boolean isHasNextPage() {
- return (page + 1) * pageSize + 1 <= getItemsCount();
- }
-
- public void nextPage() {
- if (isHasNextPage()) {
- page++;
- }
- }
-
- public boolean isHasPreviousPage() {
- return page > 0;
- }
-
- public void previousPage() {
- if (isHasPreviousPage()) {
- page--;
- }
- }
-
- public int getPageSize() {
- return pageSize;
- }
-
-}
diff --git a/examples/moviefun-old/app/src/main/resources/Bundle.properties b/examples/moviefun-old/app/src/main/resources/Bundle.properties
deleted file mode 100644
index f800333..0000000
--- a/examples/moviefun-old/app/src/main/resources/Bundle.properties
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# 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.
-#
-PersistenceErrorOccured=A persistence error occurred.
-Previous=Previous
-Next=Next
-
-MovieCreated=Movie was successfully created.
-MovieUpdated=Movie was successfully updated.
-MovieDeleted=Movie was successfully deleted.
-CreateMovieTitle=Create New Movie
-CreateMovieSaveLink=Save
-CreateMovieShowAllLink=Show All Movie Items
-CreateMovieIndexLink=Index
-CreateMovieLabel_id=Id:
-CreateMovieTitle_id=Id
-CreateMovieLabel_director=Director:
-CreateMovieTitle_director=Director
-CreateMovieLabel_title=Title:
-CreateMovieTitle_title=Title
-CreateMovieLabel_year=Year:
-CreateMovieTitle_year=Year
-CreateMovieLabel_genre=Genre:
-CreateMovieTitle_genre=Genre
-CreateMovieLabel_rating=Rating:
-CreateMovieTitle_rating=Rating
-EditMovieTitle=Edit Movie
-EditMovieSaveLink=Save
-EditMovieViewLink=View
-EditMovieShowAllLink=Show All Movie Items
-EditMovieIndexLink=Index
-EditMovieLabel_id=Id:
-EditMovieTitle_id=Id
-EditMovieLabel_director=Director:
-EditMovieTitle_director=Director
-EditMovieLabel_title=Title:
-EditMovieTitle_title=Title
-EditMovieLabel_year=Year:
-EditMovieTitle_year=Year
-EditMovieLabel_genre=Genre:
-EditMovieTitle_genre=Genre
-EditMovieLabel_rating=Rating:
-EditMovieTitle_rating=Rating
-ViewMovieTitle=View
-ViewMovieDestroyLink=Destroy
-ViewMovieEditLink=Edit
-ViewMovieCreateLink=Create New Movie
-ViewMovieShowAllLink=Show All Movie Items
-ViewMovieIndexLink=Index
-ViewMovieLabel_id=Id:
-ViewMovieTitle_id=Id
-ViewMovieLabel_director=Director:
-ViewMovieTitle_director=Director
-ViewMovieLabel_title=Title:
-ViewMovieTitle_title=Title
-ViewMovieLabel_year=Year:
-ViewMovieTitle_year=Year
-ViewMovieLabel_genre=Genre:
-ViewMovieTitle_genre=Genre
-ViewMovieLabel_rating=Rating:
-ViewMovieTitle_rating=Rating
-ListMovieTitle=List
-ListMovieEmpty=(No Movie Items Found)
-ListMovieDestroyLink=Destroy
-ListMovieEditLink=Edit
-ListMovieViewLink=View
-ListMovieCreateLink=Create New Movie
-ListMovieIndexLink=Index
-ListMovieTitle_id=Id
-ListMovieTitle_director=Director
-ListMovieTitle_title=Title
-ListMovieTitle_year=Year
-ListMovieTitle_genre=Genre
-ListMovieTitle_rating=Rating
diff --git a/examples/moviefun-old/app/src/main/resources/META-INF/ejb-jar.xml b/examples/moviefun-old/app/src/main/resources/META-INF/ejb-jar.xml
deleted file mode 100644
index 433757b..0000000
--- a/examples/moviefun-old/app/src/main/resources/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1 +0,0 @@
-<ejb-jar/>
\ No newline at end of file
diff --git a/examples/moviefun-old/app/src/main/resources/META-INF/persistence.xml b/examples/moviefun-old/app/src/main/resources/META-INF/persistence.xml
deleted file mode 100644
index ec38aaa..0000000
--- a/examples/moviefun-old/app/src/main/resources/META-INF/persistence.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
- <persistence-unit name="movie-unit">
- <jta-data-source>movieDatabase</jta-data-source>
- <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>
- <class>org.superbiz.moviefun.Movie</class>
-
- <properties>
- <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
- </properties>
- </persistence-unit>
-</persistence>
diff --git a/examples/moviefun-old/app/src/main/webapp/META-INF/context.xml b/examples/moviefun-old/app/src/main/webapp/META-INF/context.xml
deleted file mode 100644
index 764d617..0000000
--- a/examples/moviefun-old/app/src/main/webapp/META-INF/context.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<Context antiJARLocking="true" path="/moviefun"/>
diff --git a/examples/moviefun-old/app/src/main/webapp/WEB-INF/faces-config.xml b/examples/moviefun-old/app/src/main/webapp/WEB-INF/faces-config.xml
deleted file mode 100644
index 78f5e8f..0000000
--- a/examples/moviefun-old/app/src/main/webapp/WEB-INF/faces-config.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
-
- 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.
--->
-<faces-config version="2.0"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
- <application>
- <resource-bundle>
- <base-name>/Bundle</base-name>
- <var>bundle</var>
- </resource-bundle>
- </application>
-</faces-config>
diff --git a/examples/moviefun-old/app/src/main/webapp/WEB-INF/moviefun.jsp b/examples/moviefun-old/app/src/main/webapp/WEB-INF/moviefun.jsp
deleted file mode 100644
index 3353a96..0000000
--- a/examples/moviefun-old/app/src/main/webapp/WEB-INF/moviefun.jsp
+++ /dev/null
@@ -1,134 +0,0 @@
-<%--
- 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.
---%>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
-<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c' %>
-
-<html>
-<head><title>Moviefun :: Index</title>
- <link rel="stylesheet" href="default.css" type="text/css"/>
-
-</head>
-<body>
-<p/>
-<div id="Content">
-<table>
-<tr>
-<td>
- <table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr class="topBar">
- <td align="left" width="85%">
- <span class="topBarDiv">Mini-Movie Application</span>
- </td>
- <td align="right" valign="middle" width="1%" nowrap>
- <form method="POST" action="moviefun" name="findMovie" style="padding: 1px; margin: 1px">
- <select name="action">
- <option value="findByTitle">Title</option>
- <option value="findByDirector">Director</option>
- <option value="findByGenre">Genre</option>
- </select>
- <input type="text" name="key" size="20"/>
- <input type="submit" value="Search"/>
- </form>
- </td>
- </tr>
- </table>
-
-</td>
-</tr>
-<tr>
-<td>
- <div class="basicPanelContainer" style="width: 100%">
-
- <div class="basicPanelTitle">Movies</div>
-
- <div class="basicPanelBody">
- <form method="POST" action="moviefun" name="listMovies" style="padding: 1px; margin: 1px">
- <table class="tableview" width="100%" cellspacing="0" cellpadding="0" style="padding: 5px">
- <tr>
- <th>Title</th>
- <th>Director</th>
- <th>Genre</th>
- <th>Rating</th>
- <th>Year</th>
- <th> </th>
- </tr>
- <c:forEach var="movie" items="${movies}">
- <tr>
- <td width="200"><c:out value="${movie.title}" /></td>
- <td width="120"><c:out value="${movie.director}" /></td>
- <td width="90"><c:out value="${movie.genre}" /></td>
- <td width="50"><c:out value="${movie.rating}" /></td>
- <td width="50"><c:out value="${movie.year}" /></td>
- <td><input type="checkbox" name="id" value="<c:out value="${movie.id}" />"></td>
- </tr>
-
- </c:forEach>
- </table>
- <table width="100%" cellspacing="0" cellpadding="0" style="padding: 5px">
- <tr>
- <td>
- <c:if test="${hasPrev}"><input type="submit" name="action" value="<<"/></c:if>
-
- <c:out value="${start+1}" /> - <c:out value="${end}" /> of <c:out value="${total}" />
-
- <c:if test="${hasNext}"><input type="submit" name="action" value=">>"/></c:if>
- </td>
- </tr>
- </table>
- </form>
- </div>
- </div>
-</td>
-</tr>
-<tr>
-<td>
- <div class="basicPanelContainer" style="width: 100%">
- <div class="basicPanelTitle">Add</div>
- <div class="basicPanelBody">
- <form method="POST" action="moviefun" name="addMovie" style="padding: 1px; margin: 1px">
- <table width="100%" cellspacing="0" cellpadding="0" style="padding: 0px">
- <tr>
- <td width="200"><input type="text" name="title" size="29"/></td>
- <td width="120"><input type="text" name="director" size="17"/></td>
- <td width="90"><input type="text" name="genre" size="14"/></td>
- <td width="50"><input type="text" name="rating" size="7"/></td>
- <td width="50"><input type="text" name="year" size="4"/></td>
- <td><input type="submit" name="action" value="Add"/></td>
- </tr>
- </table>
- </form>
-
- </div>
- </div>
-</td>
-</tr>
-</table>
-
- <div class="bottomshadow"></div>
-
- <div id="poweredby" class="smalltext">
- Powered by
- <a href="http://tomcat.apache.org" class="smalltext">Apache Tomcat</a> and
- <a href="http://openejb.apache.org" class="smalltext">Apache OpenEJB</a>.
- <br/>
- </div>
-
-
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/moviefun-old/app/src/main/webapp/WEB-INF/web.xml b/examples/moviefun-old/app/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 51a96de..0000000
--- a/examples/moviefun-old/app/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
- <context-param>
- <param-name>javax.faces.PROJECT_STAGE</param-name>
- <param-value>Development</param-value>
- </context-param>
- <servlet>
- <servlet-name>ActionServlet</servlet-name>
- <servlet-class>org.superbiz.moviefun.ActionServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>Faces Servlet</servlet-name>
- <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>Faces Servlet</servlet-name>
- <url-pattern>/faces/*</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>ActionServlet</servlet-name>
- <url-pattern>/moviefun/*</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
-</web-app>
diff --git a/examples/moviefun-old/app/src/main/webapp/default.css b/examples/moviefun-old/app/src/main/webapp/default.css
deleted file mode 100644
index 991f911..0000000
--- a/examples/moviefun-old/app/src/main/webapp/default.css
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * 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.
- *
- */
-body, p, td, table, tr, .bodytext, .stepfield {
- font-family: Verdana, arial, sans-serif;
- font-size: 11px;
- line-height: 16px;
- color: #000000;
- font-weight: normal;
-}
-
-body {
- margin: 0px;
- padding: 0px;
- text-align: center;
- background-color: #f0f0f0;
-}
-
-#Content {
- text-align: left;
- background-color: #fff;
- padding: 0px;
- margin: 0px;
-}
-
-HR {
- color: 3 c78b5;
- height: 1;
-}
-
-A:link, A:visited, A:active, A:hover {
- color: #003366;
-}
-
-h1 A:link, h1 A:visited, h1 A:active {
- text-decoration: none;
-}
-
-h1 A:hover {
- border-bottom: 1px dotted #003366;
-}
-
-input {
- font-family: verdana, geneva, arial, sans-serif;
- font-size: 11px;
- color: #000000;
-}
-
-h1 {
- font-size: 24px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- color: #003366;
- border-bottom: 1px solid #3c78b5;
- padding: 2px;
- margin: 36px 0px 4px 0px;
-}
-
-h2 {
- font-size: 18px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- border-bottom: 1px solid #3c78b5;
- padding: 2px;
- margin: 27px 0px 4px 0px;
-}
-
-h3 {
- font-size: 14px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 21px 0px 4px 0px;
-}
-
-h4 {
- font-size: 12px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 18px 0px 4px 0px;
-}
-
-h4.search {
- font-size: 12px;
- line-height: normal;
- font-weight: normal;
- background-color: #f0f0f0;
- padding: 4px;
- margin: 18px 0px 4px 0px;
-}
-
-h5 {
- font-size: 10px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 14px 0px 4px 0px;
-}
-
-h6 {
- font-size: 8px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 14px 0px 4px 0px;
-}
-
-.smalltext {
- color: #666666;
- font-size: 10px;
-}
-
-.smalltext a {
- color: #666666;
-}
-
-.tableview table {
- margin: 0;
-}
-
-.tableview th {
- text-align: left;
- color: #003366;
- font-size: 12px;
- padding: 5px 0px 0px 5px;
- border-bottom: 2px solid #3c78b5;
-}
-
-.tableview td {
- text-align: left;
- border-color: #ccc;
- border-width: 0px 0px 1px 0px;
- border-style: solid;
- margin: 0;
- padding: 4px 10px 4px 5px;
-}
-
-.bottomshadow {
- height: 12px;
- background-image: url("/images/border/border_bottom.gif");
- background-repeat: repeat-x;
-}
-
-.topBarDiv a:link {
- color: white;
-}
-
-.topBarDiv a:visited {
- color: white;
-}
-
-.topBarDiv a:active {
- color: white;
-}
-
-.topBarDiv a:hover {
- color: white;
-}
-
-.topBarDiv {
- color: white;
-}
-
-.topBar td {
- background-color: #003366;
-}
-
-.basicPanelContainer {
- border: 1px solid #3c78b5;
- margin-top: 2px;
- margin-bottom: 8px;
- width: 100%
-}
-
-.basicPanelTitle {
- padding: 5px;
- margin: 0px;
- background-color: #f0f0f0;
- color: black;
- font-weight: bold;
-}
-
-.basicPanelBody {
- padding: 5px;
- margin: 0px
-}
diff --git a/examples/moviefun-old/app/src/main/webapp/index.jsp b/examples/moviefun-old/app/src/main/webapp/index.jsp
deleted file mode 100644
index 30ba1f8..0000000
--- a/examples/moviefun-old/app/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,43 +0,0 @@
-<%--
- 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.
---%>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<html>
-<head><title>Moviefun :: Index</title>
- <link rel="stylesheet" href="default.css" type="text/css"/>
-</head>
-<body>
-<p/>
-
-<div id="Content">
- <p>Please select one of the following links:</p>
- <a href="setup.jsp">Setup</a> - Sets up the application with some sample data<br />
- <a href="moviefun">JSP</a> - Use the JSP version of the application<br />
- <a href="faces/index.xhtml">JSF</a> - Use the JSF 2 version of the application<br />
-
- <div class="bottomshadow"></div>
-
- <div id="poweredby" class="smalltext">
- Powered by
- <a href="http://tomcat.apache.org" class="smalltext">Apache Tomcat</a> and
- <a href="http://openejb.apache.org" class="smalltext">Apache OpenEJB</a>.
- <br/>
- </div>
-
-
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/examples/moviefun-old/app/src/main/webapp/index.xhtml b/examples/moviefun-old/app/src/main/webapp/index.xhtml
deleted file mode 100644
index 387cb5a..0000000
--- a/examples/moviefun-old/app/src/main/webapp/index.xhtml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!--
-
- 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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
- <title>Moviefun Sample Application :: JSF 2.0</title>
- <h:outputStylesheet name="css/jsfcrud.css"/>
-</h:head>
-<h:body>
- Welcome to the Moviefun sample application!
- <h:form>
- <h:commandLink action="/movie/List" value="Show All Movie Items"/>
- </h:form>
-</h:body>
-
-</html>
-
diff --git a/examples/moviefun-old/app/src/main/webapp/movie/Create.xhtml b/examples/moviefun-old/app/src/main/webapp/movie/Create.xhtml
deleted file mode 100644
index b837598..0000000
--- a/examples/moviefun-old/app/src/main/webapp/movie/Create.xhtml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
-
- 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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core">
-
-<ui:composition template="/template.xhtml">
- <ui:define name="title">
- <h:outputText value="#{bundle.CreateMovieTitle}"></h:outputText>
- </ui:define>
- <ui:define name="body">
- <h:panelGroup id="messagePanel" layout="block">
- <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
- </h:panelGroup>
- <h:form>
- <h:panelGrid columns="2">
- <h:outputLabel value="#{bundle.CreateMovieLabel_id}" for="id"/>
- <h:inputText id="id" value="#{movieController.selected.id}" title="#{bundle.CreateMovieTitle_id}"/>
- <h:outputLabel value="#{bundle.CreateMovieLabel_director}" for="director"/>
- <h:inputText id="director" value="#{movieController.selected.director}"
- title="#{bundle.CreateMovieTitle_director}"/>
- <h:outputLabel value="#{bundle.CreateMovieLabel_title}" for="title"/>
- <h:inputText id="title" value="#{movieController.selected.title}" title="#{bundle.CreateMovieTitle_title}"/>
- <h:outputLabel value="#{bundle.CreateMovieLabel_year}" for="year"/>
- <h:inputText id="year" value="#{movieController.selected.year}" title="#{bundle.CreateMovieTitle_year}"/>
- <h:outputLabel value="#{bundle.CreateMovieLabel_genre}" for="genre"/>
- <h:inputText id="genre" value="#{movieController.selected.genre}" title="#{bundle.CreateMovieTitle_genre}"/>
- <h:outputLabel value="#{bundle.CreateMovieLabel_rating}" for="rating"/>
- <h:inputText id="rating" value="#{movieController.selected.rating}" title="#{bundle.CreateMovieTitle_rating}"/>
- </h:panelGrid>
- <br/>
- <h:commandLink action="#{movieController.create}" value="#{bundle.CreateMovieSaveLink}"/>
- <br/>
- <br/>
- <h:commandLink action="#{movieController.prepareList}" value="#{bundle.CreateMovieShowAllLink}" immediate="true"/>
- <br/>
- <br/>
- <h:commandLink value="#{bundle.CreateMovieIndexLink}" action="/index" immediate="true"/>
- </h:form>
- </ui:define>
-</ui:composition>
-
-</html>
diff --git a/examples/moviefun-old/app/src/main/webapp/movie/Edit.xhtml b/examples/moviefun-old/app/src/main/webapp/movie/Edit.xhtml
deleted file mode 100644
index 995bfd6..0000000
--- a/examples/moviefun-old/app/src/main/webapp/movie/Edit.xhtml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
-
- 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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core">
-
-<ui:composition template="/template.xhtml">
- <ui:define name="title">
- <h:outputText value="#{bundle.EditMovieTitle}"></h:outputText>
- </ui:define>
- <ui:define name="body">
- <h:panelGroup id="messagePanel" layout="block">
- <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
- </h:panelGroup>
- <h:form>
- <h:panelGrid columns="2">
- <h:outputLabel value="#{bundle.EditMovieLabel_id}" for="id"/>
- <h:inputText id="id" value="#{movieController.selected.id}" title="#{bundle.EditMovieTitle_id}"/>
- <h:outputLabel value="#{bundle.EditMovieLabel_director}" for="director"/>
- <h:inputText id="director" value="#{movieController.selected.director}"
- title="#{bundle.EditMovieTitle_director}"/>
- <h:outputLabel value="#{bundle.EditMovieLabel_title}" for="title"/>
- <h:inputText id="title" value="#{movieController.selected.title}" title="#{bundle.EditMovieTitle_title}"/>
- <h:outputLabel value="#{bundle.EditMovieLabel_year}" for="year"/>
- <h:inputText id="year" value="#{movieController.selected.year}" title="#{bundle.EditMovieTitle_year}"/>
- <h:outputLabel value="#{bundle.EditMovieLabel_genre}" for="genre"/>
- <h:inputText id="genre" value="#{movieController.selected.genre}" title="#{bundle.EditMovieTitle_genre}"/>
- <h:outputLabel value="#{bundle.EditMovieLabel_rating}" for="rating"/>
- <h:inputText id="rating" value="#{movieController.selected.rating}" title="#{bundle.EditMovieTitle_rating}"/>
- </h:panelGrid>
- <h:commandLink action="#{movieController.update}" value="#{bundle.EditMovieSaveLink}"/>
- <br/>
- <br/>
- <h:commandLink action="View" value="#{bundle.EditMovieViewLink}" immediate="true"/>
- <br/>
- <h:commandLink action="#{movieController.prepareList}" value="#{bundle.EditMovieShowAllLink}" immediate="true"/>
- <br/>
- <br/>
- <h:commandLink value="#{bundle.EditMovieIndexLink}" action="/index" immediate="true"/>
- </h:form>
- </ui:define>
-</ui:composition>
-
-</html>
diff --git a/examples/moviefun-old/app/src/main/webapp/movie/List.xhtml b/examples/moviefun-old/app/src/main/webapp/movie/List.xhtml
deleted file mode 100644
index 6be04ed..0000000
--- a/examples/moviefun-old/app/src/main/webapp/movie/List.xhtml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
-
- 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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core">
-
-<ui:composition template="/template.xhtml">
- <ui:define name="title">
- <h:outputText value="#{bundle.ListMovieTitle}"></h:outputText>
- </ui:define>
- <ui:define name="body">
- <h:form styleClass="jsfcrud_list_form">
- <h:panelGroup id="messagePanel" layout="block">
- <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
- </h:panelGroup>
- <h:outputText escape="false" value="#{bundle.ListMovieEmpty}" rendered="#{movieController.items.rowCount == 0}"/>
- <h:panelGroup rendered="#{movieController.items.rowCount > 0}">
- <h:outputText
- value="#{movieController.pagination.pageFirstItem + 1}..#{movieController.pagination.pageLastItem + 1}/#{movieController.pagination.itemsCount}"/>
-
- <h:commandLink action="#{movieController.previous}"
- value="#{bundle.Previous} #{movieController.pagination.pageSize}"
- rendered="#{movieController.pagination.hasPreviousPage}"/>
-
- <h:commandLink action="#{movieController.next}" value="#{bundle.Next} #{movieController.pagination.pageSize}"
- rendered="#{movieController.pagination.hasNextPage}"/>
-
- <h:dataTable value="#{movieController.items}" var="item" border="0" cellpadding="2" cellspacing="0"
- rowClasses="jsfcrud_odd_row,jsfcrud_even_row" rules="all" style="border:solid 1px">
- <h:column>
- <f:facet name="header">
- <h:outputText value="#{bundle.ListMovieTitle_id}"/>
- </f:facet>
- <h:outputText value="#{item.id}"/>
- </h:column>
- <h:column>
- <f:facet name="header">
- <h:outputText value="#{bundle.ListMovieTitle_director}"/>
- </f:facet>
- <h:outputText value="#{item.director}"/>
- </h:column>
- <h:column>
- <f:facet name="header">
- <h:outputText value="#{bundle.ListMovieTitle_title}"/>
- </f:facet>
- <h:outputText value="#{item.title}"/>
- </h:column>
- <h:column>
- <f:facet name="header">
- <h:outputText value="#{bundle.ListMovieTitle_year}"/>
- </f:facet>
- <h:outputText value="#{item.year}"/>
- </h:column>
- <h:column>
- <f:facet name="header">
- <h:outputText value="#{bundle.ListMovieTitle_genre}"/>
- </f:facet>
- <h:outputText value="#{item.genre}"/>
- </h:column>
- <h:column>
- <f:facet name="header">
- <h:outputText value="#{bundle.ListMovieTitle_rating}"/>
- </f:facet>
- <h:outputText value="#{item.rating}"/>
- </h:column>
- <h:column>
- <f:facet name="header">
- <h:outputText value=" "/>
- </f:facet>
- <h:commandLink action="#{movieController.prepareView}" value="#{bundle.ListMovieViewLink}"/>
- <h:outputText value=" "/>
- <h:commandLink action="#{movieController.prepareEdit}" value="#{bundle.ListMovieEditLink}"/>
- <h:outputText value=" "/>
- <h:commandLink action="#{movieController.destroy}" value="#{bundle.ListMovieDestroyLink}"/>
- </h:column>
- </h:dataTable>
- </h:panelGroup>
- <br/>
- <h:commandLink action="#{movieController.prepareCreate}" value="#{bundle.ListMovieCreateLink}"/>
- <br/>
- <br/>
- <h:commandLink value="#{bundle.ListMovieIndexLink}" action="/index" immediate="true"/>
- </h:form>
- </ui:define>
-</ui:composition>
-
-</html>
diff --git a/examples/moviefun-old/app/src/main/webapp/movie/View.xhtml b/examples/moviefun-old/app/src/main/webapp/movie/View.xhtml
deleted file mode 100644
index 8544047..0000000
--- a/examples/moviefun-old/app/src/main/webapp/movie/View.xhtml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!--
-
- 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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core">
-
-<ui:composition template="/template.xhtml">
- <ui:define name="title">
- <h:outputText value="#{bundle.ViewMovieTitle}"></h:outputText>
- </ui:define>
- <ui:define name="body">
- <h:panelGroup id="messagePanel" layout="block">
- <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
- </h:panelGroup>
- <h:form>
- <h:panelGrid columns="2">
- <h:outputText value="#{bundle.ViewMovieLabel_id}"/>
- <h:outputText value="#{movieController.selected.id}" title="#{bundle.ViewMovieTitle_id}"/>
- <h:outputText value="#{bundle.ViewMovieLabel_director}"/>
- <h:outputText value="#{movieController.selected.director}" title="#{bundle.ViewMovieTitle_director}"/>
- <h:outputText value="#{bundle.ViewMovieLabel_title}"/>
- <h:outputText value="#{movieController.selected.title}" title="#{bundle.ViewMovieTitle_title}"/>
- <h:outputText value="#{bundle.ViewMovieLabel_year}"/>
- <h:outputText value="#{movieController.selected.year}" title="#{bundle.ViewMovieTitle_year}"/>
- <h:outputText value="#{bundle.ViewMovieLabel_genre}"/>
- <h:outputText value="#{movieController.selected.genre}" title="#{bundle.ViewMovieTitle_genre}"/>
- <h:outputText value="#{bundle.ViewMovieLabel_rating}"/>
- <h:outputText value="#{movieController.selected.rating}" title="#{bundle.ViewMovieTitle_rating}"/>
- </h:panelGrid>
- <br/>
- <h:commandLink action="#{movieController.destroyAndView}" value="#{bundle.ViewMovieDestroyLink}"/>
- <br/>
- <br/>
- <h:commandLink action="Edit" value="#{bundle.ViewMovieEditLink}"/>
- <br/>
- <h:commandLink action="#{movieController.prepareCreate}" value="#{bundle.ViewMovieCreateLink}"/>
- <br/>
- <h:commandLink action="#{movieController.prepareList}" value="#{bundle.ViewMovieShowAllLink}"/>
- <br/>
- <br/>
- <h:commandLink value="#{bundle.ViewMovieIndexLink}" action="/index" immediate="true"/>
-
- </h:form>
- </ui:define>
-</ui:composition>
-
-</html>
diff --git a/examples/moviefun-old/app/src/main/webapp/resources/css/jsfcrud.css b/examples/moviefun-old/app/src/main/webapp/resources/css/jsfcrud.css
deleted file mode 100644
index d77b1b9..0000000
--- a/examples/moviefun-old/app/src/main/webapp/resources/css/jsfcrud.css
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * 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.
- *
- */
-root {
- display: block;
-}
-
-body {
- font-family: Arial, Helvetica, sans-serif;
- color: #3a4f54;
- background-color: #dfecf1;
- font-size: small;
-}
-
-a {
- color: #e33b06;
-}
-
-table {
- empty-cells: show;
-}
-
-form.jsfcrud_list_form th, td th {
- font-size: x-small;
- color: #4e6a71;
- border-top-style: solid;
- border-bottom-style: solid;
- border-left-style: solid;
- border-right-style: solid;
- border-top-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-right-width: 1px;
- border-top-color: #b2d5d6;
- border-bottom-color: #b2d5d6;
- border-left-color: #90b4bd;
- border-right-color: #90b4bd;
- letter-spacing: 3px;
- text-align: left;
- padding-top: 6px;
- padding-bottom: 6px;
- padding-left: 6px;
- padding-right: 6px;
- background-color: #b2d5d6;
-}
-
-td {
- vertical-align: top;
- padding-bottom: 8px;
- font-size: small;
-}
-
-form.jsfcrud_list_form td, td td {
- border-top-style: solid;
- border-bottom-style: solid;
- border-left-style: solid;
- border-right-style: solid;
- border-top-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
- border-right-width: 1px;
- border-top-color: #b2d5d6;
- border-bottom-color: #b2d5d6;
- border-left-color: #b2d5d6;
- border-right-color: #b2d5d6;
- vertical-align: baseline;
- padding-bottom: 0px;
-}
-
-tr.jsfcrud_odd_row {
- background-color: #fefeff;
- color: #4e6a71;
-}
-
-tr.jsfcrud_even_row {
- background-color: #eff5fa;
- color: #4e6a71;
-}
-
-#busyImage {
- position: absolute;
- left: 50%;
- top: 50%;
-}
diff --git a/examples/moviefun-old/app/src/main/webapp/setup.jsp b/examples/moviefun-old/app/src/main/webapp/setup.jsp
deleted file mode 100644
index be4f7d2..0000000
--- a/examples/moviefun-old/app/src/main/webapp/setup.jsp
+++ /dev/null
@@ -1,65 +0,0 @@
-<%--
- 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.
---%>
-<%@ page import=" org.superbiz.moviefun.Movie" %>
-<%@ page import="org.superbiz.moviefun.Movies" %>
-<%@ page import="javax.naming.InitialContext" %>
-<%@ page import="java.util.Iterator" %>
-<%@ page import="java.util.List" %>
-
-<h2>Setup</h2>
-<%
- InitialContext initialContext = new InitialContext();
- Movies moviesBean = (Movies) initialContext.lookup("java:comp/env/movies");
-
- moviesBean.addMovie(new Movie("Wedding Crashers", "David Dobkin", "Comedy", 7, 2005));
- moviesBean.addMovie(new Movie("Starsky & Hutch", "Todd Phillips", "Action", 6, 2004));
- moviesBean.addMovie(new Movie("Shanghai Knights", "David Dobkin", "Action", 6, 2003));
- moviesBean.addMovie(new Movie("I-Spy", "Betty Thomas", "Adventure", 5, 2002));
- moviesBean.addMovie(new Movie("The Royal Tenenbaums", "Wes Anderson", "Comedy", 8, 2001));
- moviesBean.addMovie(new Movie("Zoolander", "Ben Stiller", "Comedy", 6, 2001));
- moviesBean.addMovie(new Movie("Shanghai Noon", "Tom Dey", "Comedy", 7, 2000));
-%>
-Done!
-
-<h2>Seeded Database with the Following movies</h2>
-<table width="500">
- <tr>
- <td><b>Title</b></td>
- <td><b>Director</b></td>
- <td><b>Genre</b></td>
- </tr>
- <%
- List<Movie> movies = moviesBean.getMovies();
- for (Iterator iterator = movies.iterator(); iterator.hasNext();) {
- Movie movie = (Movie) iterator.next();
- %>
- <tr>
- <td><%=movie.getTitle()%>
- </td>
- <td><%=movie.getDirector()%>
- </td>
- <td><%=movie.getGenre()%>
- </td>
- </tr>
-
- <%
- }
- %>
-</table>
-
-<h2>Continue</h2>
-<a href="moviefun">Go to main app</a>
\ No newline at end of file
diff --git a/examples/moviefun-old/app/src/main/webapp/template.xhtml b/examples/moviefun-old/app/src/main/webapp/template.xhtml
deleted file mode 100644
index e68106a..0000000
--- a/examples/moviefun-old/app/src/main/webapp/template.xhtml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version='1.0' encoding='UTF-8' ?>
-<!--
-
- 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.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:h="http://java.sun.com/jsf/html">
-<h:head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <title>
- <ui:insert name="title">Moviefun</ui:insert>
- </title>
- <h:outputStylesheet name="css/jsfcrud.css"/>
-</h:head>
-
-<h:body>
- <h1>
- <ui:insert name="title">Default Title</ui:insert>
- </h1>
- <p>
- <ui:insert name="body">Default Body</ui:insert>
- </p>
-</h:body>
-
-</html>
diff --git a/examples/moviefun-old/app/src/test/java/org/superbiz/moviefun/MoviesIT.java b/examples/moviefun-old/app/src/test/java/org/superbiz/moviefun/MoviesIT.java
deleted file mode 100644
index 5c687a7..0000000
--- a/examples/moviefun-old/app/src/test/java/org/superbiz/moviefun/MoviesIT.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.DomNodeList;
-import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
-import com.gargoylesoftware.htmlunit.html.HtmlElement;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import org.junit.Test;
-
-import java.util.Iterator;
-
-import static org.junit.Assert.assertTrue;
-
-public class MoviesIT {
-
- @Test
- public void testShouldMakeSureWebappIsWorking() throws Exception {
- WebClient webClient = new WebClient();
- HtmlPage page = webClient.getPage("http://localhost:9999/moviefun/setup.jsp");
-
- assertMoviesPresent(page);
-
- page = webClient.getPage("http://localhost:9999/moviefun/faces/movie/List.xhtml");
-
- assertMoviesPresent(page);
- webClient.closeAllWindows();
- }
-
- private void assertMoviesPresent(HtmlPage page) {
- String pageAsText = page.asText();
- assertTrue(pageAsText.contains("Wedding Crashers"));
- assertTrue(pageAsText.contains("Starsky & Hutch"));
- assertTrue(pageAsText.contains("Shanghai Knights"));
- assertTrue(pageAsText.contains("I-Spy"));
- assertTrue(pageAsText.contains("The Royal Tenenbaums"));
- assertTrue(pageAsText.contains("Zoolander"));
- assertTrue(pageAsText.contains("Shanghai Noon"));
- }
-
- private void clickOnLink(HtmlPage page, String lookFor) throws Exception {
- DomNodeList<HtmlElement> links = page.getElementsByTagName("a");
- Iterator<HtmlElement> iterator = links.iterator();
- while (iterator.hasNext()) {
- HtmlAnchor anchor = (HtmlAnchor) iterator.next();
-
- if (lookFor.equals(anchor.getTextContent())) {
- anchor.click();
- break;
- }
- }
- }
-
-}
diff --git a/examples/moviefun-old/app/src/test/java/org/superbiz/moviefun/MoviesTest.java b/examples/moviefun-old/app/src/test/java/org/superbiz/moviefun/MoviesTest.java
deleted file mode 100644
index 5ffc3dc..0000000
--- a/examples/moviefun-old/app/src/test/java/org/superbiz/moviefun/MoviesTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import junit.framework.TestCase;
-import org.apache.openejb.api.LocalClient;
-
-import javax.annotation.Resource;
-import javax.ejb.EJB;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.transaction.UserTransaction;
-import java.util.List;
-import java.util.Properties;
-
-@LocalClient
-public class MoviesTest extends TestCase {
-
- @EJB
- private Movies movies;
-
- @Resource
- private UserTransaction userTransaction;
-
- @PersistenceContext
- private EntityManager entityManager;
-
- public void setUp() throws Exception {
- Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
- p.put("movieDatabase", "new://Resource?type=DataSource");
- p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
- p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
-
- InitialContext initialContext = new InitialContext(p);
-
- // Here's the fun part
- initialContext.bind("inject", this);
- }
-
- public void test() throws Exception {
-
- userTransaction.begin();
-
- try {
- entityManager.persist(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
- entityManager.persist(new Movie("Joel Coen", "Fargo", 1996));
- entityManager.persist(new Movie("Joel Coen", "The Big Lebowski", 1998));
-
- List<Movie> list = movies.getMovies();
- assertEquals("List.size()", 3, list.size());
-
- for (Movie movie : list) {
- movies.deleteMovie(movie);
- }
-
- assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
-
- } finally {
- userTransaction.commit();
- }
- }
-}
\ No newline at end of file
diff --git a/examples/moviefun-old/app/src/test/resources/META-INF/application-client.xml b/examples/moviefun-old/app/src/test/resources/META-INF/application-client.xml
deleted file mode 100644
index 1e91dca..0000000
--- a/examples/moviefun-old/app/src/test/resources/META-INF/application-client.xml
+++ /dev/null
@@ -1 +0,0 @@
-<application-client/>
\ No newline at end of file
diff --git a/examples/moviefun-old/iface/pom.xml b/examples/moviefun-old/iface/pom.xml
deleted file mode 100644
index 7c2f173..0000000
--- a/examples/moviefun-old/iface/pom.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-
-<!-- $Rev: 684173 $ $Date: 2008-08-08 20:13:24 -0700 (Fri, 08 Aug 2008) $ -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun</artifactId>
- <version>1.1-SNAPSHOT</version>
- </parent>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun-iface</artifactId>
- <version>1.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>OpenEJB :: Web Examples :: Moviefun :: Interfaces</name>
- <dependencies>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0-4</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
- <build>
- <defaultGoal>install</defaultGoal>
-
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.12</version>
- </plugin>
- </plugins>
- </pluginManagement>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
-
- <!-- This section allows you to configure where to publish libraries for
- sharing. It is not required and may be deleted. For more information see:
- http://maven.apache.org/plugins/maven-deploy-plugin/ -->
- <distributionManagement>
- <repository>
- <id>localhost</id>
- <url>file://${basedir}/target/repo/</url>
- </repository>
- <snapshotRepository>
- <id>localhost</id>
- <url>file://${basedir}/target/snapshot-repo/</url>
- </snapshotRepository>
- </distributionManagement>
-
-</project>
-
diff --git a/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/Movie.java b/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/Movie.java
deleted file mode 100644
index 2bf93f5..0000000
--- a/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/Movie.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import java.io.Serializable;
-
-@Entity
-public class Movie implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private long id;
-
- private String director;
- private String title;
- private int year;
- private String genre;
- private int rating;
-
-
- public Movie() {
- }
-
- public Movie(String title, String director, String genre, int rating, int year) {
- this.director = director;
- this.title = title;
- this.year = year;
- this.genre = genre;
- this.rating = rating;
- }
-
- public Movie(String director, String title, int year) {
- this.director = director;
- this.title = title;
- this.year = year;
- }
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public String getDirector() {
- return director;
- }
-
- public void setDirector(String director) {
- this.director = director;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public int getYear() {
- return year;
- }
-
- public void setYear(int year) {
- this.year = year;
- }
-
- public String getGenre() {
- return genre;
- }
-
- public void setGenre(String genre) {
- this.genre = genre;
- }
-
- public int getRating() {
- return rating;
- }
-
- public void setRating(int rating) {
- this.rating = rating;
- }
-}
\ No newline at end of file
diff --git a/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/Movies.java b/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/Movies.java
deleted file mode 100644
index bbb214b..0000000
--- a/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/Movies.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import javax.ejb.Local;
-import java.util.List;
-
-@Local
-public interface Movies {
- public int count();
-
- public List<Movie> findRange(int[] range);
-
- public List<Movie> findByDirector(String director);
-
- public List<Movie> findByGenre(String genre);
-
- public List<Movie> findByTitle(String title);
-
- public List<Movie> getMovies();
-
- public void deleteMovieId(long id);
-
- public void deleteMovie(Movie movie);
-
- public void editMovie(Movie movie);
-
- public void addMovie(Movie movie);
-
- public Movie find(Long id);
-}
diff --git a/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/MoviesRemote.java b/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/MoviesRemote.java
deleted file mode 100644
index 8222498..0000000
--- a/examples/moviefun-old/iface/src/main/java/org/superbiz/moviefun/MoviesRemote.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import javax.ejb.Remote;
-import java.util.List;
-
-@Remote
-public interface MoviesRemote {
- public int count();
-
- public List<Movie> findRange(int[] range);
-
- public List<Movie> findByDirector(String director);
-
- public List<Movie> findByGenre(String genre);
-
- public List<Movie> findByTitle(String title);
-
- public List<Movie> getMovies();
-
- public void deleteMovieId(long id);
-
- public void deleteMovie(Movie movie);
-
- public void editMovie(Movie movie);
-
- public void addMovie(Movie movie);
-
- public Movie find(Long id);
-}
diff --git a/examples/moviefun-old/monitor/pom.xml b/examples/moviefun-old/monitor/pom.xml
deleted file mode 100644
index 3af4f32..0000000
--- a/examples/moviefun-old/monitor/pom.xml
+++ /dev/null
@@ -1,213 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-
-<!-- $Rev: 684173 $ $Date: 2008-08-08 20:13:24 -0700 (Fri, 08 Aug 2008) $ -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun</artifactId>
- <version>1.1-SNAPSHOT</version>
- </parent>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun-monitor</artifactId>
- <version>1.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>OpenEJB :: Web Examples :: Moviefun :: Monitor</name>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0-4</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-api</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- <exclusions>
- <exclusion>
- <artifactId>icu4j</artifactId>
- <groupId>com.ibm.icu</groupId>
- </exclusion>
- <exclusion>
- <artifactId>jasypt</artifactId>
- <groupId>org.jasypt</groupId>
- </exclusion>
- <exclusion>
- <groupId>activesoap</groupId>
- <artifactId>jaxp-api</artifactId>
- </exclusion>
- <exclusion>
- <groupId>mx4j</groupId>
- <artifactId>mx4j</artifactId>
- </exclusion>
- <exclusion>
- <groupId>mx4j</groupId>
- <artifactId>mx4j-jmx</artifactId>
- </exclusion>
- <exclusion>
- <groupId>mx4j</groupId>
- <artifactId>mx4j-remote</artifactId>
- </exclusion>
- <exclusion>
- <groupId>mx4j</groupId>
- <artifactId>mx4j-tools</artifactId>
- </exclusion>
- <exclusion>
- <groupId>mx4j</groupId>
- <artifactId>mx4j-impl</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.activemq</groupId>
- <artifactId>activemq-jaas</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jta_1.0.1B_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jms_1.1_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-j2ee-jacc_1.0_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-primitives</groupId>
- <artifactId>commons-primitives</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- </exclusion>
- <exclusion>
- <groupId>axion</groupId>
- <artifactId>axion</artifactId>
- </exclusion>
- <exclusion>
- <groupId>regexp</groupId>
- <artifactId>regexp</artifactId>
- </exclusion>
- <exclusion>
- <groupId>activemq</groupId>
- <artifactId>jmdns</artifactId>
- </exclusion>
- <exclusion>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.directory.server</groupId>
- <artifactId>apacheds-core</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
-
- <build>
- <defaultGoal>install</defaultGoal>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.12</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.2-beta-5</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>attached</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <appendAssemblyId>false</appendAssemblyId>
- <descriptors>
- <descriptor>src/main/assembly/client.xml</descriptor>
- </descriptors>
- <archive>
- <manifest>
- <mainClass>org.superbiz.moviefun.NotificationMonitor</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.1</version>
- <executions>
- <execution>
- <phase>install</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>${project.build.directory}/lib</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-
- <!-- This section allows you to configure where to publish libraries for
- sharing. It is not required and may be deleted. For more information see:
- http://maven.apache.org/plugins/maven-deploy-plugin/ -->
- <distributionManagement>
- <repository>
- <id>localhost</id>
- <url>file://${basedir}/target/repo/</url>
- </repository>
- <snapshotRepository>
- <id>localhost</id>
- <url>file://${basedir}/target/snapshot-repo/</url>
- </snapshotRepository>
- </distributionManagement>
-
-</project>
-
diff --git a/examples/moviefun-old/monitor/src/main/assembly/client.xml b/examples/moviefun-old/monitor/src/main/assembly/client.xml
deleted file mode 100644
index 978de75..0000000
--- a/examples/moviefun-old/monitor/src/main/assembly/client.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-
-<!-- $Rev: 779454 $ $Date: 2009-05-27 23:54:45 -0700 (Wed, 27 May 2009) $ -->
-
-<assembly>
- <id>client</id>
- <formats>
- <format>jar</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
- <fileSets>
- <fileSet>
- <directory>${basedir}</directory>
- <outputDirectory>META-INF</outputDirectory>
- <includes>
- <include>README.txt</include>
- </includes>
- </fileSet>
- </fileSets>
- <dependencySets>
- <dependencySet>
- <outputDirectory></outputDirectory>
- <outputFileNameMapping></outputFileNameMapping>
-
- <unpack>true</unpack>
- <!--<includes>-->
- <!--<include>org.apache.openejb:javaee-api-embedded</include>-->
- <!--<include>org.apache.xbean:xbean-finder-shaded</include>-->
- <!--<include>org.apache.xbean:xbean-asm-shaded</include>-->
- <!--<include>junit:junit</include>-->
- <!--<include>org.apache.openejb:openejb-itests-beans</include>-->
- <!--<include>org.apache.openejb:openejb-itests-servlets</include>-->
- <!--<include>org.apache.openejb:openejb-itests-client</include>-->
- <!--<include>org.apache.openejb:openejb-client</include>-->
-
- <!-- ActiveMQ -->
- <!--<include>org.apache.activemq:activemq-core</include>-->
- <!--<include>backport-util-concurrent:backport-util-concurrent</include>-->
- <!--<include>commons-logging:commons-logging</include>-->
- <!--</includes>-->
- </dependencySet>
- </dependencySets>
-</assembly>
-
diff --git a/examples/moviefun-old/monitor/src/main/java/org/superbiz/moviefun/NotificationMonitor.java b/examples/moviefun-old/monitor/src/main/java/org/superbiz/moviefun/NotificationMonitor.java
deleted file mode 100644
index a763f92..0000000
--- a/examples/moviefun-old/monitor/src/main/java/org/superbiz/moviefun/NotificationMonitor.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.superbiz.moviefun;
-
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import java.awt.AWTException;
-import java.awt.Image;
-import java.awt.MenuItem;
-import java.awt.PopupMenu;
-import java.awt.SystemTray;
-import java.awt.Toolkit;
-import java.awt.TrayIcon;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-public class NotificationMonitor {
- private static TrayIcon trayIcon;
-
- public static void main(String[] args) throws NamingException, InterruptedException, AWTException, MalformedURLException {
- addSystemTrayIcon();
-
- // Boot the embedded EJB Container
- new InitialContext();
-
- System.out.println("Starting monitor...");
- }
-
- private static void addSystemTrayIcon() throws AWTException, MalformedURLException {
- SystemTray tray = SystemTray.getSystemTray();
-
- URL moviepng = NotificationMonitor.class.getClassLoader().getResource("movie.png");
- Image image = Toolkit.getDefaultToolkit().getImage(moviepng);
-
- ActionListener exitListener = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- System.out.println("Exiting monitor...");
- System.exit(0);
- }
- };
-
- PopupMenu popup = new PopupMenu();
- MenuItem defaultItem = new MenuItem("Exit");
- defaultItem.addActionListener(exitListener);
- popup.add(defaultItem);
-
- trayIcon = new TrayIcon(image, "Notification Monitor", popup);
- trayIcon.setImageAutoSize(true);
- tray.add(trayIcon);
-
-
- }
-
- public static void showAlert(String message) {
- synchronized (trayIcon) {
- trayIcon.displayMessage("Alert received", message, TrayIcon.MessageType.WARNING);
- }
- }
-}
\ No newline at end of file
diff --git a/examples/moviefun-old/monitor/src/main/java/org/superbiz/moviefun/NotificationsBean.java b/examples/moviefun-old/monitor/src/main/java/org/superbiz/moviefun/NotificationsBean.java
deleted file mode 100644
index 5b473de..0000000
--- a/examples/moviefun-old/monitor/src/main/java/org/superbiz/moviefun/NotificationsBean.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.superbiz.moviefun;
-
-import javax.ejb.ActivationConfigProperty;
-import javax.ejb.MessageDriven;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
-import javax.jms.TextMessage;
-
-@MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
- @ActivationConfigProperty(propertyName = "destination", propertyValue = "notifications")})
-public class NotificationsBean implements MessageListener {
-
- public void onMessage(Message message) {
- try {
- TextMessage textMessage = (TextMessage) message;
- String text = textMessage.getText();
-
- System.out.println("");
- System.out.println("====================================");
- System.out.println("Notification received: " + text);
- System.out.println("====================================");
- System.out.println("");
-
- NotificationMonitor.showAlert(text);
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
-}
\ No newline at end of file
diff --git a/examples/moviefun-old/monitor/src/main/resources/META-INF/ejb-jar.xml b/examples/moviefun-old/monitor/src/main/resources/META-INF/ejb-jar.xml
deleted file mode 100644
index 433757b..0000000
--- a/examples/moviefun-old/monitor/src/main/resources/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1 +0,0 @@
-<ejb-jar/>
\ No newline at end of file
diff --git a/examples/moviefun-old/monitor/src/main/resources/jndi.properties b/examples/moviefun-old/monitor/src/main/resources/jndi.properties
deleted file mode 100644
index 1e613c0..0000000
--- a/examples/moviefun-old/monitor/src/main/resources/jndi.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# 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.
-#
-java.naming.factory.initial=org.apache.openejb.core.LocalInitialContextFactory
-Default\ JMS\ Resource\ Adapter=new://Resource?type=ActiveMQResourceAdapter
-Default\ JMS\ Resource\ Adapter.BrokerXmlConfig=broker:vm://localhost
-Default\ JMS\ Resource\ Adapter.ServerUrl=tcp://localhost:61616?waitForStart=20000&async=true
-Default\ JMS\ Resource\ Adapter.StartupTimeout=10000
diff --git a/examples/moviefun-old/monitor/src/main/resources/movie.png b/examples/moviefun-old/monitor/src/main/resources/movie.png
deleted file mode 100644
index fd7cd91..0000000
--- a/examples/moviefun-old/monitor/src/main/resources/movie.png
+++ /dev/null
Binary files differ
diff --git a/examples/moviefun-old/pom.xml b/examples/moviefun-old/pom.xml
deleted file mode 100644
index 9bb8ec5..0000000
--- a/examples/moviefun-old/pom.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-
-<!-- $Rev: 600338 $ $Date: 2007-12-02 09:08:04 -0800 (Sun, 02 Dec 2007) $ -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun</artifactId>
- <packaging>pom</packaging>
- <version>1.1-SNAPSHOT</version>
- <name>OpenEJB :: Web Examples :: Moviefun</name>
-
- <modules>
- <module>iface</module>
- <module>app</module>
- <module>monitor</module>
- </modules>
- <repositories>
- <repository>
- <id>apache-m2-snapshot</id>
- <name>Apache Snapshot Repository</name>
- <url>http://repository.apache.org/snapshots</url>
- </repository>
- </repositories>
-
- <!--
- This section allows you to configure where to publish libraries for sharing.
- It is not required and may be deleted. For more information see:
- http://maven.apache.org/plugins/maven-deploy-plugin/
- -->
- <distributionManagement>
- <repository>
- <id>localhost</id>
- <url>file://${basedir}/target/repo/</url>
- </repository>
- <snapshotRepository>
- <id>localhost</id>
- <url>file://${basedir}/target/snapshot-repo/</url>
- </snapshotRepository>
- </distributionManagement>
-
-</project>
diff --git a/examples/moviefun-plus/pom.xml b/examples/moviefun-plus/pom.xml
deleted file mode 100644
index e163392..0000000
--- a/examples/moviefun-plus/pom.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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. -->
-
-<!-- $Rev: 684173 $ $Date: 2008-08-08 20:13:24 -0700 (Fri, 08 Aug 2008) $ -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.superbiz</groupId>
- <artifactId>moviefun</artifactId>
- <packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
- <name>OpenEJB :: Web Examples :: Moviefun</name>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <repositories>
- <repository>
- <id>apache-m2-snapshot</id>
- <name>Apache Snapshot Repository</name>
- <url>http://repository.apache.org/snapshots</url>
- </repository>
- </repositories>
- <build>
- <finalName>moviefun</finalName>
- <defaultGoal>install</defaultGoal>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.12</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-eclipse-plugin</artifactId>
- <version>2.8</version>
- <configuration>
- <configuration>
- <wtpapplicationxml>true</wtpapplicationxml>
- <wtpversion>2.0</wtpversion>
- </configuration>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.openejb.maven</groupId>
- <artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
- <configuration>
- <tomeeClassifier>plus</tomeeClassifier>
- <args>-Xmx512m -XX:PermSize=256m</args>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0-4</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jstl</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>net.sourceforge.htmlunit</groupId>
- <artifactId>htmlunit</artifactId>
- <version>2.8</version>
- <type>jar</type>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>tomee-embedded</artifactId>
- <version>1.5.1-SNAPSHOT</version>
- <!--<classifier>uber</classifier>-->
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.4</version>
- </dependency>
- </dependencies>
- <!-- This section allows you to configure where to publish libraries for
- sharing. It is not required and may be deleted. For more information see:
- http://maven.apache.org/plugins/maven-deploy-plugin/ -->
- <distributionManagement>
- <repository>
- <id>localhost</id>
- <url>file://${basedir}/target/repo/</url>
- </repository>
- <snapshotRepository>
- <id>localhost</id>
- <url>file://${basedir}/target/snapshot-repo/</url>
- </snapshotRepository>
- </distributionManagement>
-</project>
diff --git a/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/ActionServlet.java b/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/ActionServlet.java
deleted file mode 100644
index 66596af..0000000
--- a/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/ActionServlet.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.ejb.EJB;
-import javax.servlet.ServletException;
-import javax.servlet.annotation.WebServlet;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * @version $Revision$ $Date$
- */
-@WebServlet("/moviefun/*")
-public class ActionServlet extends HttpServlet {
- private static final long serialVersionUID = -5832176047021911038L;
-
- public static int PAGE_SIZE = 5;
-
- @EJB(name = "movies")
- private MoviesBean moviesBean;
-
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
-
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- process(request, response);
- }
-
- private void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String action = request.getParameter("action");
-
- if ("Add".equals(action)) {
-
- String title = request.getParameter("title");
- String director = request.getParameter("director");
- String genre = request.getParameter("genre");
- int rating = Integer.parseInt(request.getParameter("rating"));
- int year = Integer.parseInt(request.getParameter("year"));
-
- Movie movie = new Movie(title, director, genre, rating, year);
-
- moviesBean.addMovie(movie);
- response.sendRedirect("moviefun");
- return;
-
- } else if ("Remove".equals(action)) {
-
- String[] ids = request.getParameterValues("id");
- for (String id : ids) {
- moviesBean.deleteMovieId(new Long(id));
- }
-
- response.sendRedirect("moviefun");
- return;
-
- } else {
- String key = request.getParameter("key");
- String field = request.getParameter("field");
-
- int count = 0;
-
- if (StringUtils.isEmpty(key) || StringUtils.isEmpty(field)) {
- count = moviesBean.count();
- key = "";
- field = "";
- } else {
- count = moviesBean.count(field, key);
- }
-
- int page = 1;
-
- try {
- page = Integer.parseInt(request.getParameter("page"));
- } catch (Exception e) {
- }
-
- int pageCount = (count / PAGE_SIZE);
- if (pageCount == 0 || count % PAGE_SIZE != 0) {
- pageCount++;
- }
-
- if (page < 1) {
- page = 1;
- }
-
- if (page > pageCount) {
- page = pageCount;
- }
-
- int start = (page - 1) * PAGE_SIZE;
- List<Movie> range;
-
- if (StringUtils.isEmpty(key) || StringUtils.isEmpty(field)) {
- range = moviesBean.findRange(start, PAGE_SIZE);
- } else {
- range = moviesBean.findRange(field, key, start, PAGE_SIZE);
- }
-
- int end = start + range.size();
-
- request.setAttribute("count", count);
- request.setAttribute("start", start + 1);
- request.setAttribute("end", end);
- request.setAttribute("page", page);
- request.setAttribute("pageCount", pageCount);
- request.setAttribute("movies", range);
- request.setAttribute("key", key);
- request.setAttribute("field", field);
- }
-
-
- request.getRequestDispatcher("WEB-INF/moviefun.jsp").forward(request, response);
- }
-
-}
diff --git a/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/Movie.java b/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/Movie.java
deleted file mode 100644
index 2bf93f5..0000000
--- a/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/Movie.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import java.io.Serializable;
-
-@Entity
-public class Movie implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private long id;
-
- private String director;
- private String title;
- private int year;
- private String genre;
- private int rating;
-
-
- public Movie() {
- }
-
- public Movie(String title, String director, String genre, int rating, int year) {
- this.director = director;
- this.title = title;
- this.year = year;
- this.genre = genre;
- this.rating = rating;
- }
-
- public Movie(String director, String title, int year) {
- this.director = director;
- this.title = title;
- this.year = year;
- }
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public String getDirector() {
- return director;
- }
-
- public void setDirector(String director) {
- this.director = director;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public int getYear() {
- return year;
- }
-
- public void setYear(int year) {
- this.year = year;
- }
-
- public String getGenre() {
- return genre;
- }
-
- public void setGenre(String genre) {
- this.genre = genre;
- }
-
- public int getRating() {
- return rating;
- }
-
- public void setRating(int rating) {
- this.rating = rating;
- }
-}
\ No newline at end of file
diff --git a/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/MoviesBean.java b/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/MoviesBean.java
deleted file mode 100644
index 8f80029..0000000
--- a/examples/moviefun-plus/src/main/java/org/superbiz/moviefun/MoviesBean.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import java.util.List;
-
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.persistence.metamodel.EntityType;
-
-@Stateless(name = "Movies")
-public class MoviesBean {
-
- @PersistenceContext(unitName = "movie-unit")
- private EntityManager entityManager;
-
- public Movie find(Long id) {
- return entityManager.find(Movie.class, id);
- }
-
- public void addMovie(Movie movie) {
- entityManager.persist(movie);
- }
-
- public void editMovie(Movie movie) {
- entityManager.merge(movie);
- }
-
- public void deleteMovie(Movie movie) {
- entityManager.remove(movie);
- }
-
- public void deleteMovieId(long id) {
- Movie movie = entityManager.find(Movie.class, id);
- deleteMovie(movie);
- }
-
- public List<Movie> getMovies() {
- CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
- cq.select(cq.from(Movie.class));
- return entityManager.createQuery(cq).getResultList();
- }
-
- public List<Movie> findRange(int firstResult, int maxResults) {
- CriteriaQuery<Movie> cq = entityManager.getCriteriaBuilder().createQuery(Movie.class);
- cq.select(cq.from(Movie.class));
- TypedQuery<Movie> q = entityManager.createQuery(cq);
- q.setMaxResults(maxResults);
- q.setFirstResult(firstResult);
- return q.getResultList();
- }
-
- public int count() {
- CriteriaQuery<Long> cq = entityManager.getCriteriaBuilder().createQuery(Long.class);
- Root<Movie> rt = cq.from(Movie.class);
- cq.select(entityManager.getCriteriaBuilder().count(rt));
- TypedQuery<Long> q = entityManager.createQuery(cq);
- return (q.getSingleResult()).intValue();
- }
-
- public int count(String field, String searchTerm) {
- CriteriaBuilder qb = entityManager.getCriteriaBuilder();
- CriteriaQuery<Long> cq = qb.createQuery(Long.class);
- Root<Movie> root = cq.from(Movie.class);
- EntityType<Movie> type = entityManager.getMetamodel().entity(Movie.class);
-
- Path<String> path = root.get(type.getDeclaredSingularAttribute(field, String.class));
- Predicate condition = qb.like(path, "%" + searchTerm + "%");
-
- cq.select(qb.count(root));
- cq.where(condition);
-
- return entityManager.createQuery(cq).getSingleResult().intValue();
- }
-
- public List<Movie> findRange(String field, String searchTerm, int firstResult, int maxResults) {
- CriteriaBuilder qb = entityManager.getCriteriaBuilder();
- CriteriaQuery<Movie> cq = qb.createQuery(Movie.class);
- Root<Movie> root = cq.from(Movie.class);
- EntityType<Movie> type = entityManager.getMetamodel().entity(Movie.class);
-
- Path<String> path = root.get(type.getDeclaredSingularAttribute(field, String.class));
- Predicate condition = qb.like(path, "%" + searchTerm + "%");
-
- cq.where(condition);
- TypedQuery<Movie> q = entityManager.createQuery(cq);
- q.setMaxResults(maxResults);
- q.setFirstResult(firstResult);
- return q.getResultList();
- }
-
- public void clean() {
- entityManager.createQuery("delete from Movie").executeUpdate();
- }
-}
\ No newline at end of file
diff --git a/examples/moviefun-plus/src/main/resources/META-INF/ejb-jar.xml b/examples/moviefun-plus/src/main/resources/META-INF/ejb-jar.xml
deleted file mode 100644
index 783333d..0000000
--- a/examples/moviefun-plus/src/main/resources/META-INF/ejb-jar.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<ejb-jar version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
-</ejb-jar>
\ No newline at end of file
diff --git a/examples/moviefun-plus/src/main/resources/META-INF/persistence.xml b/examples/moviefun-plus/src/main/resources/META-INF/persistence.xml
deleted file mode 100644
index ec38aaa..0000000
--- a/examples/moviefun-plus/src/main/resources/META-INF/persistence.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
- <persistence-unit name="movie-unit">
- <jta-data-source>movieDatabase</jta-data-source>
- <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>
- <class>org.superbiz.moviefun.Movie</class>
-
- <properties>
- <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
- </properties>
- </persistence-unit>
-</persistence>
diff --git a/examples/moviefun-plus/src/main/webapp/WEB-INF/moviefun.jsp b/examples/moviefun-plus/src/main/webapp/WEB-INF/moviefun.jsp
deleted file mode 100644
index 4c8931a..0000000
--- a/examples/moviefun-plus/src/main/webapp/WEB-INF/moviefun.jsp
+++ /dev/null
@@ -1,127 +0,0 @@
-<%--
- 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.
---%>
-<%@ page contentType="text/html;charset=UTF-8" language="java"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
-<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
-<c:set var="language" value="${pageContext.request.locale}" />
-<fmt:setLocale value="${language}" />
-
-<!DOCTYPE html>
-<html lang="${language}">
-<head>
-<meta charset="utf-8">
-<title>Moviefun</title>
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="description" content="">
-<meta name="author" content="">
-
-<!-- Le styles -->
-<link href="assets/css/bootstrap.css" rel="stylesheet">
-<link href="assets/css/movie.css" rel="stylesheet">
-<style>
-body {
- padding-top: 60px;
- /* 60px to make the container go all the way to the bottom of the topbar */
-}
-</style>
-<link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
-
-<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-<!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
- <div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <a class="btn btn-navbar" data-toggle="collapse"
- data-target=".nav-collapse"> <span class="icon-bar"></span> <span
- class="icon-bar"></span> <span class="icon-bar"></span>
- </a> <a class="brand" href="#">Moviefun</a>
-
- <form class="navbar-form pull-right">
- <select name="field">
- <option value="title">Title</option>
- <option value="director">Director</option>
- <option value="genre">Genre</option>
- </select> <input type="text" name="key" size="20">
- <button type="submit" class="btn">Search</button>
- </form>
-
- <!--/.nav-collapse -->
- </div>
- </div>
- </div>
-
- <div class="container">
-
- <h1>Moviefun</h1>
-
- <form class="movie-input-form form-inline" action="moviefun"
- method="post">
- <p>Add Movie</p>
- <input type="text" name="title" placeholder="Title" size="29" /> <input
- type="text" name="director" placeholder="Director" size="17" /> <input
- type="text" name="genre" placeholder="Genre" size="14" /> <input
- type="text" name="rating" placeholder="Rating" size="7" /> <input
- type="text" name="year" placeholder="Year" size="4"
- style="width: 110px;" /> <input type="submit" name="action"
- class="btn btn-primary" value="Add" />
- </form>
-
- <table class="table table-striped table-bordered">
- <thead>
- <tr>
- <th>Title</th>
- <th>Director</th>
- <th>Genre</th>
- <th>Rating</th>
- <th>Year</th>
- <th> </th>
- </tr>
- </thead>
- <tbody>
- <c:forEach items="${movies}" var="movie">
- <tr>
- <td><c:out value="${movie.title}" /></td>
- <td><c:out value="${movie.director}" /></td>
- <td><c:out value="${movie.genre}" /></td>
- <td><c:out value="${movie.rating}" /></td>
- <td><c:out value="${movie.year}" /></td>
- <td><a href="?action=Remove&id=${movie.id}"><i
- class="icon-trash"></i></a></td>
- </tr>
- </c:forEach>
- </tbody>
- </table>
- <c:if test="${count > 0}">
- <c:if test="${page > 1}">
- <a href="<c:url value="moviefun"><c:param name="page" value="${page - 1}"/><c:param name="field" value="${field}"/><c:param name="key" value="${key}"/></c:url>">< Prev</a>
- </c:if>
- Showing records ${start} to ${end} of ${count}
- <c:if test="${page < pageCount}">
- <a href="<c:url value="moviefun"><c:param name="page" value="${page + 1}"/><c:param name="field" value="${field}"/><c:param name="key" value="${key}"/></c:url>">Next ></a>
- </c:if>
- </c:if>
- </div>
- <!-- /container -->
-</body>
-</html>
diff --git a/examples/moviefun-plus/src/main/webapp/WEB-INF/web.xml b/examples/moviefun-plus/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 25cb9e4..0000000
--- a/examples/moviefun-plus/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
-</web-app>
diff --git a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap-responsive.css b/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap-responsive.css
deleted file mode 100644
index 9259d26..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap-responsive.css
+++ /dev/null
@@ -1,1058 +0,0 @@
-/*!
- * Bootstrap Responsive v2.1.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-.clearfix {
- *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.clearfix:after {
- clear: both;
-}
-
-.hide-text {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.input-block-level {
- display: block;
- width: 100%;
- min-height: 30px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.hidden {
- display: none;
- visibility: hidden;
-}
-
-.visible-phone {
- display: none !important;
-}
-
-.visible-tablet {
- display: none !important;
-}
-
-.hidden-desktop {
- display: none !important;
-}
-
-.visible-desktop {
- display: inherit !important;
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important ;
- }
- .visible-tablet {
- display: inherit !important;
- }
- .hidden-tablet {
- display: none !important;
- }
-}
-
-@media (max-width: 767px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important;
- }
- .visible-phone {
- display: inherit !important;
- }
- .hidden-phone {
- display: none !important;
- }
-}
-
-@media (min-width: 1200px) {
- .row {
- margin-left: -30px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 30px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 1170px;
- }
- .span12 {
- width: 1170px;
- }
- .span11 {
- width: 1070px;
- }
- .span10 {
- width: 970px;
- }
- .span9 {
- width: 870px;
- }
- .span8 {
- width: 770px;
- }
- .span7 {
- width: 670px;
- }
- .span6 {
- width: 570px;
- }
- .span5 {
- width: 470px;
- }
- .span4 {
- width: 370px;
- }
- .span3 {
- width: 270px;
- }
- .span2 {
- width: 170px;
- }
- .span1 {
- width: 70px;
- }
- .offset12 {
- margin-left: 1230px;
- }
- .offset11 {
- margin-left: 1130px;
- }
- .offset10 {
- margin-left: 1030px;
- }
- .offset9 {
- margin-left: 930px;
- }
- .offset8 {
- margin-left: 830px;
- }
- .offset7 {
- margin-left: 730px;
- }
- .offset6 {
- margin-left: 630px;
- }
- .offset5 {
- margin-left: 530px;
- }
- .offset4 {
- margin-left: 430px;
- }
- .offset3 {
- margin-left: 330px;
- }
- .offset2 {
- margin-left: 230px;
- }
- .offset1 {
- margin-left: 130px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- float: left;
- width: 100%;
- min-height: 30px;
- margin-left: 2.564102564102564%;
- *margin-left: 2.5109110747408616%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.45299145299145%;
- *width: 91.39979996362975%;
- }
- .row-fluid .span10 {
- width: 82.90598290598291%;
- *width: 82.8527914166212%;
- }
- .row-fluid .span9 {
- width: 74.35897435897436%;
- *width: 74.30578286961266%;
- }
- .row-fluid .span8 {
- width: 65.81196581196582%;
- *width: 65.75877432260411%;
- }
- .row-fluid .span7 {
- width: 57.26495726495726%;
- *width: 57.21176577559556%;
- }
- .row-fluid .span6 {
- width: 48.717948717948715%;
- *width: 48.664757228587014%;
- }
- .row-fluid .span5 {
- width: 40.17094017094017%;
- *width: 40.11774868157847%;
- }
- .row-fluid .span4 {
- width: 31.623931623931625%;
- *width: 31.570740134569924%;
- }
- .row-fluid .span3 {
- width: 23.076923076923077%;
- *width: 23.023731587561375%;
- }
- .row-fluid .span2 {
- width: 14.52991452991453%;
- *width: 14.476723040552828%;
- }
- .row-fluid .span1 {
- width: 5.982905982905983%;
- *width: 5.929714493544281%;
- }
- .row-fluid .offset12 {
- margin-left: 105.12820512820512%;
- *margin-left: 105.02182214948171%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.56410256410257%;
- *margin-left: 102.45771958537915%;
- }
- .row-fluid .offset11 {
- margin-left: 96.58119658119658%;
- *margin-left: 96.47481360247316%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.01709401709402%;
- *margin-left: 93.91071103837061%;
- }
- .row-fluid .offset10 {
- margin-left: 88.03418803418803%;
- *margin-left: 87.92780505546462%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.47008547008548%;
- *margin-left: 85.36370249136206%;
- }
- .row-fluid .offset9 {
- margin-left: 79.48717948717949%;
- *margin-left: 79.38079650845607%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 76.92307692307693%;
- *margin-left: 76.81669394435352%;
- }
- .row-fluid .offset8 {
- margin-left: 70.94017094017094%;
- *margin-left: 70.83378796144753%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.37606837606839%;
- *margin-left: 68.26968539734497%;
- }
- .row-fluid .offset7 {
- margin-left: 62.393162393162385%;
- *margin-left: 62.28677941443899%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.82905982905982%;
- *margin-left: 59.72267685033642%;
- }
- .row-fluid .offset6 {
- margin-left: 53.84615384615384%;
- *margin-left: 53.739770867430444%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.28205128205128%;
- *margin-left: 51.175668303327875%;
- }
- .row-fluid .offset5 {
- margin-left: 45.299145299145295%;
- *margin-left: 45.1927623204219%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.73504273504273%;
- *margin-left: 42.62865975631933%;
- }
- .row-fluid .offset4 {
- margin-left: 36.75213675213675%;
- *margin-left: 36.645753773413354%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.18803418803419%;
- *margin-left: 34.081651209310785%;
- }
- .row-fluid .offset3 {
- margin-left: 28.205128205128204%;
- *margin-left: 28.0987452264048%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.641025641025642%;
- *margin-left: 25.53464266230224%;
- }
- .row-fluid .offset2 {
- margin-left: 19.65811965811966%;
- *margin-left: 19.551736679396257%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.094017094017094%;
- *margin-left: 16.98763411529369%;
- }
- .row-fluid .offset1 {
- margin-left: 11.11111111111111%;
- *margin-left: 11.004728132387708%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.547008547008547%;
- *margin-left: 8.440625568285142%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 30px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 1156px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 1056px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 956px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 856px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 756px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 656px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 556px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 456px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 356px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 256px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 156px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 56px;
- }
- .thumbnails {
- margin-left: -30px;
- }
- .thumbnails > li {
- margin-left: 30px;
- }
- .row-fluid .thumbnails {
- margin-left: 0;
- }
-}
-
-@media (min-width: 768px) and (max-width: 979px) {
- .row {
- margin-left: -20px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 724px;
- }
- .span12 {
- width: 724px;
- }
- .span11 {
- width: 662px;
- }
- .span10 {
- width: 600px;
- }
- .span9 {
- width: 538px;
- }
- .span8 {
- width: 476px;
- }
- .span7 {
- width: 414px;
- }
- .span6 {
- width: 352px;
- }
- .span5 {
- width: 290px;
- }
- .span4 {
- width: 228px;
- }
- .span3 {
- width: 166px;
- }
- .span2 {
- width: 104px;
- }
- .span1 {
- width: 42px;
- }
- .offset12 {
- margin-left: 764px;
- }
- .offset11 {
- margin-left: 702px;
- }
- .offset10 {
- margin-left: 640px;
- }
- .offset9 {
- margin-left: 578px;
- }
- .offset8 {
- margin-left: 516px;
- }
- .offset7 {
- margin-left: 454px;
- }
- .offset6 {
- margin-left: 392px;
- }
- .offset5 {
- margin-left: 330px;
- }
- .offset4 {
- margin-left: 268px;
- }
- .offset3 {
- margin-left: 206px;
- }
- .offset2 {
- margin-left: 144px;
- }
- .offset1 {
- margin-left: 82px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- float: left;
- width: 100%;
- min-height: 30px;
- margin-left: 2.7624309392265194%;
- *margin-left: 2.709239449864817%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.43646408839778%;
- *width: 91.38327259903608%;
- }
- .row-fluid .span10 {
- width: 82.87292817679558%;
- *width: 82.81973668743387%;
- }
- .row-fluid .span9 {
- width: 74.30939226519337%;
- *width: 74.25620077583166%;
- }
- .row-fluid .span8 {
- width: 65.74585635359117%;
- *width: 65.69266486422946%;
- }
- .row-fluid .span7 {
- width: 57.18232044198895%;
- *width: 57.12912895262725%;
- }
- .row-fluid .span6 {
- width: 48.61878453038674%;
- *width: 48.56559304102504%;
- }
- .row-fluid .span5 {
- width: 40.05524861878453%;
- *width: 40.00205712942283%;
- }
- .row-fluid .span4 {
- width: 31.491712707182323%;
- *width: 31.43852121782062%;
- }
- .row-fluid .span3 {
- width: 22.92817679558011%;
- *width: 22.87498530621841%;
- }
- .row-fluid .span2 {
- width: 14.3646408839779%;
- *width: 14.311449394616199%;
- }
- .row-fluid .span1 {
- width: 5.801104972375691%;
- *width: 5.747913483013988%;
- }
- .row-fluid .offset12 {
- margin-left: 105.52486187845304%;
- *margin-left: 105.41847889972962%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.76243093922652%;
- *margin-left: 102.6560479605031%;
- }
- .row-fluid .offset11 {
- margin-left: 96.96132596685082%;
- *margin-left: 96.8549429881274%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.1988950276243%;
- *margin-left: 94.09251204890089%;
- }
- .row-fluid .offset10 {
- margin-left: 88.39779005524862%;
- *margin-left: 88.2914070765252%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.6353591160221%;
- *margin-left: 85.52897613729868%;
- }
- .row-fluid .offset9 {
- margin-left: 79.8342541436464%;
- *margin-left: 79.72787116492299%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 77.07182320441989%;
- *margin-left: 76.96544022569647%;
- }
- .row-fluid .offset8 {
- margin-left: 71.2707182320442%;
- *margin-left: 71.16433525332079%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.50828729281768%;
- *margin-left: 68.40190431409427%;
- }
- .row-fluid .offset7 {
- margin-left: 62.70718232044199%;
- *margin-left: 62.600799341718584%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.94475138121547%;
- *margin-left: 59.838368402492065%;
- }
- .row-fluid .offset6 {
- margin-left: 54.14364640883978%;
- *margin-left: 54.037263430116376%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.38121546961326%;
- *margin-left: 51.27483249088986%;
- }
- .row-fluid .offset5 {
- margin-left: 45.58011049723757%;
- *margin-left: 45.47372751851417%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.81767955801105%;
- *margin-left: 42.71129657928765%;
- }
- .row-fluid .offset4 {
- margin-left: 37.01657458563536%;
- *margin-left: 36.91019160691196%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.25414364640884%;
- *margin-left: 34.14776066768544%;
- }
- .row-fluid .offset3 {
- margin-left: 28.45303867403315%;
- *margin-left: 28.346655695309746%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.69060773480663%;
- *margin-left: 25.584224756083227%;
- }
- .row-fluid .offset2 {
- margin-left: 19.88950276243094%;
- *margin-left: 19.783119783707537%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.12707182320442%;
- *margin-left: 17.02068884448102%;
- }
- .row-fluid .offset1 {
- margin-left: 11.32596685082873%;
- *margin-left: 11.219583872105325%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.56353591160221%;
- *margin-left: 8.457152932878806%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 710px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 648px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 586px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 524px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 462px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 400px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 338px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 276px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 214px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 152px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 90px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 28px;
- }
-}
-
-@media (max-width: 767px) {
- body {
- padding-right: 20px;
- padding-left: 20px;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom,
- .navbar-static-top {
- margin-right: -20px;
- margin-left: -20px;
- }
- .container-fluid {
- padding: 0;
- }
- .dl-horizontal dt {
- float: none;
- width: auto;
- clear: none;
- text-align: left;
- }
- .dl-horizontal dd {
- margin-left: 0;
- }
- .container {
- width: auto;
- }
- .row-fluid {
- width: 100%;
- }
- .row,
- .thumbnails {
- margin-left: 0;
- }
- .thumbnails > li {
- float: none;
- margin-left: 0;
- }
- [class*="span"],
- .row-fluid [class*="span"] {
- display: block;
- float: none;
- width: 100%;
- margin-left: 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .span12,
- .row-fluid .span12 {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .input-large,
- .input-xlarge,
- .input-xxlarge,
- input[class*="span"],
- select[class*="span"],
- textarea[class*="span"],
- .uneditable-input {
- display: block;
- width: 100%;
- min-height: 30px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .input-prepend input,
- .input-append input,
- .input-prepend input[class*="span"],
- .input-append input[class*="span"] {
- display: inline-block;
- width: auto;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 0;
- }
- .modal {
- position: fixed;
- top: 20px;
- right: 20px;
- left: 20px;
- width: auto;
- margin: 0;
- }
- .modal.fade.in {
- top: auto;
- }
-}
-
-@media (max-width: 480px) {
- .nav-collapse {
- -webkit-transform: translate3d(0, 0, 0);
- }
- .page-header h1 small {
- display: block;
- line-height: 20px;
- }
- input[type="checkbox"],
- input[type="radio"] {
- border: 1px solid #ccc;
- }
- .form-horizontal .control-label {
- float: none;
- width: auto;
- padding-top: 0;
- text-align: left;
- }
- .form-horizontal .controls {
- margin-left: 0;
- }
- .form-horizontal .control-list {
- padding-top: 0;
- }
- .form-horizontal .form-actions {
- padding-right: 10px;
- padding-left: 10px;
- }
- .modal {
- top: 10px;
- right: 10px;
- left: 10px;
- }
- .modal-header .close {
- padding: 10px;
- margin: -10px;
- }
- .carousel-caption {
- position: static;
- }
-}
-
-@media (max-width: 979px) {
- body {
- padding-top: 0;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- position: static;
- }
- .navbar-fixed-top {
- margin-bottom: 20px;
- }
- .navbar-fixed-bottom {
- margin-top: 20px;
- }
- .navbar-fixed-top .navbar-inner,
- .navbar-fixed-bottom .navbar-inner {
- padding: 5px;
- }
- .navbar .container {
- width: auto;
- padding: 0;
- }
- .navbar .brand {
- padding-right: 10px;
- padding-left: 10px;
- margin: 0 0 0 -5px;
- }
- .nav-collapse {
- clear: both;
- }
- .nav-collapse .nav {
- float: none;
- margin: 0 0 10px;
- }
- .nav-collapse .nav > li {
- float: none;
- }
- .nav-collapse .nav > li > a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > .divider-vertical {
- display: none;
- }
- .nav-collapse .nav .nav-header {
- color: #777777;
- text-shadow: none;
- }
- .nav-collapse .nav > li > a,
- .nav-collapse .dropdown-menu a {
- padding: 9px 15px;
- font-weight: bold;
- color: #777777;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- }
- .nav-collapse .btn {
- padding: 4px 10px 4px;
- font-weight: normal;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- }
- .nav-collapse .dropdown-menu li + li a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > li > a:hover,
- .nav-collapse .dropdown-menu a:hover {
- background-color: #f2f2f2;
- }
- .navbar-inverse .nav-collapse .nav > li > a:hover,
- .navbar-inverse .nav-collapse .dropdown-menu a:hover {
- background-color: #111111;
- }
- .nav-collapse.in .btn-group {
- padding: 0;
- margin-top: 5px;
- }
- .nav-collapse .dropdown-menu {
- position: static;
- top: auto;
- left: auto;
- display: block;
- float: none;
- max-width: none;
- padding: 0;
- margin: 0 15px;
- background-color: transparent;
- border: none;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
- }
- .nav-collapse .dropdown-menu:before,
- .nav-collapse .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .dropdown-menu .divider {
- display: none;
- }
- .nav-collapse .nav > li > .dropdown-menu:before,
- .nav-collapse .nav > li > .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .navbar-form,
- .nav-collapse .navbar-search {
- float: none;
- padding: 10px 15px;
- margin: 10px 0;
- border-top: 1px solid #f2f2f2;
- border-bottom: 1px solid #f2f2f2;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- }
- .navbar-inverse .nav-collapse .navbar-form,
- .navbar-inverse .nav-collapse .navbar-search {
- border-top-color: #111111;
- border-bottom-color: #111111;
- }
- .navbar .nav-collapse .nav.pull-right {
- float: none;
- margin-left: 0;
- }
- .nav-collapse,
- .nav-collapse.collapse {
- height: 0;
- overflow: hidden;
- }
- .navbar .btn-navbar {
- display: block;
- }
- .navbar-static .navbar-inner {
- padding-right: 10px;
- padding-left: 10px;
- }
-}
-
-@media (min-width: 980px) {
- .nav-collapse.collapse {
- height: auto !important;
- overflow: visible !important;
- }
-}
diff --git a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap-responsive.min.css b/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap-responsive.min.css
deleted file mode 100644
index 7b0158d..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap-responsive.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Bootstrap Responsive v2.1.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade.in{top:auto}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
diff --git a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap.css b/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap.css
deleted file mode 100644
index 9fa6f76..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap.css
+++ /dev/null
@@ -1,5774 +0,0 @@
-/*!
- * Bootstrap v2.1.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
- display: block;
-}
-
-audio,
-canvas,
-video {
- display: inline-block;
- *display: inline;
- *zoom: 1;
-}
-
-audio:not([controls]) {
- display: none;
-}
-
-html {
- font-size: 100%;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-
-a:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-a:hover,
-a:active {
- outline: 0;
-}
-
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-img {
- width: auto\9;
- height: auto;
- max-width: 100%;
- vertical-align: middle;
- border: 0;
- -ms-interpolation-mode: bicubic;
-}
-
-#map_canvas img {
- max-width: none;
-}
-
-button,
-input,
-select,
-textarea {
- margin: 0;
- font-size: 100%;
- vertical-align: middle;
-}
-
-button,
-input {
- *overflow: visible;
- line-height: normal;
-}
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- cursor: pointer;
- -webkit-appearance: button;
-}
-
-input[type="search"] {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- -webkit-appearance: textfield;
-}
-
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
- -webkit-appearance: none;
-}
-
-textarea {
- overflow: auto;
- vertical-align: top;
-}
-
-.clearfix {
- *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.clearfix:after {
- clear: both;
-}
-
-.hide-text {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.input-block-level {
- display: block;
- width: 100%;
- min-height: 30px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-body {
- margin: 0;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 14px;
- line-height: 20px;
- color: #333333;
- background-color: #ffffff;
-}
-
-a {
- color: #0088cc;
- text-decoration: none;
-}
-
-a:hover {
- color: #005580;
- text-decoration: underline;
-}
-
-.img-rounded {
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-
-.img-polaroid {
- padding: 4px;
- background-color: #fff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-
-.img-circle {
- -webkit-border-radius: 500px;
- -moz-border-radius: 500px;
- border-radius: 500px;
-}
-
-.row {
- margin-left: -20px;
- *zoom: 1;
-}
-
-.row:before,
-.row:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.row:after {
- clear: both;
-}
-
-[class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
-}
-
-.container,
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
-}
-
-.span12 {
- width: 940px;
-}
-
-.span11 {
- width: 860px;
-}
-
-.span10 {
- width: 780px;
-}
-
-.span9 {
- width: 700px;
-}
-
-.span8 {
- width: 620px;
-}
-
-.span7 {
- width: 540px;
-}
-
-.span6 {
- width: 460px;
-}
-
-.span5 {
- width: 380px;
-}
-
-.span4 {
- width: 300px;
-}
-
-.span3 {
- width: 220px;
-}
-
-.span2 {
- width: 140px;
-}
-
-.span1 {
- width: 60px;
-}
-
-.offset12 {
- margin-left: 980px;
-}
-
-.offset11 {
- margin-left: 900px;
-}
-
-.offset10 {
- margin-left: 820px;
-}
-
-.offset9 {
- margin-left: 740px;
-}
-
-.offset8 {
- margin-left: 660px;
-}
-
-.offset7 {
- margin-left: 580px;
-}
-
-.offset6 {
- margin-left: 500px;
-}
-
-.offset5 {
- margin-left: 420px;
-}
-
-.offset4 {
- margin-left: 340px;
-}
-
-.offset3 {
- margin-left: 260px;
-}
-
-.offset2 {
- margin-left: 180px;
-}
-
-.offset1 {
- margin-left: 100px;
-}
-
-.row-fluid {
- width: 100%;
- *zoom: 1;
-}
-
-.row-fluid:before,
-.row-fluid:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.row-fluid:after {
- clear: both;
-}
-
-.row-fluid [class*="span"] {
- display: block;
- float: left;
- width: 100%;
- min-height: 30px;
- margin-left: 2.127659574468085%;
- *margin-left: 2.074468085106383%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.row-fluid [class*="span"]:first-child {
- margin-left: 0;
-}
-
-.row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
-}
-
-.row-fluid .span11 {
- width: 91.48936170212765%;
- *width: 91.43617021276594%;
-}
-
-.row-fluid .span10 {
- width: 82.97872340425532%;
- *width: 82.92553191489361%;
-}
-
-.row-fluid .span9 {
- width: 74.46808510638297%;
- *width: 74.41489361702126%;
-}
-
-.row-fluid .span8 {
- width: 65.95744680851064%;
- *width: 65.90425531914893%;
-}
-
-.row-fluid .span7 {
- width: 57.44680851063829%;
- *width: 57.39361702127659%;
-}
-
-.row-fluid .span6 {
- width: 48.93617021276595%;
- *width: 48.88297872340425%;
-}
-
-.row-fluid .span5 {
- width: 40.42553191489362%;
- *width: 40.37234042553192%;
-}
-
-.row-fluid .span4 {
- width: 31.914893617021278%;
- *width: 31.861702127659576%;
-}
-
-.row-fluid .span3 {
- width: 23.404255319148934%;
- *width: 23.351063829787233%;
-}
-
-.row-fluid .span2 {
- width: 14.893617021276595%;
- *width: 14.840425531914894%;
-}
-
-.row-fluid .span1 {
- width: 6.382978723404255%;
- *width: 6.329787234042553%;
-}
-
-.row-fluid .offset12 {
- margin-left: 104.25531914893617%;
- *margin-left: 104.14893617021275%;
-}
-
-.row-fluid .offset12:first-child {
- margin-left: 102.12765957446808%;
- *margin-left: 102.02127659574467%;
-}
-
-.row-fluid .offset11 {
- margin-left: 95.74468085106382%;
- *margin-left: 95.6382978723404%;
-}
-
-.row-fluid .offset11:first-child {
- margin-left: 93.61702127659574%;
- *margin-left: 93.51063829787232%;
-}
-
-.row-fluid .offset10 {
- margin-left: 87.23404255319149%;
- *margin-left: 87.12765957446807%;
-}
-
-.row-fluid .offset10:first-child {
- margin-left: 85.1063829787234%;
- *margin-left: 84.99999999999999%;
-}
-
-.row-fluid .offset9 {
- margin-left: 78.72340425531914%;
- *margin-left: 78.61702127659572%;
-}
-
-.row-fluid .offset9:first-child {
- margin-left: 76.59574468085106%;
- *margin-left: 76.48936170212764%;
-}
-
-.row-fluid .offset8 {
- margin-left: 70.2127659574468%;
- *margin-left: 70.10638297872339%;
-}
-
-.row-fluid .offset8:first-child {
- margin-left: 68.08510638297872%;
- *margin-left: 67.9787234042553%;
-}
-
-.row-fluid .offset7 {
- margin-left: 61.70212765957446%;
- *margin-left: 61.59574468085106%;
-}
-
-.row-fluid .offset7:first-child {
- margin-left: 59.574468085106375%;
- *margin-left: 59.46808510638297%;
-}
-
-.row-fluid .offset6 {
- margin-left: 53.191489361702125%;
- *margin-left: 53.085106382978715%;
-}
-
-.row-fluid .offset6:first-child {
- margin-left: 51.063829787234035%;
- *margin-left: 50.95744680851063%;
-}
-
-.row-fluid .offset5 {
- margin-left: 44.68085106382979%;
- *margin-left: 44.57446808510638%;
-}
-
-.row-fluid .offset5:first-child {
- margin-left: 42.5531914893617%;
- *margin-left: 42.4468085106383%;
-}
-
-.row-fluid .offset4 {
- margin-left: 36.170212765957444%;
- *margin-left: 36.06382978723405%;
-}
-
-.row-fluid .offset4:first-child {
- margin-left: 34.04255319148936%;
- *margin-left: 33.93617021276596%;
-}
-
-.row-fluid .offset3 {
- margin-left: 27.659574468085104%;
- *margin-left: 27.5531914893617%;
-}
-
-.row-fluid .offset3:first-child {
- margin-left: 25.53191489361702%;
- *margin-left: 25.425531914893618%;
-}
-
-.row-fluid .offset2 {
- margin-left: 19.148936170212764%;
- *margin-left: 19.04255319148936%;
-}
-
-.row-fluid .offset2:first-child {
- margin-left: 17.02127659574468%;
- *margin-left: 16.914893617021278%;
-}
-
-.row-fluid .offset1 {
- margin-left: 10.638297872340425%;
- *margin-left: 10.53191489361702%;
-}
-
-.row-fluid .offset1:first-child {
- margin-left: 8.51063829787234%;
- *margin-left: 8.404255319148938%;
-}
-
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
- display: none;
-}
-
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
- float: right;
-}
-
-.container {
- margin-right: auto;
- margin-left: auto;
- *zoom: 1;
-}
-
-.container:before,
-.container:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.container:after {
- clear: both;
-}
-
-.container-fluid {
- padding-right: 20px;
- padding-left: 20px;
- *zoom: 1;
-}
-
-.container-fluid:before,
-.container-fluid:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.container-fluid:after {
- clear: both;
-}
-
-p {
- margin: 0 0 10px;
-}
-
-.lead {
- margin-bottom: 20px;
- font-size: 21px;
- font-weight: 200;
- line-height: 30px;
-}
-
-small {
- font-size: 85%;
-}
-
-strong {
- font-weight: bold;
-}
-
-em {
- font-style: italic;
-}
-
-cite {
- font-style: normal;
-}
-
-.muted {
- color: #999999;
-}
-
-.text-warning {
- color: #c09853;
-}
-
-.text-error {
- color: #b94a48;
-}
-
-.text-info {
- color: #3a87ad;
-}
-
-.text-success {
- color: #468847;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 10px 0;
- font-family: inherit;
- font-weight: bold;
- line-height: 1;
- color: inherit;
- text-rendering: optimizelegibility;
-}
-
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
- font-weight: normal;
- line-height: 1;
- color: #999999;
-}
-
-h1 {
- font-size: 36px;
- line-height: 40px;
-}
-
-h2 {
- font-size: 30px;
- line-height: 40px;
-}
-
-h3 {
- font-size: 24px;
- line-height: 40px;
-}
-
-h4 {
- font-size: 18px;
- line-height: 20px;
-}
-
-h5 {
- font-size: 14px;
- line-height: 20px;
-}
-
-h6 {
- font-size: 12px;
- line-height: 20px;
-}
-
-h1 small {
- font-size: 24px;
-}
-
-h2 small {
- font-size: 18px;
-}
-
-h3 small {
- font-size: 14px;
-}
-
-h4 small {
- font-size: 14px;
-}
-
-.page-header {
- padding-bottom: 9px;
- margin: 20px 0 30px;
- border-bottom: 1px solid #eeeeee;
-}
-
-ul,
-ol {
- padding: 0;
- margin: 0 0 10px 25px;
-}
-
-ul ul,
-ul ol,
-ol ol,
-ol ul {
- margin-bottom: 0;
-}
-
-li {
- line-height: 20px;
-}
-
-ul.unstyled,
-ol.unstyled {
- margin-left: 0;
- list-style: none;
-}
-
-dl {
- margin-bottom: 20px;
-}
-
-dt,
-dd {
- line-height: 20px;
-}
-
-dt {
- font-weight: bold;
-}
-
-dd {
- margin-left: 10px;
-}
-
-.dl-horizontal {
- *zoom: 1;
-}
-
-.dl-horizontal:before,
-.dl-horizontal:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.dl-horizontal:after {
- clear: both;
-}
-
-.dl-horizontal dt {
- float: left;
- width: 160px;
- overflow: hidden;
- clear: left;
- text-align: right;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.dl-horizontal dd {
- margin-left: 180px;
-}
-
-hr {
- margin: 20px 0;
- border: 0;
- border-top: 1px solid #eeeeee;
- border-bottom: 1px solid #ffffff;
-}
-
-abbr[title] {
- cursor: help;
- border-bottom: 1px dotted #999999;
-}
-
-abbr.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-
-blockquote {
- padding: 0 0 0 15px;
- margin: 0 0 20px;
- border-left: 5px solid #eeeeee;
-}
-
-blockquote p {
- margin-bottom: 0;
- font-size: 16px;
- font-weight: 300;
- line-height: 25px;
-}
-
-blockquote small {
- display: block;
- line-height: 20px;
- color: #999999;
-}
-
-blockquote small:before {
- content: '\2014 \00A0';
-}
-
-blockquote.pull-right {
- float: right;
- padding-right: 15px;
- padding-left: 0;
- border-right: 5px solid #eeeeee;
- border-left: 0;
-}
-
-blockquote.pull-right p,
-blockquote.pull-right small {
- text-align: right;
-}
-
-blockquote.pull-right small:before {
- content: '';
-}
-
-blockquote.pull-right small:after {
- content: '\00A0 \2014';
-}
-
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
- content: "";
-}
-
-address {
- display: block;
- margin-bottom: 20px;
- font-style: normal;
- line-height: 20px;
-}
-
-code,
-pre {
- padding: 0 3px 2px;
- font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
- font-size: 12px;
- color: #333333;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-
-code {
- padding: 2px 4px;
- color: #d14;
- background-color: #f7f7f9;
- border: 1px solid #e1e1e8;
-}
-
-pre {
- display: block;
- padding: 9.5px;
- margin: 0 0 10px;
- font-size: 13px;
- line-height: 20px;
- word-break: break-all;
- word-wrap: break-word;
- white-space: pre;
- white-space: pre-wrap;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.15);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-pre.prettyprint {
- margin-bottom: 20px;
-}
-
-pre code {
- padding: 0;
- color: inherit;
- background-color: transparent;
- border: 0;
-}
-
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-
-form {
- margin: 0 0 20px;
-}
-
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
-}
-
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 20px;
- font-size: 21px;
- line-height: 40px;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-
-legend small {
- font-size: 15px;
- color: #999999;
-}
-
-label,
-input,
-button,
-select,
-textarea {
- font-size: 14px;
- font-weight: normal;
- line-height: 20px;
-}
-
-input,
-button,
-select,
-textarea {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-
-label {
- display: block;
- margin-bottom: 5px;
-}
-
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
- display: inline-block;
- height: 20px;
- padding: 4px 6px;
- margin-bottom: 9px;
- font-size: 14px;
- line-height: 20px;
- color: #555555;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-
-input,
-textarea,
-.uneditable-input {
- width: 206px;
-}
-
-textarea {
- height: auto;
-}
-
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
- background-color: #ffffff;
- border: 1px solid #cccccc;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
- -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
- -o-transition: border linear 0.2s, box-shadow linear 0.2s;
- transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-
-textarea:focus,
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="datetime"]:focus,
-input[type="datetime-local"]:focus,
-input[type="date"]:focus,
-input[type="month"]:focus,
-input[type="time"]:focus,
-input[type="week"]:focus,
-input[type="number"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus,
-input[type="search"]:focus,
-input[type="tel"]:focus,
-input[type="color"]:focus,
-.uneditable-input:focus {
- border-color: rgba(82, 168, 236, 0.8);
- outline: 0;
- outline: thin dotted \9;
- /* IE6-9 */
-
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-}
-
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- *margin-top: 0;
- line-height: normal;
- cursor: pointer;
-}
-
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
- width: auto;
-}
-
-select,
-input[type="file"] {
- height: 30px;
- /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
- *margin-top: 4px;
- /* For IE7, add top margin to align select with labels */
-
- line-height: 30px;
-}
-
-select {
- width: 220px;
- background-color: #ffffff;
- border: 1px solid #cccccc;
-}
-
-select[multiple],
-select[size] {
- height: auto;
-}
-
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-.uneditable-input,
-.uneditable-textarea {
- color: #999999;
- cursor: not-allowed;
- background-color: #fcfcfc;
- border-color: #cccccc;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-}
-
-.uneditable-input {
- overflow: hidden;
- white-space: nowrap;
-}
-
-.uneditable-textarea {
- width: auto;
- height: auto;
-}
-
-input:-moz-placeholder,
-textarea:-moz-placeholder {
- color: #999999;
-}
-
-input:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
- color: #999999;
-}
-
-input::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
- color: #999999;
-}
-
-.radio,
-.checkbox {
- min-height: 18px;
- padding-left: 18px;
-}
-
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
- float: left;
- margin-left: -18px;
-}
-
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
- padding-top: 5px;
-}
-
-.radio.inline,
-.checkbox.inline {
- display: inline-block;
- padding-top: 5px;
- margin-bottom: 0;
- vertical-align: middle;
-}
-
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
- margin-left: 10px;
-}
-
-.input-mini {
- width: 60px;
-}
-
-.input-small {
- width: 90px;
-}
-
-.input-medium {
- width: 150px;
-}
-
-.input-large {
- width: 210px;
-}
-
-.input-xlarge {
- width: 270px;
-}
-
-.input-xxlarge {
- width: 530px;
-}
-
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
- float: none;
- margin-left: 0;
-}
-
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
- display: inline-block;
-}
-
-input,
-textarea,
-.uneditable-input {
- margin-left: 0;
-}
-
-.controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
-}
-
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
- width: 926px;
-}
-
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
- width: 846px;
-}
-
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
- width: 766px;
-}
-
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
- width: 686px;
-}
-
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
- width: 606px;
-}
-
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
- width: 526px;
-}
-
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
- width: 446px;
-}
-
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
- width: 366px;
-}
-
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
- width: 286px;
-}
-
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
- width: 206px;
-}
-
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
- width: 126px;
-}
-
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
- width: 46px;
-}
-
-.controls-row {
- *zoom: 1;
-}
-
-.controls-row:before,
-.controls-row:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.controls-row:after {
- clear: both;
-}
-
-.controls-row [class*="span"] {
- float: left;
-}
-
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
- cursor: not-allowed;
- background-color: #eeeeee;
-}
-
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
- background-color: transparent;
-}
-
-.control-group.warning > label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
- color: #c09853;
-}
-
-.control-group.warning .checkbox,
-.control-group.warning .radio,
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
- color: #c09853;
-}
-
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
- border-color: #c09853;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
- border-color: #a47e3c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-}
-
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
- color: #c09853;
- background-color: #fcf8e3;
- border-color: #c09853;
-}
-
-.control-group.error > label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
- color: #b94a48;
-}
-
-.control-group.error .checkbox,
-.control-group.error .radio,
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
- color: #b94a48;
-}
-
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
- border-color: #b94a48;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
- border-color: #953b39;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-}
-
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
- color: #b94a48;
- background-color: #f2dede;
- border-color: #b94a48;
-}
-
-.control-group.success > label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
- color: #468847;
-}
-
-.control-group.success .checkbox,
-.control-group.success .radio,
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
- color: #468847;
-}
-
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
- border-color: #468847;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
- border-color: #356635;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-}
-
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
- color: #468847;
- background-color: #dff0d8;
- border-color: #468847;
-}
-
-.control-group.info > label,
-.control-group.info .help-block,
-.control-group.info .help-inline {
- color: #3a87ad;
-}
-
-.control-group.info .checkbox,
-.control-group.info .radio,
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
- color: #3a87ad;
-}
-
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
- border-color: #3a87ad;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-.control-group.info input:focus,
-.control-group.info select:focus,
-.control-group.info textarea:focus {
- border-color: #2d6987;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
-}
-
-.control-group.info .input-prepend .add-on,
-.control-group.info .input-append .add-on {
- color: #3a87ad;
- background-color: #d9edf7;
- border-color: #3a87ad;
-}
-
-input:focus:required:invalid,
-textarea:focus:required:invalid,
-select:focus:required:invalid {
- color: #b94a48;
- border-color: #ee5f5b;
-}
-
-input:focus:required:invalid:focus,
-textarea:focus:required:invalid:focus,
-select:focus:required:invalid:focus {
- border-color: #e9322d;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
- box-shadow: 0 0 6px #f8b9b7;
-}
-
-.form-actions {
- padding: 19px 20px 20px;
- margin-top: 20px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border-top: 1px solid #e5e5e5;
- *zoom: 1;
-}
-
-.form-actions:before,
-.form-actions:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.form-actions:after {
- clear: both;
-}
-
-.help-block,
-.help-inline {
- color: #595959;
-}
-
-.help-block {
- display: block;
- margin-bottom: 10px;
-}
-
-.help-inline {
- display: inline-block;
- *display: inline;
- padding-left: 5px;
- vertical-align: middle;
- *zoom: 1;
-}
-
-.input-append,
-.input-prepend {
- margin-bottom: 5px;
- font-size: 0;
- white-space: nowrap;
-}
-
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input {
- position: relative;
- margin-bottom: 0;
- *margin-left: 0;
- font-size: 14px;
- vertical-align: top;
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-
-.input-append input:focus,
-.input-prepend input:focus,
-.input-append select:focus,
-.input-prepend select:focus,
-.input-append .uneditable-input:focus,
-.input-prepend .uneditable-input:focus {
- z-index: 2;
-}
-
-.input-append .add-on,
-.input-prepend .add-on {
- display: inline-block;
- width: auto;
- height: 20px;
- min-width: 16px;
- padding: 4px 5px;
- font-size: 14px;
- font-weight: normal;
- line-height: 20px;
- text-align: center;
- text-shadow: 0 1px 0 #ffffff;
- background-color: #eeeeee;
- border: 1px solid #ccc;
-}
-
-.input-append .add-on,
-.input-prepend .add-on,
-.input-append .btn,
-.input-prepend .btn {
- vertical-align: top;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.input-append .active,
-.input-prepend .active {
- background-color: #a9dba9;
- border-color: #46a546;
-}
-
-.input-prepend .add-on,
-.input-prepend .btn {
- margin-right: -1px;
-}
-
-.input-prepend .add-on:first-child,
-.input-prepend .btn:first-child {
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-
-.input-append input,
-.input-append select,
-.input-append .uneditable-input {
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-
-.input-append .add-on,
-.input-append .btn {
- margin-left: -1px;
-}
-
-.input-append .add-on:last-child,
-.input-append .btn:last-child {
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-
-.input-prepend.input-append input,
-.input-prepend.input-append select,
-.input-prepend.input-append .uneditable-input {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.input-prepend.input-append .add-on:first-child,
-.input-prepend.input-append .btn:first-child {
- margin-right: -1px;
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-
-.input-prepend.input-append .add-on:last-child,
-.input-prepend.input-append .btn:last-child {
- margin-left: -1px;
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-
-input.search-query {
- padding-right: 14px;
- padding-right: 4px \9;
- padding-left: 14px;
- padding-left: 4px \9;
- /* IE7-8 doesn't have border-radius, so don't indent the padding */
-
- margin-bottom: 0;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
-}
-
-/* Allow for input prepend/append in search forms */
-
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.form-search .input-append .search-query {
- -webkit-border-radius: 14px 0 0 14px;
- -moz-border-radius: 14px 0 0 14px;
- border-radius: 14px 0 0 14px;
-}
-
-.form-search .input-append .btn {
- -webkit-border-radius: 0 14px 14px 0;
- -moz-border-radius: 0 14px 14px 0;
- border-radius: 0 14px 14px 0;
-}
-
-.form-search .input-prepend .search-query {
- -webkit-border-radius: 0 14px 14px 0;
- -moz-border-radius: 0 14px 14px 0;
- border-radius: 0 14px 14px 0;
-}
-
-.form-search .input-prepend .btn {
- -webkit-border-radius: 14px 0 0 14px;
- -moz-border-radius: 14px 0 0 14px;
- border-radius: 14px 0 0 14px;
-}
-
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input,
-.form-search .input-prepend,
-.form-inline .input-prepend,
-.form-horizontal .input-prepend,
-.form-search .input-append,
-.form-inline .input-append,
-.form-horizontal .input-append {
- display: inline-block;
- *display: inline;
- margin-bottom: 0;
- vertical-align: middle;
- *zoom: 1;
-}
-
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
- display: none;
-}
-
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
- display: inline-block;
-}
-
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
- margin-bottom: 0;
-}
-
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
- padding-left: 0;
- margin-bottom: 0;
- vertical-align: middle;
-}
-
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
- float: left;
- margin-right: 3px;
- margin-left: 0;
-}
-
-.control-group {
- margin-bottom: 10px;
-}
-
-legend + .control-group {
- margin-top: 20px;
- -webkit-margin-top-collapse: separate;
-}
-
-.form-horizontal .control-group {
- margin-bottom: 20px;
- *zoom: 1;
-}
-
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.form-horizontal .control-group:after {
- clear: both;
-}
-
-.form-horizontal .control-label {
- float: left;
- width: 160px;
- padding-top: 5px;
- text-align: right;
-}
-
-.form-horizontal .controls {
- *display: inline-block;
- *padding-left: 20px;
- margin-left: 180px;
- *margin-left: 0;
-}
-
-.form-horizontal .controls:first-child {
- *padding-left: 180px;
-}
-
-.form-horizontal .help-block {
- margin-bottom: 0;
-}
-
-.form-horizontal input + .help-block,
-.form-horizontal select + .help-block,
-.form-horizontal textarea + .help-block {
- margin-top: 10px;
-}
-
-.form-horizontal .form-actions {
- padding-left: 180px;
-}
-
-table {
- max-width: 100%;
- background-color: transparent;
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-.table {
- width: 100%;
- margin-bottom: 20px;
-}
-
-.table th,
-.table td {
- padding: 8px;
- line-height: 20px;
- text-align: left;
- vertical-align: top;
- border-top: 1px solid #dddddd;
-}
-
-.table th {
- font-weight: bold;
-}
-
-.table thead th {
- vertical-align: bottom;
-}
-
-.table caption + thead tr:first-child th,
-.table caption + thead tr:first-child td,
-.table colgroup + thead tr:first-child th,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child th,
-.table thead:first-child tr:first-child td {
- border-top: 0;
-}
-
-.table tbody + tbody {
- border-top: 2px solid #dddddd;
-}
-
-.table-condensed th,
-.table-condensed td {
- padding: 4px 5px;
-}
-
-.table-bordered {
- border: 1px solid #dddddd;
- border-collapse: separate;
- *border-collapse: collapse;
- border-left: 0;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-.table-bordered th,
-.table-bordered td {
- border-left: 1px solid #dddddd;
-}
-
-.table-bordered caption + thead tr:first-child th,
-.table-bordered caption + tbody tr:first-child th,
-.table-bordered caption + tbody tr:first-child td,
-.table-bordered colgroup + thead tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child td,
-.table-bordered thead:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child td {
- border-top: 0;
-}
-
-.table-bordered thead:first-child tr:first-child th:first-child,
-.table-bordered tbody:first-child tr:first-child td:first-child {
- -webkit-border-top-left-radius: 4px;
- border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
-}
-
-.table-bordered thead:first-child tr:first-child th:last-child,
-.table-bordered tbody:first-child tr:first-child td:last-child {
- -webkit-border-top-right-radius: 4px;
- border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
-}
-
-.table-bordered thead:last-child tr:last-child th:first-child,
-.table-bordered tbody:last-child tr:last-child td:first-child,
-.table-bordered tfoot:last-child tr:last-child td:first-child {
- -webkit-border-radius: 0 0 0 4px;
- -moz-border-radius: 0 0 0 4px;
- border-radius: 0 0 0 4px;
- -webkit-border-bottom-left-radius: 4px;
- border-bottom-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
-}
-
-.table-bordered thead:last-child tr:last-child th:last-child,
-.table-bordered tbody:last-child tr:last-child td:last-child,
-.table-bordered tfoot:last-child tr:last-child td:last-child {
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
-}
-
-.table-bordered caption + thead tr:first-child th:first-child,
-.table-bordered caption + tbody tr:first-child td:first-child,
-.table-bordered colgroup + thead tr:first-child th:first-child,
-.table-bordered colgroup + tbody tr:first-child td:first-child {
- -webkit-border-top-left-radius: 4px;
- border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
-}
-
-.table-bordered caption + thead tr:first-child th:last-child,
-.table-bordered caption + tbody tr:first-child td:last-child,
-.table-bordered colgroup + thead tr:first-child th:last-child,
-.table-bordered colgroup + tbody tr:first-child td:last-child {
- -webkit-border-top-right-radius: 4px;
- border-top-right-radius: 4px;
- -moz-border-radius-topleft: 4px;
-}
-
-.table-striped tbody tr:nth-child(odd) td,
-.table-striped tbody tr:nth-child(odd) th {
- background-color: #f9f9f9;
-}
-
-.table-hover tbody tr:hover td,
-.table-hover tbody tr:hover th {
- background-color: #f5f5f5;
-}
-
-table [class*=span],
-.row-fluid table [class*=span] {
- display: table-cell;
- float: none;
- margin-left: 0;
-}
-
-.table .span1 {
- float: none;
- width: 44px;
- margin-left: 0;
-}
-
-.table .span2 {
- float: none;
- width: 124px;
- margin-left: 0;
-}
-
-.table .span3 {
- float: none;
- width: 204px;
- margin-left: 0;
-}
-
-.table .span4 {
- float: none;
- width: 284px;
- margin-left: 0;
-}
-
-.table .span5 {
- float: none;
- width: 364px;
- margin-left: 0;
-}
-
-.table .span6 {
- float: none;
- width: 444px;
- margin-left: 0;
-}
-
-.table .span7 {
- float: none;
- width: 524px;
- margin-left: 0;
-}
-
-.table .span8 {
- float: none;
- width: 604px;
- margin-left: 0;
-}
-
-.table .span9 {
- float: none;
- width: 684px;
- margin-left: 0;
-}
-
-.table .span10 {
- float: none;
- width: 764px;
- margin-left: 0;
-}
-
-.table .span11 {
- float: none;
- width: 844px;
- margin-left: 0;
-}
-
-.table .span12 {
- float: none;
- width: 924px;
- margin-left: 0;
-}
-
-.table .span13 {
- float: none;
- width: 1004px;
- margin-left: 0;
-}
-
-.table .span14 {
- float: none;
- width: 1084px;
- margin-left: 0;
-}
-
-.table .span15 {
- float: none;
- width: 1164px;
- margin-left: 0;
-}
-
-.table .span16 {
- float: none;
- width: 1244px;
- margin-left: 0;
-}
-
-.table .span17 {
- float: none;
- width: 1324px;
- margin-left: 0;
-}
-
-.table .span18 {
- float: none;
- width: 1404px;
- margin-left: 0;
-}
-
-.table .span19 {
- float: none;
- width: 1484px;
- margin-left: 0;
-}
-
-.table .span20 {
- float: none;
- width: 1564px;
- margin-left: 0;
-}
-
-.table .span21 {
- float: none;
- width: 1644px;
- margin-left: 0;
-}
-
-.table .span22 {
- float: none;
- width: 1724px;
- margin-left: 0;
-}
-
-.table .span23 {
- float: none;
- width: 1804px;
- margin-left: 0;
-}
-
-.table .span24 {
- float: none;
- width: 1884px;
- margin-left: 0;
-}
-
-.table tbody tr.success td {
- background-color: #dff0d8;
-}
-
-.table tbody tr.error td {
- background-color: #f2dede;
-}
-
-.table tbody tr.warning td {
- background-color: #fcf8e3;
-}
-
-.table tbody tr.info td {
- background-color: #d9edf7;
-}
-
-.table-hover tbody tr.success:hover td {
- background-color: #d0e9c6;
-}
-
-.table-hover tbody tr.error:hover td {
- background-color: #ebcccc;
-}
-
-.table-hover tbody tr.warning:hover td {
- background-color: #faf2cc;
-}
-
-.table-hover tbody tr.info:hover td {
- background-color: #c4e3f3;
-}
-
-[class^="icon-"],
-[class*=" icon-"] {
- display: inline-block;
- width: 14px;
- height: 14px;
- margin-top: 1px;
- *margin-right: .3em;
- line-height: 14px;
- vertical-align: text-top;
- background-image: url("../img/glyphicons-halflings.png");
- background-position: 14px 14px;
- background-repeat: no-repeat;
-}
-
-/* White icons with optional class, or on hover/active states of certain elements */
-
-.icon-white,
-.nav-tabs > .active > a > [class^="icon-"],
-.nav-tabs > .active > a > [class*=" icon-"],
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"] {
- background-image: url("../img/glyphicons-halflings-white.png");
-}
-
-.icon-glass {
- background-position: 0 0;
-}
-
-.icon-music {
- background-position: -24px 0;
-}
-
-.icon-search {
- background-position: -48px 0;
-}
-
-.icon-envelope {
- background-position: -72px 0;
-}
-
-.icon-heart {
- background-position: -96px 0;
-}
-
-.icon-star {
- background-position: -120px 0;
-}
-
-.icon-star-empty {
- background-position: -144px 0;
-}
-
-.icon-user {
- background-position: -168px 0;
-}
-
-.icon-film {
- background-position: -192px 0;
-}
-
-.icon-th-large {
- background-position: -216px 0;
-}
-
-.icon-th {
- background-position: -240px 0;
-}
-
-.icon-th-list {
- background-position: -264px 0;
-}
-
-.icon-ok {
- background-position: -288px 0;
-}
-
-.icon-remove {
- background-position: -312px 0;
-}
-
-.icon-zoom-in {
- background-position: -336px 0;
-}
-
-.icon-zoom-out {
- background-position: -360px 0;
-}
-
-.icon-off {
- background-position: -384px 0;
-}
-
-.icon-signal {
- background-position: -408px 0;
-}
-
-.icon-cog {
- background-position: -432px 0;
-}
-
-.icon-trash {
- background-position: -456px 0;
-}
-
-.icon-home {
- background-position: 0 -24px;
-}
-
-.icon-file {
- background-position: -24px -24px;
-}
-
-.icon-time {
- background-position: -48px -24px;
-}
-
-.icon-road {
- background-position: -72px -24px;
-}
-
-.icon-download-alt {
- background-position: -96px -24px;
-}
-
-.icon-download {
- background-position: -120px -24px;
-}
-
-.icon-upload {
- background-position: -144px -24px;
-}
-
-.icon-inbox {
- background-position: -168px -24px;
-}
-
-.icon-play-circle {
- background-position: -192px -24px;
-}
-
-.icon-repeat {
- background-position: -216px -24px;
-}
-
-.icon-refresh {
- background-position: -240px -24px;
-}
-
-.icon-list-alt {
- background-position: -264px -24px;
-}
-
-.icon-lock {
- background-position: -287px -24px;
-}
-
-.icon-flag {
- background-position: -312px -24px;
-}
-
-.icon-headphones {
- background-position: -336px -24px;
-}
-
-.icon-volume-off {
- background-position: -360px -24px;
-}
-
-.icon-volume-down {
- background-position: -384px -24px;
-}
-
-.icon-volume-up {
- background-position: -408px -24px;
-}
-
-.icon-qrcode {
- background-position: -432px -24px;
-}
-
-.icon-barcode {
- background-position: -456px -24px;
-}
-
-.icon-tag {
- background-position: 0 -48px;
-}
-
-.icon-tags {
- background-position: -25px -48px;
-}
-
-.icon-book {
- background-position: -48px -48px;
-}
-
-.icon-bookmark {
- background-position: -72px -48px;
-}
-
-.icon-print {
- background-position: -96px -48px;
-}
-
-.icon-camera {
- background-position: -120px -48px;
-}
-
-.icon-font {
- background-position: -144px -48px;
-}
-
-.icon-bold {
- background-position: -167px -48px;
-}
-
-.icon-italic {
- background-position: -192px -48px;
-}
-
-.icon-text-height {
- background-position: -216px -48px;
-}
-
-.icon-text-width {
- background-position: -240px -48px;
-}
-
-.icon-align-left {
- background-position: -264px -48px;
-}
-
-.icon-align-center {
- background-position: -288px -48px;
-}
-
-.icon-align-right {
- background-position: -312px -48px;
-}
-
-.icon-align-justify {
- background-position: -336px -48px;
-}
-
-.icon-list {
- background-position: -360px -48px;
-}
-
-.icon-indent-left {
- background-position: -384px -48px;
-}
-
-.icon-indent-right {
- background-position: -408px -48px;
-}
-
-.icon-facetime-video {
- background-position: -432px -48px;
-}
-
-.icon-picture {
- background-position: -456px -48px;
-}
-
-.icon-pencil {
- background-position: 0 -72px;
-}
-
-.icon-map-marker {
- background-position: -24px -72px;
-}
-
-.icon-adjust {
- background-position: -48px -72px;
-}
-
-.icon-tint {
- background-position: -72px -72px;
-}
-
-.icon-edit {
- background-position: -96px -72px;
-}
-
-.icon-share {
- background-position: -120px -72px;
-}
-
-.icon-check {
- background-position: -144px -72px;
-}
-
-.icon-move {
- background-position: -168px -72px;
-}
-
-.icon-step-backward {
- background-position: -192px -72px;
-}
-
-.icon-fast-backward {
- background-position: -216px -72px;
-}
-
-.icon-backward {
- background-position: -240px -72px;
-}
-
-.icon-play {
- background-position: -264px -72px;
-}
-
-.icon-pause {
- background-position: -288px -72px;
-}
-
-.icon-stop {
- background-position: -312px -72px;
-}
-
-.icon-forward {
- background-position: -336px -72px;
-}
-
-.icon-fast-forward {
- background-position: -360px -72px;
-}
-
-.icon-step-forward {
- background-position: -384px -72px;
-}
-
-.icon-eject {
- background-position: -408px -72px;
-}
-
-.icon-chevron-left {
- background-position: -432px -72px;
-}
-
-.icon-chevron-right {
- background-position: -456px -72px;
-}
-
-.icon-plus-sign {
- background-position: 0 -96px;
-}
-
-.icon-minus-sign {
- background-position: -24px -96px;
-}
-
-.icon-remove-sign {
- background-position: -48px -96px;
-}
-
-.icon-ok-sign {
- background-position: -72px -96px;
-}
-
-.icon-question-sign {
- background-position: -96px -96px;
-}
-
-.icon-info-sign {
- background-position: -120px -96px;
-}
-
-.icon-screenshot {
- background-position: -144px -96px;
-}
-
-.icon-remove-circle {
- background-position: -168px -96px;
-}
-
-.icon-ok-circle {
- background-position: -192px -96px;
-}
-
-.icon-ban-circle {
- background-position: -216px -96px;
-}
-
-.icon-arrow-left {
- background-position: -240px -96px;
-}
-
-.icon-arrow-right {
- background-position: -264px -96px;
-}
-
-.icon-arrow-up {
- background-position: -289px -96px;
-}
-
-.icon-arrow-down {
- background-position: -312px -96px;
-}
-
-.icon-share-alt {
- background-position: -336px -96px;
-}
-
-.icon-resize-full {
- background-position: -360px -96px;
-}
-
-.icon-resize-small {
- background-position: -384px -96px;
-}
-
-.icon-plus {
- background-position: -408px -96px;
-}
-
-.icon-minus {
- background-position: -433px -96px;
-}
-
-.icon-asterisk {
- background-position: -456px -96px;
-}
-
-.icon-exclamation-sign {
- background-position: 0 -120px;
-}
-
-.icon-gift {
- background-position: -24px -120px;
-}
-
-.icon-leaf {
- background-position: -48px -120px;
-}
-
-.icon-fire {
- background-position: -72px -120px;
-}
-
-.icon-eye-open {
- background-position: -96px -120px;
-}
-
-.icon-eye-close {
- background-position: -120px -120px;
-}
-
-.icon-warning-sign {
- background-position: -144px -120px;
-}
-
-.icon-plane {
- background-position: -168px -120px;
-}
-
-.icon-calendar {
- background-position: -192px -120px;
-}
-
-.icon-random {
- width: 16px;
- background-position: -216px -120px;
-}
-
-.icon-comment {
- background-position: -240px -120px;
-}
-
-.icon-magnet {
- background-position: -264px -120px;
-}
-
-.icon-chevron-up {
- background-position: -288px -120px;
-}
-
-.icon-chevron-down {
- background-position: -313px -119px;
-}
-
-.icon-retweet {
- background-position: -336px -120px;
-}
-
-.icon-shopping-cart {
- background-position: -360px -120px;
-}
-
-.icon-folder-close {
- background-position: -384px -120px;
-}
-
-.icon-folder-open {
- width: 16px;
- background-position: -408px -120px;
-}
-
-.icon-resize-vertical {
- background-position: -432px -119px;
-}
-
-.icon-resize-horizontal {
- background-position: -456px -118px;
-}
-
-.icon-hdd {
- background-position: 0 -144px;
-}
-
-.icon-bullhorn {
- background-position: -24px -144px;
-}
-
-.icon-bell {
- background-position: -48px -144px;
-}
-
-.icon-certificate {
- background-position: -72px -144px;
-}
-
-.icon-thumbs-up {
- background-position: -96px -144px;
-}
-
-.icon-thumbs-down {
- background-position: -120px -144px;
-}
-
-.icon-hand-right {
- background-position: -144px -144px;
-}
-
-.icon-hand-left {
- background-position: -168px -144px;
-}
-
-.icon-hand-up {
- background-position: -192px -144px;
-}
-
-.icon-hand-down {
- background-position: -216px -144px;
-}
-
-.icon-circle-arrow-right {
- background-position: -240px -144px;
-}
-
-.icon-circle-arrow-left {
- background-position: -264px -144px;
-}
-
-.icon-circle-arrow-up {
- background-position: -288px -144px;
-}
-
-.icon-circle-arrow-down {
- background-position: -312px -144px;
-}
-
-.icon-globe {
- background-position: -336px -144px;
-}
-
-.icon-wrench {
- background-position: -360px -144px;
-}
-
-.icon-tasks {
- background-position: -384px -144px;
-}
-
-.icon-filter {
- background-position: -408px -144px;
-}
-
-.icon-briefcase {
- background-position: -432px -144px;
-}
-
-.icon-fullscreen {
- background-position: -456px -144px;
-}
-
-.dropup,
-.dropdown {
- position: relative;
-}
-
-.dropdown-toggle {
- *margin-bottom: -3px;
-}
-
-.dropdown-toggle:active,
-.open .dropdown-toggle {
- outline: 0;
-}
-
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- vertical-align: top;
- border-top: 4px solid #000000;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
- content: "";
-}
-
-.dropdown .caret {
- margin-top: 8px;
- margin-left: 2px;
-}
-
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- list-style: none;
- background-color: #ffffff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- *border-right-width: 2px;
- *border-bottom-width: 2px;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
-}
-
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-
-.dropdown-menu .divider {
- *width: 100%;
- height: 1px;
- margin: 9px 1px;
- *margin: -5px 0 5px;
- overflow: hidden;
- background-color: #e5e5e5;
- border-bottom: 1px solid #ffffff;
-}
-
-.dropdown-menu a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 20px;
- color: #333333;
- white-space: nowrap;
-}
-
-.dropdown-menu li > a:hover,
-.dropdown-menu li > a:focus,
-.dropdown-submenu:hover > a {
- color: #ffffff;
- text-decoration: none;
- background-color: #0088cc;
- background-color: #0081c2;
- background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
- background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
- background-image: -o-linear-gradient(top, #0088cc, #0077b3);
- background-image: linear-gradient(to bottom, #0088cc, #0077b3);
- background-repeat: repeat-x;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
-}
-
-.dropdown-menu .active > a,
-.dropdown-menu .active > a:hover {
- color: #ffffff;
- text-decoration: none;
- background-color: #0088cc;
- background-color: #0081c2;
- background-image: linear-gradient(to bottom, #0088cc, #0077b3);
- background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
- background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
- background-image: -o-linear-gradient(top, #0088cc, #0077b3);
- background-repeat: repeat-x;
- outline: 0;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
-}
-
-.dropdown-menu .disabled > a,
-.dropdown-menu .disabled > a:hover {
- color: #999999;
-}
-
-.dropdown-menu .disabled > a:hover {
- text-decoration: none;
- cursor: default;
- background-color: transparent;
-}
-
-.open {
- *z-index: 1000;
-}
-
-.open > .dropdown-menu {
- display: block;
-}
-
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- border-top: 0;
- border-bottom: 4px solid #000000;
- content: "";
-}
-
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 1px;
-}
-
-.dropdown-submenu {
- position: relative;
-}
-
-.dropdown-submenu > .dropdown-menu {
- top: 0;
- left: 100%;
- margin-top: -6px;
- margin-left: -1px;
- -webkit-border-radius: 0 6px 6px 6px;
- -moz-border-radius: 0 6px 6px 6px;
- border-radius: 0 6px 6px 6px;
-}
-
-.dropdown-submenu:hover > .dropdown-menu {
- display: block;
-}
-
-.dropdown-submenu > a:after {
- display: block;
- float: right;
- width: 0;
- height: 0;
- margin-top: 5px;
- margin-right: -10px;
- border-color: transparent;
- border-left-color: #cccccc;
- border-style: solid;
- border-width: 5px 0 5px 5px;
- content: " ";
-}
-
-.dropdown-submenu:hover > a:after {
- border-left-color: #ffffff;
-}
-
-.dropdown .dropdown-menu .nav-header {
- padding-right: 20px;
- padding-left: 20px;
-}
-
-.typeahead {
- margin-top: 2px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, 0.15);
-}
-
-.well-large {
- padding: 24px;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-
-.well-small {
- padding: 9px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-
-.fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- -moz-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
-}
-
-.fade.in {
- opacity: 1;
-}
-
-.collapse {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition: height 0.35s ease;
- -moz-transition: height 0.35s ease;
- -o-transition: height 0.35s ease;
- transition: height 0.35s ease;
-}
-
-.collapse.in {
- height: auto;
-}
-
-.close {
- float: right;
- font-size: 20px;
- font-weight: bold;
- line-height: 20px;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
-}
-
-.close:hover {
- color: #000000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.4;
- filter: alpha(opacity=40);
-}
-
-button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
-}
-
-.btn {
- display: inline-block;
- *display: inline;
- padding: 4px 14px;
- margin-bottom: 0;
- *margin-left: .3em;
- font-size: 14px;
- line-height: 20px;
- *line-height: 20px;
- color: #333333;
- text-align: center;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
- vertical-align: middle;
- cursor: pointer;
- background-color: #f5f5f5;
- *background-color: #e6e6e6;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
- background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
- background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
- background-repeat: repeat-x;
- border: 1px solid #bbbbbb;
- *border: 0;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- border-color: #e6e6e6 #e6e6e6 #bfbfbf;
- border-bottom-color: #a2a2a2;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
- *zoom: 1;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn:hover,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
- color: #333333;
- background-color: #e6e6e6;
- *background-color: #d9d9d9;
-}
-
-.btn:active,
-.btn.active {
- background-color: #cccccc \9;
-}
-
-.btn:first-child {
- *margin-left: 0;
-}
-
-.btn:hover {
- color: #333333;
- text-decoration: none;
- background-color: #e6e6e6;
- *background-color: #d9d9d9;
- /* Buttons in IE7 don't get borders, so darken on hover */
-
- background-position: 0 -15px;
- -webkit-transition: background-position 0.1s linear;
- -moz-transition: background-position 0.1s linear;
- -o-transition: background-position 0.1s linear;
- transition: background-position 0.1s linear;
-}
-
-.btn:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-.btn.active,
-.btn:active {
- background-color: #e6e6e6;
- background-color: #d9d9d9 \9;
- background-image: none;
- outline: 0;
- -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn.disabled,
-.btn[disabled] {
- cursor: default;
- background-color: #e6e6e6;
- background-image: none;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-
-.btn-large {
- padding: 9px 14px;
- font-size: 16px;
- line-height: normal;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-
-.btn-large [class^="icon-"] {
- margin-top: 2px;
-}
-
-.btn-small {
- padding: 3px 9px;
- font-size: 12px;
- line-height: 18px;
-}
-
-.btn-small [class^="icon-"] {
- margin-top: 0;
-}
-
-.btn-mini {
- padding: 2px 6px;
- font-size: 11px;
- line-height: 17px;
-}
-
-.btn-block {
- display: block;
- width: 100%;
- padding-right: 0;
- padding-left: 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
- color: rgba(255, 255, 255, 0.75);
-}
-
-.btn {
- border-color: #c5c5c5;
- border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
-}
-
-.btn-primary {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #006dcc;
- *background-color: #0044cc;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
- background-image: linear-gradient(to bottom, #0088cc, #0044cc);
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
- background-repeat: repeat-x;
- border-color: #0044cc #0044cc #002a80;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-primary:hover,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
- color: #ffffff;
- background-color: #0044cc;
- *background-color: #003bb3;
-}
-
-.btn-primary:active,
-.btn-primary.active {
- background-color: #003399 \9;
-}
-
-.btn-warning {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #faa732;
- *background-color: #f89406;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
- background-image: -o-linear-gradient(top, #fbb450, #f89406);
- background-image: linear-gradient(to bottom, #fbb450, #f89406);
- background-image: -moz-linear-gradient(top, #fbb450, #f89406);
- background-repeat: repeat-x;
- border-color: #f89406 #f89406 #ad6704;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-warning:hover,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
- color: #ffffff;
- background-color: #f89406;
- *background-color: #df8505;
-}
-
-.btn-warning:active,
-.btn-warning.active {
- background-color: #c67605 \9;
-}
-
-.btn-danger {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #da4f49;
- *background-color: #bd362f;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
- background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
- background-repeat: repeat-x;
- border-color: #bd362f #bd362f #802420;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-danger:hover,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
- color: #ffffff;
- background-color: #bd362f;
- *background-color: #a9302a;
-}
-
-.btn-danger:active,
-.btn-danger.active {
- background-color: #942a25 \9;
-}
-
-.btn-success {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #5bb75b;
- *background-color: #51a351;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
- background-image: -webkit-linear-gradient(top, #62c462, #51a351);
- background-image: -o-linear-gradient(top, #62c462, #51a351);
- background-image: linear-gradient(to bottom, #62c462, #51a351);
- background-image: -moz-linear-gradient(top, #62c462, #51a351);
- background-repeat: repeat-x;
- border-color: #51a351 #51a351 #387038;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-success:hover,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
- color: #ffffff;
- background-color: #51a351;
- *background-color: #499249;
-}
-
-.btn-success:active,
-.btn-success.active {
- background-color: #408140 \9;
-}
-
-.btn-info {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #49afcd;
- *background-color: #2f96b4;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
- background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
- background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
- background-repeat: repeat-x;
- border-color: #2f96b4 #2f96b4 #1f6377;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-info:hover,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
- color: #ffffff;
- background-color: #2f96b4;
- *background-color: #2a85a0;
-}
-
-.btn-info:active,
-.btn-info.active {
- background-color: #24748c \9;
-}
-
-.btn-inverse {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #363636;
- *background-color: #222222;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
- background-image: -webkit-linear-gradient(top, #444444, #222222);
- background-image: -o-linear-gradient(top, #444444, #222222);
- background-image: linear-gradient(to bottom, #444444, #222222);
- background-image: -moz-linear-gradient(top, #444444, #222222);
- background-repeat: repeat-x;
- border-color: #222222 #222222 #000000;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.btn-inverse:hover,
-.btn-inverse:active,
-.btn-inverse.active,
-.btn-inverse.disabled,
-.btn-inverse[disabled] {
- color: #ffffff;
- background-color: #222222;
- *background-color: #151515;
-}
-
-.btn-inverse:active,
-.btn-inverse.active {
- background-color: #080808 \9;
-}
-
-button.btn,
-input[type="submit"].btn {
- *padding-top: 3px;
- *padding-bottom: 3px;
-}
-
-button.btn::-moz-focus-inner,
-input[type="submit"].btn::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-
-button.btn.btn-large,
-input[type="submit"].btn.btn-large {
- *padding-top: 7px;
- *padding-bottom: 7px;
-}
-
-button.btn.btn-small,
-input[type="submit"].btn.btn-small {
- *padding-top: 3px;
- *padding-bottom: 3px;
-}
-
-button.btn.btn-mini,
-input[type="submit"].btn.btn-mini {
- *padding-top: 1px;
- *padding-bottom: 1px;
-}
-
-.btn-link,
-.btn-link:active,
-.btn-link[disabled] {
- background-color: transparent;
- background-image: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-
-.btn-link {
- color: #0088cc;
- cursor: pointer;
- border-color: transparent;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.btn-link:hover {
- color: #005580;
- text-decoration: underline;
- background-color: transparent;
-}
-
-.btn-link[disabled]:hover {
- color: #333333;
- text-decoration: none;
-}
-
-.btn-group {
- position: relative;
- *margin-left: .3em;
- font-size: 0;
- white-space: nowrap;
- vertical-align: middle;
-}
-
-.btn-group:first-child {
- *margin-left: 0;
-}
-
-.btn-group + .btn-group {
- margin-left: 5px;
-}
-
-.btn-toolbar {
- margin-top: 10px;
- margin-bottom: 10px;
- font-size: 0;
-}
-
-.btn-toolbar .btn-group {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
-}
-
-.btn-toolbar .btn + .btn,
-.btn-toolbar .btn-group + .btn,
-.btn-toolbar .btn + .btn-group {
- margin-left: 5px;
-}
-
-.btn-group > .btn {
- position: relative;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.btn-group > .btn + .btn {
- margin-left: -1px;
-}
-
-.btn-group > .btn,
-.btn-group > .dropdown-menu {
- font-size: 14px;
-}
-
-.btn-group > .btn-mini {
- font-size: 11px;
-}
-
-.btn-group > .btn-small {
- font-size: 12px;
-}
-
-.btn-group > .btn-large {
- font-size: 16px;
-}
-
-.btn-group > .btn:first-child {
- margin-left: 0;
- -webkit-border-bottom-left-radius: 4px;
- border-bottom-left-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- border-top-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-topleft: 4px;
-}
-
-.btn-group > .btn:last-child,
-.btn-group > .dropdown-toggle {
- -webkit-border-top-right-radius: 4px;
- border-top-right-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- -moz-border-radius-bottomright: 4px;
-}
-
-.btn-group > .btn.large:first-child {
- margin-left: 0;
- -webkit-border-bottom-left-radius: 6px;
- border-bottom-left-radius: 6px;
- -webkit-border-top-left-radius: 6px;
- border-top-left-radius: 6px;
- -moz-border-radius-bottomleft: 6px;
- -moz-border-radius-topleft: 6px;
-}
-
-.btn-group > .btn.large:last-child,
-.btn-group > .large.dropdown-toggle {
- -webkit-border-top-right-radius: 6px;
- border-top-right-radius: 6px;
- -webkit-border-bottom-right-radius: 6px;
- border-bottom-right-radius: 6px;
- -moz-border-radius-topright: 6px;
- -moz-border-radius-bottomright: 6px;
-}
-
-.btn-group > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active {
- z-index: 2;
-}
-
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-
-.btn-group > .btn + .dropdown-toggle {
- *padding-top: 5px;
- padding-right: 8px;
- *padding-bottom: 5px;
- padding-left: 8px;
- -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn-group > .btn-mini + .dropdown-toggle {
- *padding-top: 2px;
- padding-right: 5px;
- *padding-bottom: 2px;
- padding-left: 5px;
-}
-
-.btn-group > .btn-small + .dropdown-toggle {
- *padding-top: 5px;
- *padding-bottom: 4px;
-}
-
-.btn-group > .btn-large + .dropdown-toggle {
- *padding-top: 7px;
- padding-right: 12px;
- *padding-bottom: 7px;
- padding-left: 12px;
-}
-
-.btn-group.open .dropdown-toggle {
- background-image: none;
- -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.btn-group.open .btn.dropdown-toggle {
- background-color: #e6e6e6;
-}
-
-.btn-group.open .btn-primary.dropdown-toggle {
- background-color: #0044cc;
-}
-
-.btn-group.open .btn-warning.dropdown-toggle {
- background-color: #f89406;
-}
-
-.btn-group.open .btn-danger.dropdown-toggle {
- background-color: #bd362f;
-}
-
-.btn-group.open .btn-success.dropdown-toggle {
- background-color: #51a351;
-}
-
-.btn-group.open .btn-info.dropdown-toggle {
- background-color: #2f96b4;
-}
-
-.btn-group.open .btn-inverse.dropdown-toggle {
- background-color: #222222;
-}
-
-.btn .caret {
- margin-top: 8px;
- margin-left: 0;
-}
-
-.btn-mini .caret,
-.btn-small .caret,
-.btn-large .caret {
- margin-top: 6px;
-}
-
-.btn-large .caret {
- border-top-width: 5px;
- border-right-width: 5px;
- border-left-width: 5px;
-}
-
-.dropup .btn-large .caret {
- border-top: 0;
- border-bottom: 5px solid #000000;
-}
-
-.btn-primary .caret,
-.btn-warning .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret,
-.btn-inverse .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
-}
-
-.btn-group-vertical {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
-}
-
-.btn-group-vertical .btn {
- display: block;
- float: none;
- width: 100%;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.btn-group-vertical .btn + .btn {
- margin-top: -1px;
- margin-left: 0;
-}
-
-.btn-group-vertical .btn:first-child {
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-
-.btn-group-vertical .btn:last-child {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-
-.btn-group-vertical .btn-large:first-child {
- -webkit-border-radius: 6px 6px 0 0;
- -moz-border-radius: 6px 6px 0 0;
- border-radius: 6px 6px 0 0;
-}
-
-.btn-group-vertical .btn-large:last-child {
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
-}
-
-.alert {
- padding: 8px 35px 8px 14px;
- margin-bottom: 20px;
- color: #c09853;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- background-color: #fcf8e3;
- border: 1px solid #fbeed5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-.alert h4 {
- margin: 0;
-}
-
-.alert .close {
- position: relative;
- top: -2px;
- right: -21px;
- line-height: 20px;
-}
-
-.alert-success {
- color: #468847;
- background-color: #dff0d8;
- border-color: #d6e9c6;
-}
-
-.alert-danger,
-.alert-error {
- color: #b94a48;
- background-color: #f2dede;
- border-color: #eed3d7;
-}
-
-.alert-info {
- color: #3a87ad;
- background-color: #d9edf7;
- border-color: #bce8f1;
-}
-
-.alert-block {
- padding-top: 14px;
- padding-bottom: 14px;
-}
-
-.alert-block > p,
-.alert-block > ul {
- margin-bottom: 0;
-}
-
-.alert-block p + p {
- margin-top: 5px;
-}
-
-.nav {
- margin-bottom: 20px;
- margin-left: 0;
- list-style: none;
-}
-
-.nav > li > a {
- display: block;
-}
-
-.nav > li > a:hover {
- text-decoration: none;
- background-color: #eeeeee;
-}
-
-.nav > .pull-right {
- float: right;
-}
-
-.nav-header {
- display: block;
- padding: 3px 15px;
- font-size: 11px;
- font-weight: bold;
- line-height: 20px;
- color: #999999;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- text-transform: uppercase;
-}
-
-.nav li + .nav-header {
- margin-top: 9px;
-}
-
-.nav-list {
- padding-right: 15px;
- padding-left: 15px;
- margin-bottom: 0;
-}
-
-.nav-list > li > a,
-.nav-list .nav-header {
- margin-right: -15px;
- margin-left: -15px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-}
-
-.nav-list > li > a {
- padding: 3px 15px;
-}
-
-.nav-list > .active > a,
-.nav-list > .active > a:hover {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
- background-color: #0088cc;
-}
-
-.nav-list [class^="icon-"] {
- margin-right: 2px;
-}
-
-.nav-list .divider {
- *width: 100%;
- height: 1px;
- margin: 9px 1px;
- *margin: -5px 0 5px;
- overflow: hidden;
- background-color: #e5e5e5;
- border-bottom: 1px solid #ffffff;
-}
-
-.nav-tabs,
-.nav-pills {
- *zoom: 1;
-}
-
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.nav-tabs:after,
-.nav-pills:after {
- clear: both;
-}
-
-.nav-tabs > li,
-.nav-pills > li {
- float: left;
-}
-
-.nav-tabs > li > a,
-.nav-pills > li > a {
- padding-right: 12px;
- padding-left: 12px;
- margin-right: 2px;
- line-height: 14px;
-}
-
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-
-.nav-tabs > li {
- margin-bottom: -1px;
-}
-
-.nav-tabs > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- line-height: 20px;
- border: 1px solid transparent;
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-
-.nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #dddddd;
-}
-
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover {
- color: #555555;
- cursor: default;
- background-color: #ffffff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
-}
-
-.nav-pills > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- margin-top: 2px;
- margin-bottom: 2px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-
-.nav-pills > .active > a,
-.nav-pills > .active > a:hover {
- color: #ffffff;
- background-color: #0088cc;
-}
-
-.nav-stacked > li {
- float: none;
-}
-
-.nav-stacked > li > a {
- margin-right: 0;
-}
-
-.nav-tabs.nav-stacked {
- border-bottom: 0;
-}
-
-.nav-tabs.nav-stacked > li > a {
- border: 1px solid #ddd;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.nav-tabs.nav-stacked > li:first-child > a {
- -webkit-border-top-right-radius: 4px;
- border-top-right-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- border-top-left-radius: 4px;
- -moz-border-radius-topright: 4px;
- -moz-border-radius-topleft: 4px;
-}
-
-.nav-tabs.nav-stacked > li:last-child > a {
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-right-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- border-bottom-left-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- -moz-border-radius-bottomleft: 4px;
-}
-
-.nav-tabs.nav-stacked > li > a:hover {
- z-index: 2;
- border-color: #ddd;
-}
-
-.nav-pills.nav-stacked > li > a {
- margin-bottom: 3px;
-}
-
-.nav-pills.nav-stacked > li:last-child > a {
- margin-bottom: 1px;
-}
-
-.nav-tabs .dropdown-menu {
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
-}
-
-.nav-pills .dropdown-menu {
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-
-.nav .dropdown-toggle .caret {
- margin-top: 6px;
- border-top-color: #0088cc;
- border-bottom-color: #0088cc;
-}
-
-.nav .dropdown-toggle:hover .caret {
- border-top-color: #005580;
- border-bottom-color: #005580;
-}
-
-/* move down carets for tabs */
-
-.nav-tabs .dropdown-toggle .caret {
- margin-top: 8px;
-}
-
-.nav .active .dropdown-toggle .caret {
- border-top-color: #fff;
- border-bottom-color: #fff;
-}
-
-.nav-tabs .active .dropdown-toggle .caret {
- border-top-color: #555555;
- border-bottom-color: #555555;
-}
-
-.nav > .dropdown.active > a:hover {
- cursor: pointer;
-}
-
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > li.dropdown.open.active > a:hover {
- color: #ffffff;
- background-color: #999999;
- border-color: #999999;
-}
-
-.nav li.dropdown.open .caret,
-.nav li.dropdown.open.active .caret,
-.nav li.dropdown.open a:hover .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
- opacity: 1;
- filter: alpha(opacity=100);
-}
-
-.tabs-stacked .open > a:hover {
- border-color: #999999;
-}
-
-.tabbable {
- *zoom: 1;
-}
-
-.tabbable:before,
-.tabbable:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.tabbable:after {
- clear: both;
-}
-
-.tab-content {
- overflow: auto;
-}
-
-.tabs-below > .nav-tabs,
-.tabs-right > .nav-tabs,
-.tabs-left > .nav-tabs {
- border-bottom: 0;
-}
-
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
- display: none;
-}
-
-.tab-content > .active,
-.pill-content > .active {
- display: block;
-}
-
-.tabs-below > .nav-tabs {
- border-top: 1px solid #ddd;
-}
-
-.tabs-below > .nav-tabs > li {
- margin-top: -1px;
- margin-bottom: 0;
-}
-
-.tabs-below > .nav-tabs > li > a {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-
-.tabs-below > .nav-tabs > li > a:hover {
- border-top-color: #ddd;
- border-bottom-color: transparent;
-}
-
-.tabs-below > .nav-tabs > .active > a,
-.tabs-below > .nav-tabs > .active > a:hover {
- border-color: transparent #ddd #ddd #ddd;
-}
-
-.tabs-left > .nav-tabs > li,
-.tabs-right > .nav-tabs > li {
- float: none;
-}
-
-.tabs-left > .nav-tabs > li > a,
-.tabs-right > .nav-tabs > li > a {
- min-width: 74px;
- margin-right: 0;
- margin-bottom: 3px;
-}
-
-.tabs-left > .nav-tabs {
- float: left;
- margin-right: 19px;
- border-right: 1px solid #ddd;
-}
-
-.tabs-left > .nav-tabs > li > a {
- margin-right: -1px;
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
-}
-
-.tabs-left > .nav-tabs > li > a:hover {
- border-color: #eeeeee #dddddd #eeeeee #eeeeee;
-}
-
-.tabs-left > .nav-tabs .active > a,
-.tabs-left > .nav-tabs .active > a:hover {
- border-color: #ddd transparent #ddd #ddd;
- *border-right-color: #ffffff;
-}
-
-.tabs-right > .nav-tabs {
- float: right;
- margin-left: 19px;
- border-left: 1px solid #ddd;
-}
-
-.tabs-right > .nav-tabs > li > a {
- margin-left: -1px;
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-
-.tabs-right > .nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #eeeeee #dddddd;
-}
-
-.tabs-right > .nav-tabs .active > a,
-.tabs-right > .nav-tabs .active > a:hover {
- border-color: #ddd #ddd #ddd transparent;
- *border-left-color: #ffffff;
-}
-
-.nav > .disabled > a {
- color: #999999;
-}
-
-.nav > .disabled > a:hover {
- text-decoration: none;
- cursor: default;
- background-color: transparent;
-}
-
-.navbar {
- *position: relative;
- *z-index: 2;
- margin-bottom: 20px;
- overflow: visible;
- color: #777777;
-}
-
-.navbar-inner {
- min-height: 40px;
- padding-right: 20px;
- padding-left: 20px;
- background-color: #fafafa;
- background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
- background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
- background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
- background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
- background-repeat: repeat-x;
- border: 1px solid #d4d4d4;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
- *zoom: 1;
- -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
- -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
-}
-
-.navbar-inner:before,
-.navbar-inner:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.navbar-inner:after {
- clear: both;
-}
-
-.navbar .container {
- width: auto;
-}
-
-.nav-collapse.collapse {
- height: auto;
-}
-
-.navbar .brand {
- display: block;
- float: left;
- padding: 10px 20px 10px;
- margin-left: -20px;
- font-size: 20px;
- font-weight: 200;
- color: #777777;
- text-shadow: 0 1px 0 #ffffff;
-}
-
-.navbar .brand:hover {
- text-decoration: none;
-}
-
-.navbar-text {
- margin-bottom: 0;
- line-height: 40px;
-}
-
-.navbar-link {
- color: #777777;
-}
-
-.navbar-link:hover {
- color: #333333;
-}
-
-.navbar .divider-vertical {
- height: 40px;
- margin: 0 9px;
- border-right: 1px solid #ffffff;
- border-left: 1px solid #f2f2f2;
-}
-
-.navbar .btn,
-.navbar .btn-group {
- margin-top: 5px;
-}
-
-.navbar .btn-group .btn,
-.navbar .input-prepend .btn,
-.navbar .input-append .btn {
- margin-top: 0;
-}
-
-.navbar-form {
- margin-bottom: 0;
- *zoom: 1;
-}
-
-.navbar-form:before,
-.navbar-form:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.navbar-form:after {
- clear: both;
-}
-
-.navbar-form input,
-.navbar-form select,
-.navbar-form .radio,
-.navbar-form .checkbox {
- margin-top: 5px;
-}
-
-.navbar-form input,
-.navbar-form select,
-.navbar-form .btn {
- display: inline-block;
- margin-bottom: 0;
-}
-
-.navbar-form input[type="image"],
-.navbar-form input[type="checkbox"],
-.navbar-form input[type="radio"] {
- margin-top: 3px;
-}
-
-.navbar-form .input-append,
-.navbar-form .input-prepend {
- margin-top: 6px;
- white-space: nowrap;
-}
-
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
- margin-top: 0;
-}
-
-.navbar-search {
- position: relative;
- float: left;
- margin-top: 5px;
- margin-bottom: 0;
-}
-
-.navbar-search .search-query {
- padding: 4px 14px;
- margin-bottom: 0;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- font-weight: normal;
- line-height: 1;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
-}
-
-.navbar-static-top {
- position: static;
- width: 100%;
- margin-bottom: 0;
-}
-
-.navbar-static-top .navbar-inner {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
- margin-bottom: 0;
-}
-
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
- border-width: 0 0 1px;
-}
-
-.navbar-fixed-bottom .navbar-inner {
- border-width: 1px 0 0;
-}
-
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
- padding-right: 0;
- padding-left: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
-}
-
-.navbar-fixed-top {
- top: 0;
-}
-
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);
-}
-
-.navbar-fixed-bottom {
- bottom: 0;
-}
-
-.navbar-fixed-bottom .navbar-inner {
- -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1), 0 -1px 10px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1), 0 -1px 10px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.1), 0 -1px 10px rgba(0, 0, 0, 0.1);
-}
-
-.navbar .nav {
- position: relative;
- left: 0;
- display: block;
- float: left;
- margin: 0 10px 0 0;
-}
-
-.navbar .nav.pull-right {
- float: right;
- margin-right: 0;
-}
-
-.navbar .nav > li {
- float: left;
-}
-
-.navbar .nav > li > a {
- float: none;
- padding: 10px 15px 10px;
- color: #777777;
- text-decoration: none;
- text-shadow: 0 1px 0 #ffffff;
-}
-
-.navbar .nav .dropdown-toggle .caret {
- margin-top: 8px;
-}
-
-.navbar .nav > li > a:focus,
-.navbar .nav > li > a:hover {
- color: #333333;
- text-decoration: none;
- background-color: transparent;
-}
-
-.navbar .nav > .active > a,
-.navbar .nav > .active > a:hover,
-.navbar .nav > .active > a:focus {
- color: #555555;
- text-decoration: none;
- background-color: #e5e5e5;
- -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
- -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
-}
-
-.navbar .btn-navbar {
- display: none;
- float: right;
- padding: 7px 10px;
- margin-right: 5px;
- margin-left: 5px;
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #ededed;
- *background-color: #e5e5e5;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
- background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
- background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
- background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
- background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
- background-repeat: repeat-x;
- border-color: #e5e5e5 #e5e5e5 #bfbfbf;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
-}
-
-.navbar .btn-navbar:hover,
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active,
-.navbar .btn-navbar.disabled,
-.navbar .btn-navbar[disabled] {
- color: #ffffff;
- background-color: #e5e5e5;
- *background-color: #d9d9d9;
-}
-
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active {
- background-color: #cccccc \9;
-}
-
-.navbar .btn-navbar .icon-bar {
- display: block;
- width: 18px;
- height: 2px;
- background-color: #f5f5f5;
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- border-radius: 1px;
- -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-}
-
-.btn-navbar .icon-bar + .icon-bar {
- margin-top: 3px;
-}
-
-.navbar .nav > li > .dropdown-menu:before {
- position: absolute;
- top: -7px;
- left: 9px;
- display: inline-block;
- border-right: 7px solid transparent;
- border-bottom: 7px solid #ccc;
- border-left: 7px solid transparent;
- border-bottom-color: rgba(0, 0, 0, 0.2);
- content: '';
-}
-
-.navbar .nav > li > .dropdown-menu:after {
- position: absolute;
- top: -6px;
- left: 10px;
- display: inline-block;
- border-right: 6px solid transparent;
- border-bottom: 6px solid #ffffff;
- border-left: 6px solid transparent;
- content: '';
-}
-
-.navbar-fixed-bottom .nav > li > .dropdown-menu:before {
- top: auto;
- bottom: -7px;
- border-top: 7px solid #ccc;
- border-bottom: 0;
- border-top-color: rgba(0, 0, 0, 0.2);
-}
-
-.navbar-fixed-bottom .nav > li > .dropdown-menu:after {
- top: auto;
- bottom: -6px;
- border-top: 6px solid #ffffff;
- border-bottom: 0;
-}
-
-.navbar .nav li.dropdown.open > .dropdown-toggle,
-.navbar .nav li.dropdown.active > .dropdown-toggle,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle {
- color: #555555;
- background-color: #e5e5e5;
-}
-
-.navbar .nav li.dropdown > .dropdown-toggle .caret {
- border-top-color: #777777;
- border-bottom-color: #777777;
-}
-
-.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
- border-top-color: #555555;
- border-bottom-color: #555555;
-}
-
-.navbar .pull-right > li > .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-
-.navbar .pull-right > li > .dropdown-menu:before,
-.navbar .nav > li > .dropdown-menu.pull-right:before {
- right: 12px;
- left: auto;
-}
-
-.navbar .pull-right > li > .dropdown-menu:after,
-.navbar .nav > li > .dropdown-menu.pull-right:after {
- right: 13px;
- left: auto;
-}
-
-.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
- right: 100%;
- left: auto;
- margin-right: -1px;
- margin-left: 0;
- -webkit-border-radius: 6px 0 6px 6px;
- -moz-border-radius: 6px 0 6px 6px;
- border-radius: 6px 0 6px 6px;
-}
-
-.navbar-inverse {
- color: #999999;
-}
-
-.navbar-inverse .navbar-inner {
- background-color: #1b1b1b;
- background-image: -moz-linear-gradient(top, #222222, #111111);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
- background-image: -webkit-linear-gradient(top, #222222, #111111);
- background-image: -o-linear-gradient(top, #222222, #111111);
- background-image: linear-gradient(to bottom, #222222, #111111);
- background-repeat: repeat-x;
- border-color: #252525;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
-}
-
-.navbar-inverse .brand,
-.navbar-inverse .nav > li > a {
- color: #999999;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-
-.navbar-inverse .brand:hover,
-.navbar-inverse .nav > li > a:hover {
- color: #ffffff;
-}
-
-.navbar-inverse .nav > li > a:focus,
-.navbar-inverse .nav > li > a:hover {
- color: #ffffff;
- background-color: transparent;
-}
-
-.navbar-inverse .nav .active > a,
-.navbar-inverse .nav .active > a:hover,
-.navbar-inverse .nav .active > a:focus {
- color: #ffffff;
- background-color: #111111;
-}
-
-.navbar-inverse .navbar-link {
- color: #999999;
-}
-
-.navbar-inverse .navbar-link:hover {
- color: #ffffff;
-}
-
-.navbar-inverse .divider-vertical {
- border-right-color: #222222;
- border-left-color: #111111;
-}
-
-.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
-.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
-.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
- color: #ffffff;
- background-color: #111111;
-}
-
-.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
- border-top-color: #999999;
- border-bottom-color: #999999;
-}
-
-.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
-}
-
-.navbar-inverse .navbar-search .search-query {
- color: #ffffff;
- background-color: #515151;
- border-color: #111111;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
- -webkit-transition: none;
- -moz-transition: none;
- -o-transition: none;
- transition: none;
-}
-
-.navbar-inverse .navbar-search .search-query:-moz-placeholder {
- color: #cccccc;
-}
-
-.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
- color: #cccccc;
-}
-
-.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
- color: #cccccc;
-}
-
-.navbar-inverse .navbar-search .search-query:focus,
-.navbar-inverse .navbar-search .search-query.focused {
- padding: 5px 15px;
- color: #333333;
- text-shadow: 0 1px 0 #ffffff;
- background-color: #ffffff;
- border: 0;
- outline: 0;
- -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-}
-
-.navbar-inverse .btn-navbar {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #0e0e0e;
- *background-color: #040404;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
- background-image: -webkit-linear-gradient(top, #151515, #040404);
- background-image: -o-linear-gradient(top, #151515, #040404);
- background-image: linear-gradient(to bottom, #151515, #040404);
- background-image: -moz-linear-gradient(top, #151515, #040404);
- background-repeat: repeat-x;
- border-color: #040404 #040404 #000000;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-}
-
-.navbar-inverse .btn-navbar:hover,
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active,
-.navbar-inverse .btn-navbar.disabled,
-.navbar-inverse .btn-navbar[disabled] {
- color: #ffffff;
- background-color: #040404;
- *background-color: #000000;
-}
-
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active {
- background-color: #000000 \9;
-}
-
-.breadcrumb {
- padding: 8px 15px;
- margin: 0 0 20px;
- list-style: none;
- background-color: #f5f5f5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-.breadcrumb li {
- display: inline-block;
- *display: inline;
- text-shadow: 0 1px 0 #ffffff;
- *zoom: 1;
-}
-
-.breadcrumb .divider {
- padding: 0 5px;
- color: #ccc;
-}
-
-.breadcrumb .active {
- color: #999999;
-}
-
-.pagination {
- height: 40px;
- margin: 20px 0;
-}
-
-.pagination ul {
- display: inline-block;
- *display: inline;
- margin-bottom: 0;
- margin-left: 0;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- *zoom: 1;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-
-.pagination ul > li {
- display: inline;
-}
-
-.pagination ul > li > a,
-.pagination ul > li > span {
- float: left;
- padding: 0 14px;
- line-height: 38px;
- text-decoration: none;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- border-left-width: 0;
-}
-
-.pagination ul > li > a:hover,
-.pagination ul > .active > a,
-.pagination ul > .active > span {
- background-color: #f5f5f5;
-}
-
-.pagination ul > .active > a,
-.pagination ul > .active > span {
- color: #999999;
- cursor: default;
-}
-
-.pagination ul > .disabled > span,
-.pagination ul > .disabled > a,
-.pagination ul > .disabled > a:hover {
- color: #999999;
- cursor: default;
- background-color: transparent;
-}
-
-.pagination ul > li:first-child > a,
-.pagination ul > li:first-child > span {
- border-left-width: 1px;
- -webkit-border-radius: 3px 0 0 3px;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-
-.pagination ul > li:last-child > a,
-.pagination ul > li:last-child > span {
- -webkit-border-radius: 0 3px 3px 0;
- -moz-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
-}
-
-.pagination-centered {
- text-align: center;
-}
-
-.pagination-right {
- text-align: right;
-}
-
-.pager {
- margin: 20px 0;
- text-align: center;
- list-style: none;
- *zoom: 1;
-}
-
-.pager:before,
-.pager:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.pager:after {
- clear: both;
-}
-
-.pager li {
- display: inline;
-}
-
-.pager a,
-.pager span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
-}
-
-.pager a:hover {
- text-decoration: none;
- background-color: #f5f5f5;
-}
-
-.pager .next a,
-.pager .next span {
- float: right;
-}
-
-.pager .previous a {
- float: left;
-}
-
-.pager .disabled a,
-.pager .disabled a:hover,
-.pager .disabled span {
- color: #999999;
- cursor: default;
- background-color: #fff;
-}
-
-.modal-open .modal .dropdown-menu {
- z-index: 2050;
-}
-
-.modal-open .modal .dropdown.open {
- *z-index: 2050;
-}
-
-.modal-open .modal .popover {
- z-index: 2060;
-}
-
-.modal-open .modal .tooltip {
- z-index: 2080;
-}
-
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000000;
-}
-
-.modal-backdrop.fade {
- opacity: 0;
-}
-
-.modal-backdrop,
-.modal-backdrop.fade.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-
-.modal {
- position: fixed;
- top: 50%;
- left: 50%;
- z-index: 1050;
- width: 560px;
- margin: -250px 0 0 -280px;
- overflow: auto;
- background-color: #ffffff;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, 0.3);
- *border: 1px solid #999;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding-box;
- background-clip: padding-box;
-}
-
-.modal.fade {
- top: -25%;
- -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
- -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
- -o-transition: opacity 0.3s linear, top 0.3s ease-out;
- transition: opacity 0.3s linear, top 0.3s ease-out;
-}
-
-.modal.fade.in {
- top: 50%;
-}
-
-.modal-header {
- padding: 9px 15px;
- border-bottom: 1px solid #eee;
-}
-
-.modal-header .close {
- margin-top: 2px;
-}
-
-.modal-header h3 {
- margin: 0;
- line-height: 30px;
-}
-
-.modal-body {
- max-height: 400px;
- padding: 15px;
- overflow-y: auto;
-}
-
-.modal-form {
- margin-bottom: 0;
-}
-
-.modal-footer {
- padding: 14px 15px 15px;
- margin-bottom: 0;
- text-align: right;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
- *zoom: 1;
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
- -moz-box-shadow: inset 0 1px 0 #ffffff;
- box-shadow: inset 0 1px 0 #ffffff;
-}
-
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.modal-footer:after {
- clear: both;
-}
-
-.modal-footer .btn + .btn {
- margin-bottom: 0;
- margin-left: 5px;
-}
-
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-
-.tooltip {
- position: absolute;
- z-index: 1030;
- display: block;
- padding: 5px;
- font-size: 11px;
- opacity: 0;
- filter: alpha(opacity=0);
- visibility: visible;
-}
-
-.tooltip.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-
-.tooltip.top {
- margin-top: -3px;
-}
-
-.tooltip.right {
- margin-left: 3px;
-}
-
-.tooltip.bottom {
- margin-top: 3px;
-}
-
-.tooltip.left {
- margin-left: -3px;
-}
-
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #ffffff;
- text-align: center;
- text-decoration: none;
- background-color: #000000;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-top-color: #000000;
- border-width: 5px 5px 0;
-}
-
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-right-color: #000000;
- border-width: 5px 5px 5px 0;
-}
-
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-left-color: #000000;
- border-width: 5px 0 5px 5px;
-}
-
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-bottom-color: #000000;
- border-width: 0 5px 5px;
-}
-
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1010;
- display: none;
- width: 236px;
- padding: 1px;
- background-color: #ffffff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
-}
-
-.popover.top {
- margin-bottom: 10px;
-}
-
-.popover.right {
- margin-left: 10px;
-}
-
-.popover.bottom {
- margin-top: 10px;
-}
-
-.popover.left {
- margin-right: 10px;
-}
-
-.popover-title {
- padding: 8px 14px;
- margin: 0;
- font-size: 14px;
- font-weight: normal;
- line-height: 18px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- -webkit-border-radius: 5px 5px 0 0;
- -moz-border-radius: 5px 5px 0 0;
- border-radius: 5px 5px 0 0;
-}
-
-.popover-content {
- padding: 9px 14px;
-}
-
-.popover-content p,
-.popover-content ul,
-.popover-content ol {
- margin-bottom: 0;
-}
-
-.popover .arrow,
-.popover .arrow:after {
- position: absolute;
- display: inline-block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-
-.popover .arrow:after {
- z-index: -1;
- content: "";
-}
-
-.popover.top .arrow {
- bottom: -10px;
- left: 50%;
- margin-left: -10px;
- border-top-color: #ffffff;
- border-width: 10px 10px 0;
-}
-
-.popover.top .arrow:after {
- bottom: -1px;
- left: -11px;
- border-top-color: rgba(0, 0, 0, 0.25);
- border-width: 11px 11px 0;
-}
-
-.popover.right .arrow {
- top: 50%;
- left: -10px;
- margin-top: -10px;
- border-right-color: #ffffff;
- border-width: 10px 10px 10px 0;
-}
-
-.popover.right .arrow:after {
- bottom: -11px;
- left: -1px;
- border-right-color: rgba(0, 0, 0, 0.25);
- border-width: 11px 11px 11px 0;
-}
-
-.popover.bottom .arrow {
- top: -10px;
- left: 50%;
- margin-left: -10px;
- border-bottom-color: #ffffff;
- border-width: 0 10px 10px;
-}
-
-.popover.bottom .arrow:after {
- top: -1px;
- left: -11px;
- border-bottom-color: rgba(0, 0, 0, 0.25);
- border-width: 0 11px 11px;
-}
-
-.popover.left .arrow {
- top: 50%;
- right: -10px;
- margin-top: -10px;
- border-left-color: #ffffff;
- border-width: 10px 0 10px 10px;
-}
-
-.popover.left .arrow:after {
- right: -1px;
- bottom: -11px;
- border-left-color: rgba(0, 0, 0, 0.25);
- border-width: 11px 0 11px 11px;
-}
-
-.thumbnails {
- margin-left: -20px;
- list-style: none;
- *zoom: 1;
-}
-
-.thumbnails:before,
-.thumbnails:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.thumbnails:after {
- clear: both;
-}
-
-.row-fluid .thumbnails {
- margin-left: 0;
-}
-
-.thumbnails > li {
- float: left;
- margin-bottom: 20px;
- margin-left: 20px;
-}
-
-.thumbnail {
- display: block;
- padding: 4px;
- line-height: 20px;
- border: 1px solid #ddd;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
- -webkit-transition: all 0.2s ease-in-out;
- -moz-transition: all 0.2s ease-in-out;
- -o-transition: all 0.2s ease-in-out;
- transition: all 0.2s ease-in-out;
-}
-
-a.thumbnail:hover {
- border-color: #0088cc;
- -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-}
-
-.thumbnail > img {
- display: block;
- max-width: 100%;
- margin-right: auto;
- margin-left: auto;
-}
-
-.thumbnail .caption {
- padding: 9px;
- color: #555555;
-}
-
-.label,
-.badge {
- font-size: 11.844px;
- font-weight: bold;
- line-height: 14px;
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- white-space: nowrap;
- vertical-align: baseline;
- background-color: #999999;
-}
-
-.label {
- padding: 1px 4px 2px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-
-.badge {
- padding: 1px 9px 2px;
- -webkit-border-radius: 9px;
- -moz-border-radius: 9px;
- border-radius: 9px;
-}
-
-a.label:hover,
-a.badge:hover {
- color: #ffffff;
- text-decoration: none;
- cursor: pointer;
-}
-
-.label-important,
-.badge-important {
- background-color: #b94a48;
-}
-
-.label-important[href],
-.badge-important[href] {
- background-color: #953b39;
-}
-
-.label-warning,
-.badge-warning {
- background-color: #f89406;
-}
-
-.label-warning[href],
-.badge-warning[href] {
- background-color: #c67605;
-}
-
-.label-success,
-.badge-success {
- background-color: #468847;
-}
-
-.label-success[href],
-.badge-success[href] {
- background-color: #356635;
-}
-
-.label-info,
-.badge-info {
- background-color: #3a87ad;
-}
-
-.label-info[href],
-.badge-info[href] {
- background-color: #2d6987;
-}
-
-.label-inverse,
-.badge-inverse {
- background-color: #333333;
-}
-
-.label-inverse[href],
-.badge-inverse[href] {
- background-color: #1a1a1a;
-}
-
-.btn .label,
-.btn .badge {
- position: relative;
- top: -1px;
-}
-
-.btn-mini .label,
-.btn-mini .badge {
- top: 0;
-}
-
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-
-@-moz-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-
-@-ms-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
-}
-
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-
-.progress {
- height: 20px;
- margin-bottom: 20px;
- overflow: hidden;
- background-color: #f7f7f7;
- background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
- background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
- background-repeat: repeat-x;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-}
-
-.progress .bar {
- float: left;
- width: 0;
- height: 100%;
- font-size: 12px;
- color: #ffffff;
- text-align: center;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #0e90d2;
- background-image: -moz-linear-gradient(top, #149bdf, #0480be);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
- background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
- background-image: -o-linear-gradient(top, #149bdf, #0480be);
- background-image: linear-gradient(to bottom, #149bdf, #0480be);
- background-repeat: repeat-x;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: width 0.6s ease;
- -moz-transition: width 0.6s ease;
- -o-transition: width 0.6s ease;
- transition: width 0.6s ease;
-}
-
-.progress .bar + .bar {
- -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-}
-
-.progress-striped .bar {
- background-color: #149bdf;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- -moz-background-size: 40px 40px;
- -o-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-
-.progress.active .bar {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -moz-animation: progress-bar-stripes 2s linear infinite;
- -ms-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-
-.progress-danger .bar,
-.progress .bar-danger {
- background-color: #dd514c;
- background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
- background-repeat: repeat-x;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
-}
-
-.progress-danger.progress-striped .bar,
-.progress-striped .bar-danger {
- background-color: #ee5f5b;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.progress-success .bar,
-.progress .bar-success {
- background-color: #5eb95e;
- background-image: -moz-linear-gradient(top, #62c462, #57a957);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
- background-image: -webkit-linear-gradient(top, #62c462, #57a957);
- background-image: -o-linear-gradient(top, #62c462, #57a957);
- background-image: linear-gradient(to bottom, #62c462, #57a957);
- background-repeat: repeat-x;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
-}
-
-.progress-success.progress-striped .bar,
-.progress-striped .bar-success {
- background-color: #62c462;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.progress-info .bar,
-.progress .bar-info {
- background-color: #4bb1cf;
- background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
- background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
- background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
- background-repeat: repeat-x;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
-}
-
-.progress-info.progress-striped .bar,
-.progress-striped .bar-info {
- background-color: #5bc0de;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.progress-warning .bar,
-.progress .bar-warning {
- background-color: #faa732;
- background-image: -moz-linear-gradient(top, #fbb450, #f89406);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
- background-image: -o-linear-gradient(top, #fbb450, #f89406);
- background-image: linear-gradient(to bottom, #fbb450, #f89406);
- background-repeat: repeat-x;
- filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
-}
-
-.progress-warning.progress-striped .bar,
-.progress-striped .bar-warning {
- background-color: #fbb450;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-
-.accordion {
- margin-bottom: 20px;
-}
-
-.accordion-group {
- margin-bottom: 2px;
- border: 1px solid #e5e5e5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-
-.accordion-heading {
- border-bottom: 0;
-}
-
-.accordion-heading .accordion-toggle {
- display: block;
- padding: 8px 15px;
-}
-
-.accordion-toggle {
- cursor: pointer;
-}
-
-.accordion-inner {
- padding: 9px 15px;
- border-top: 1px solid #e5e5e5;
-}
-
-.carousel {
- position: relative;
- margin-bottom: 20px;
- line-height: 1;
-}
-
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-
-.carousel .item {
- position: relative;
- display: none;
- -webkit-transition: 0.6s ease-in-out left;
- -moz-transition: 0.6s ease-in-out left;
- -o-transition: 0.6s ease-in-out left;
- transition: 0.6s ease-in-out left;
-}
-
-.carousel .item > img {
- display: block;
- line-height: 1;
-}
-
-.carousel .active,
-.carousel .next,
-.carousel .prev {
- display: block;
-}
-
-.carousel .active {
- left: 0;
-}
-
-.carousel .next,
-.carousel .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-
-.carousel .next {
- left: 100%;
-}
-
-.carousel .prev {
- left: -100%;
-}
-
-.carousel .next.left,
-.carousel .prev.right {
- left: 0;
-}
-
-.carousel .active.left {
- left: -100%;
-}
-
-.carousel .active.right {
- left: 100%;
-}
-
-.carousel-control {
- position: absolute;
- top: 40%;
- left: 15px;
- width: 40px;
- height: 40px;
- margin-top: -20px;
- font-size: 60px;
- font-weight: 100;
- line-height: 30px;
- color: #ffffff;
- text-align: center;
- background: #222222;
- border: 3px solid #ffffff;
- -webkit-border-radius: 23px;
- -moz-border-radius: 23px;
- border-radius: 23px;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-
-.carousel-control.right {
- right: 15px;
- left: auto;
-}
-
-.carousel-control:hover {
- color: #ffffff;
- text-decoration: none;
- opacity: 0.9;
- filter: alpha(opacity=90);
-}
-
-.carousel-caption {
- position: absolute;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 15px;
- background: #333333;
- background: rgba(0, 0, 0, 0.75);
-}
-
-.carousel-caption h4,
-.carousel-caption p {
- line-height: 20px;
- color: #ffffff;
-}
-
-.carousel-caption h4 {
- margin: 0 0 5px;
-}
-
-.carousel-caption p {
- margin-bottom: 0;
-}
-
-.hero-unit {
- padding: 60px;
- margin-bottom: 30px;
- background-color: #eeeeee;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-
-.hero-unit h1 {
- margin-bottom: 0;
- font-size: 60px;
- line-height: 1;
- letter-spacing: -1px;
- color: inherit;
-}
-
-.hero-unit p {
- font-size: 18px;
- font-weight: 200;
- line-height: 30px;
- color: inherit;
-}
-
-.pull-right {
- float: right;
-}
-
-.pull-left {
- float: left;
-}
-
-.hide {
- display: none;
-}
-
-.show {
- display: block;
-}
-
-.invisible {
- visibility: hidden;
-}
-
-.affix {
- position: fixed;
-}
diff --git a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap.min.css b/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap.min.css
deleted file mode 100644
index 31d8b96..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/css/bootstrap.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * Bootstrap v2.1.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}.text-warning{color:#c09853}.text-error{color:#b94a48}.text-info{color:#3a87ad}.text-success{color:#468847}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:1;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1{font-size:36px;line-height:40px}h2{font-size:30px;line-height:40px}h3{font-size:24px;line-height:40px}h4{font-size:18px;line-height:20px}h5{font-size:14px;line-height:20px}h6{font-size:12px;line-height:20px}h1 small{font-size:24px}h2 small{font-size:18px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:9px;font-size:14px;line-height:20px;color:#555;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal;cursor:pointer}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"]{float:left}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info>label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;font-size:14px;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .add-on,.input-append .btn{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topleft:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}table [class*=span],.row-fluid table [class*=span]{display:table-cell;float:none;margin-left:0}.table .span1{float:none;width:44px;margin-left:0}.table .span2{float:none;width:124px;margin-left:0}.table .span3{float:none;width:204px;margin-left:0}.table .span4{float:none;width:284px;margin-left:0}.table .span5{float:none;width:364px;margin-left:0}.table .span6{float:none;width:444px;margin-left:0}.table .span7{float:none;width:524px;margin-left:0}.table .span8{float:none;width:604px;margin-left:0}.table .span9{float:none;width:684px;margin-left:0}.table .span10{float:none;width:764px;margin-left:0}.table .span11{float:none;width:844px;margin-left:0}.table .span12{float:none;width:924px;margin-left:0}.table .span13{float:none;width:1004px;margin-left:0}.table .span14{float:none;width:1084px;margin-left:0}.table .span15{float:none;width:1164px;margin-left:0}.table .span16{float:none;width:1244px;margin-left:0}.table .span17{float:none;width:1324px;margin-left:0}.table .span18{float:none;width:1404px;margin-left:0}.table .span19{float:none;width:1484px;margin-left:0}.table .span20{float:none;width:1564px;margin-left:0}.table .span21{float:none;width:1644px;margin-left:0}.table .span22{float:none;width:1724px;margin-left:0}.table .span23{float:none;width:1804px;margin-left:0}.table .span24{float:none;width:1884px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.warning td{background-color:#fcf8e3}.table tbody tr.info td{background-color:#d9edf7}.table-hover tbody tr.success:hover td{background-color:#d0e9c6}.table-hover tbody tr.error:hover td{background-color:#ebcccc}.table-hover tbody tr.warning:hover td{background-color:#faf2cc}.table-hover tbody tr.info:hover td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-tabs>.active>a>[class^="icon-"],.nav-tabs>.active>a>[class*=" icon-"],.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#08c;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#08c;background-color:#0081c2;background-image:linear-gradient(to bottom,#08c,#0077b3);background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 14px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;*line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^="icon-"]{margin-top:2px}.btn-small{padding:3px 9px;font-size:12px;line-height:18px}.btn-small [class^="icon-"]{margin-top:0}.btn-mini{padding:2px 6px;font-size:11px;line-height:17px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,0.15) rgba(0,0,0,0.15) rgba(0,0,0,0.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-image:-moz-linear-gradient(top,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-image:-moz-linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-image:-moz-linear-gradient(top,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover{color:#333;text-decoration:none}.btn-group{position:relative;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-toolbar .btn+.btn,.btn-toolbar .btn-group+.btn,.btn-toolbar .btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical .btn{display:block;float:none;width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical .btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical .btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;color:#c09853;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible;color:#777}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;width:100%;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.1),0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1);box-shadow:inset 0 1px 0 rgba(0,0,0,0.1),0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse{color:#999}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-image:-moz-linear-gradient(top,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#ccc}.breadcrumb .active{color:#999}.pagination{height:40px;margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:0 14px;line-height:38px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager a,.pager span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next a,.pager .next span{float:right}.pager .previous a{float:left}.pager .disabled a,.pager .disabled a:hover,.pager .disabled span{color:#999;cursor:default;background-color:#fff}.modal-open .modal .dropdown-menu{z-index:2050}.modal-open .modal .dropdown.open{*z-index:2050}.modal-open .modal .popover{z-index:2060}.modal-open .modal .tooltip{z-index:2080}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;overflow:auto;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1030;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-bottom:10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-right:10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow:after{z-index:-1;content:""}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-top-color:#fff;border-width:10px 10px 0}.popover.top .arrow:after{bottom:-1px;left:-11px;border-top-color:rgba(0,0,0,0.25);border-width:11px 11px 0}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-right-color:#fff;border-width:10px 10px 10px 0}.popover.right .arrow:after{bottom:-11px;left:-1px;border-right-color:rgba(0,0,0,0.25);border-width:11px 11px 11px 0}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-bottom-color:#fff;border-width:0 10px 10px}.popover.bottom .arrow:after{top:-1px;left:-11px;border-bottom-color:rgba(0,0,0,0.25);border-width:0 11px 11px}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;border-left-color:#fff;border-width:10px 0 10px 10px}.popover.left .arrow:after{right:-1px;bottom:-11px;border-left-color:rgba(0,0,0,0.25);border-width:11px 0 11px 11px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.label,.badge{font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel .item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel .item>img{display:block;line-height:1}.carousel .active,.carousel .next,.carousel .prev{display:block}.carousel .active{left:0}.carousel .next,.carousel .prev{position:absolute;top:0;width:100%}.carousel .next{left:100%}.carousel .prev{left:-100%}.carousel .next.left,.carousel .prev.right{left:0}.carousel .active.left{left:-100%}.carousel .active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit p{font-size:18px;font-weight:200;line-height:30px;color:inherit}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/examples/moviefun-plus/src/main/webapp/assets/css/movie.css b/examples/moviefun-plus/src/main/webapp/assets/css/movie.css
deleted file mode 100644
index 8e024aa..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/css/movie.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.movie-input-form {
- padding: 20px;
- background-color: #EEE;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
diff --git a/examples/moviefun-plus/src/main/webapp/assets/img/glyphicons-halflings-white.png b/examples/moviefun-plus/src/main/webapp/assets/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/img/glyphicons-halflings-white.png
+++ /dev/null
Binary files differ
diff --git a/examples/moviefun-plus/src/main/webapp/assets/img/glyphicons-halflings.png b/examples/moviefun-plus/src/main/webapp/assets/img/glyphicons-halflings.png
deleted file mode 100644
index a996999..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/img/glyphicons-halflings.png
+++ /dev/null
Binary files differ
diff --git a/examples/moviefun-plus/src/main/webapp/assets/js/bootstrap.js b/examples/moviefun-plus/src/main/webapp/assets/js/bootstrap.js
deleted file mode 100644
index f73fcb8..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/js/bootstrap.js
+++ /dev/null
@@ -1,2027 +0,0 @@
-/* ===================================================
- * bootstrap-transition.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#transitions
- * ===================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ========================================================== */
-
-
-!function ($) {
-
- $(function () {
-
- "use strict"; // jshint ;_;
-
-
- /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
- * ======================================================= */
-
- $.support.transition = (function () {
-
- var transitionEnd = (function () {
-
- var el = document.createElement('bootstrap')
- , transEndEventNames = {
- 'WebkitTransition' : 'webkitTransitionEnd'
- , 'MozTransition' : 'transitionend'
- , 'OTransition' : 'oTransitionEnd otransitionend'
- , 'transition' : 'transitionend'
- }
- , name
-
- for (name in transEndEventNames){
- if (el.style[name] !== undefined) {
- return transEndEventNames[name]
- }
- }
-
- }())
-
- return transitionEnd && {
- end: transitionEnd
- }
-
- })()
-
- })
-
-}(window.jQuery);/* ==========================================================
- * bootstrap-alert.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#alerts
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ========================================================== */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* ALERT CLASS DEFINITION
- * ====================== */
-
- var dismiss = '[data-dismiss="alert"]'
- , Alert = function (el) {
- $(el).on('click', dismiss, this.close)
- }
-
- Alert.prototype.close = function (e) {
- var $this = $(this)
- , selector = $this.attr('data-target')
- , $parent
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
-
- $parent = $(selector)
-
- e && e.preventDefault()
-
- $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
-
- $parent.trigger(e = $.Event('close'))
-
- if (e.isDefaultPrevented()) return
-
- $parent.removeClass('in')
-
- function removeElement() {
- $parent
- .trigger('closed')
- .remove()
- }
-
- $.support.transition && $parent.hasClass('fade') ?
- $parent.on($.support.transition.end, removeElement) :
- removeElement()
- }
-
-
- /* ALERT PLUGIN DEFINITION
- * ======================= */
-
- $.fn.alert = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('alert')
- if (!data) $this.data('alert', (data = new Alert(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- $.fn.alert.Constructor = Alert
-
-
- /* ALERT DATA-API
- * ============== */
-
- $(function () {
- $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
- })
-
-}(window.jQuery);/* ============================================================
- * bootstrap-button.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#buttons
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ============================================================ */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* BUTTON PUBLIC CLASS DEFINITION
- * ============================== */
-
- var Button = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.button.defaults, options)
- }
-
- Button.prototype.setState = function (state) {
- var d = 'disabled'
- , $el = this.$element
- , data = $el.data()
- , val = $el.is('input') ? 'val' : 'html'
-
- state = state + 'Text'
- data.resetText || $el.data('resetText', $el[val]())
-
- $el[val](data[state] || this.options[state])
-
- // push to event loop to allow forms to submit
- setTimeout(function () {
- state == 'loadingText' ?
- $el.addClass(d).attr(d, d) :
- $el.removeClass(d).removeAttr(d)
- }, 0)
- }
-
- Button.prototype.toggle = function () {
- var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
-
- $parent && $parent
- .find('.active')
- .removeClass('active')
-
- this.$element.toggleClass('active')
- }
-
-
- /* BUTTON PLUGIN DEFINITION
- * ======================== */
-
- $.fn.button = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('button')
- , options = typeof option == 'object' && option
- if (!data) $this.data('button', (data = new Button(this, options)))
- if (option == 'toggle') data.toggle()
- else if (option) data.setState(option)
- })
- }
-
- $.fn.button.defaults = {
- loadingText: 'loading...'
- }
-
- $.fn.button.Constructor = Button
-
-
- /* BUTTON DATA-API
- * =============== */
-
- $(function () {
- $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
- $btn.button('toggle')
- })
- })
-
-}(window.jQuery);/* ==========================================================
- * bootstrap-carousel.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#carousel
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ========================================================== */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* CAROUSEL CLASS DEFINITION
- * ========================= */
-
- var Carousel = function (element, options) {
- this.$element = $(element)
- this.options = options
- this.options.slide && this.slide(this.options.slide)
- this.options.pause == 'hover' && this.$element
- .on('mouseenter', $.proxy(this.pause, this))
- .on('mouseleave', $.proxy(this.cycle, this))
- }
-
- Carousel.prototype = {
-
- cycle: function (e) {
- if (!e) this.paused = false
- this.options.interval
- && !this.paused
- && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
- return this
- }
-
- , to: function (pos) {
- var $active = this.$element.find('.item.active')
- , children = $active.parent().children()
- , activePos = children.index($active)
- , that = this
-
- if (pos > (children.length - 1) || pos < 0) return
-
- if (this.sliding) {
- return this.$element.one('slid', function () {
- that.to(pos)
- })
- }
-
- if (activePos == pos) {
- return this.pause().cycle()
- }
-
- return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
- }
-
- , pause: function (e) {
- if (!e) this.paused = true
- if (this.$element.find('.next, .prev').length && $.support.transition.end) {
- this.$element.trigger($.support.transition.end)
- this.cycle()
- }
- clearInterval(this.interval)
- this.interval = null
- return this
- }
-
- , next: function () {
- if (this.sliding) return
- return this.slide('next')
- }
-
- , prev: function () {
- if (this.sliding) return
- return this.slide('prev')
- }
-
- , slide: function (type, next) {
- var $active = this.$element.find('.item.active')
- , $next = next || $active[type]()
- , isCycling = this.interval
- , direction = type == 'next' ? 'left' : 'right'
- , fallback = type == 'next' ? 'first' : 'last'
- , that = this
- , e = $.Event('slide', {
- relatedTarget: $next[0]
- })
-
- this.sliding = true
-
- isCycling && this.pause()
-
- $next = $next.length ? $next : this.$element.find('.item')[fallback]()
-
- if ($next.hasClass('active')) return
-
- if ($.support.transition && this.$element.hasClass('slide')) {
- this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
- $next.addClass(type)
- $next[0].offsetWidth // force reflow
- $active.addClass(direction)
- $next.addClass(direction)
- this.$element.one($.support.transition.end, function () {
- $next.removeClass([type, direction].join(' ')).addClass('active')
- $active.removeClass(['active', direction].join(' '))
- that.sliding = false
- setTimeout(function () { that.$element.trigger('slid') }, 0)
- })
- } else {
- this.$element.trigger(e)
- if (e.isDefaultPrevented()) return
- $active.removeClass('active')
- $next.addClass('active')
- this.sliding = false
- this.$element.trigger('slid')
- }
-
- isCycling && this.cycle()
-
- return this
- }
-
- }
-
-
- /* CAROUSEL PLUGIN DEFINITION
- * ========================== */
-
- $.fn.carousel = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('carousel')
- , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
- , action = typeof option == 'string' ? option : options.slide
- if (!data) $this.data('carousel', (data = new Carousel(this, options)))
- if (typeof option == 'number') data.to(option)
- else if (action) data[action]()
- else if (options.interval) data.cycle()
- })
- }
-
- $.fn.carousel.defaults = {
- interval: 5000
- , pause: 'hover'
- }
-
- $.fn.carousel.Constructor = Carousel
-
-
- /* CAROUSEL DATA-API
- * ================= */
-
- $(function () {
- $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
- var $this = $(this), href
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
- $target.carousel(options)
- e.preventDefault()
- })
- })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-collapse.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#collapse
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ============================================================ */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* COLLAPSE PUBLIC CLASS DEFINITION
- * ================================ */
-
- var Collapse = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.collapse.defaults, options)
-
- if (this.options.parent) {
- this.$parent = $(this.options.parent)
- }
-
- this.options.toggle && this.toggle()
- }
-
- Collapse.prototype = {
-
- constructor: Collapse
-
- , dimension: function () {
- var hasWidth = this.$element.hasClass('width')
- return hasWidth ? 'width' : 'height'
- }
-
- , show: function () {
- var dimension
- , scroll
- , actives
- , hasData
-
- if (this.transitioning) return
-
- dimension = this.dimension()
- scroll = $.camelCase(['scroll', dimension].join('-'))
- actives = this.$parent && this.$parent.find('> .accordion-group > .in')
-
- if (actives && actives.length) {
- hasData = actives.data('collapse')
- if (hasData && hasData.transitioning) return
- actives.collapse('hide')
- hasData || actives.data('collapse', null)
- }
-
- this.$element[dimension](0)
- this.transition('addClass', $.Event('show'), 'shown')
- $.support.transition && this.$element[dimension](this.$element[0][scroll])
- }
-
- , hide: function () {
- var dimension
- if (this.transitioning) return
- dimension = this.dimension()
- this.reset(this.$element[dimension]())
- this.transition('removeClass', $.Event('hide'), 'hidden')
- this.$element[dimension](0)
- }
-
- , reset: function (size) {
- var dimension = this.dimension()
-
- this.$element
- .removeClass('collapse')
- [dimension](size || 'auto')
- [0].offsetWidth
-
- this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
-
- return this
- }
-
- , transition: function (method, startEvent, completeEvent) {
- var that = this
- , complete = function () {
- if (startEvent.type == 'show') that.reset()
- that.transitioning = 0
- that.$element.trigger(completeEvent)
- }
-
- this.$element.trigger(startEvent)
-
- if (startEvent.isDefaultPrevented()) return
-
- this.transitioning = 1
-
- this.$element[method]('in')
-
- $.support.transition && this.$element.hasClass('collapse') ?
- this.$element.one($.support.transition.end, complete) :
- complete()
- }
-
- , toggle: function () {
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
- }
-
- }
-
-
- /* COLLAPSIBLE PLUGIN DEFINITION
- * ============================== */
-
- $.fn.collapse = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('collapse')
- , options = typeof option == 'object' && option
- if (!data) $this.data('collapse', (data = new Collapse(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.collapse.defaults = {
- toggle: true
- }
-
- $.fn.collapse.Constructor = Collapse
-
-
- /* COLLAPSIBLE DATA-API
- * ==================== */
-
- $(function () {
- $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
- var $this = $(this), href
- , target = $this.attr('data-target')
- || e.preventDefault()
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
- $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
- $(target).collapse(option)
- })
- })
-
-}(window.jQuery);/* ============================================================
- * bootstrap-dropdown.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ============================================================ */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* DROPDOWN CLASS DEFINITION
- * ========================= */
-
- var toggle = '[data-toggle=dropdown]'
- , Dropdown = function (element) {
- var $el = $(element).on('click.dropdown.data-api', this.toggle)
- $('html').on('click.dropdown.data-api', function () {
- $el.parent().removeClass('open')
- })
- }
-
- Dropdown.prototype = {
-
- constructor: Dropdown
-
- , toggle: function (e) {
- var $this = $(this)
- , $parent
- , isActive
-
- if ($this.is('.disabled, :disabled')) return
-
- $parent = getParent($this)
-
- isActive = $parent.hasClass('open')
-
- clearMenus()
-
- if (!isActive) {
- $parent.toggleClass('open')
- $this.focus()
- }
-
- return false
- }
-
- , keydown: function (e) {
- var $this
- , $items
- , $active
- , $parent
- , isActive
- , index
-
- if (!/(38|40|27)/.test(e.keyCode)) return
-
- $this = $(this)
-
- e.preventDefault()
- e.stopPropagation()
-
- if ($this.is('.disabled, :disabled')) return
-
- $parent = getParent($this)
-
- isActive = $parent.hasClass('open')
-
- if (!isActive || (isActive && e.keyCode == 27)) return $this.click()
-
- $items = $('[role=menu] li:not(.divider) a', $parent)
-
- if (!$items.length) return
-
- index = $items.index($items.filter(':focus'))
-
- if (e.keyCode == 38 && index > 0) index-- // up
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
- if (!~index) index = 0
-
- $items
- .eq(index)
- .focus()
- }
-
- }
-
- function clearMenus() {
- getParent($(toggle))
- .removeClass('open')
- }
-
- function getParent($this) {
- var selector = $this.attr('data-target')
- , $parent
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
-
- $parent = $(selector)
- $parent.length || ($parent = $this.parent())
-
- return $parent
- }
-
-
- /* DROPDOWN PLUGIN DEFINITION
- * ========================== */
-
- $.fn.dropdown = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('dropdown')
- if (!data) $this.data('dropdown', (data = new Dropdown(this)))
- if (typeof option == 'string') data[option].call($this)
- })
- }
-
- $.fn.dropdown.Constructor = Dropdown
-
-
- /* APPLY TO STANDARD DROPDOWN ELEMENTS
- * =================================== */
-
- $(function () {
- $('html')
- .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus)
- $('body')
- .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
- .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
- .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
- })
-
-}(window.jQuery);/* =========================================================
- * bootstrap-modal.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#modals
- * =========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ========================================================= */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* MODAL CLASS DEFINITION
- * ====================== */
-
- var Modal = function (element, options) {
- this.options = options
- this.$element = $(element)
- .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
- this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
- }
-
- Modal.prototype = {
-
- constructor: Modal
-
- , toggle: function () {
- return this[!this.isShown ? 'show' : 'hide']()
- }
-
- , show: function () {
- var that = this
- , e = $.Event('show')
-
- this.$element.trigger(e)
-
- if (this.isShown || e.isDefaultPrevented()) return
-
- $('body').addClass('modal-open')
-
- this.isShown = true
-
- this.escape()
-
- this.backdrop(function () {
- var transition = $.support.transition && that.$element.hasClass('fade')
-
- if (!that.$element.parent().length) {
- that.$element.appendTo(document.body) //don't move modals dom position
- }
-
- that.$element
- .show()
-
- if (transition) {
- that.$element[0].offsetWidth // force reflow
- }
-
- that.$element
- .addClass('in')
- .attr('aria-hidden', false)
- .focus()
-
- that.enforceFocus()
-
- transition ?
- that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
- that.$element.trigger('shown')
-
- })
- }
-
- , hide: function (e) {
- e && e.preventDefault()
-
- var that = this
-
- e = $.Event('hide')
-
- this.$element.trigger(e)
-
- if (!this.isShown || e.isDefaultPrevented()) return
-
- this.isShown = false
-
- $('body').removeClass('modal-open')
-
- this.escape()
-
- $(document).off('focusin.modal')
-
- this.$element
- .removeClass('in')
- .attr('aria-hidden', true)
-
- $.support.transition && this.$element.hasClass('fade') ?
- this.hideWithTransition() :
- this.hideModal()
- }
-
- , enforceFocus: function () {
- var that = this
- $(document).on('focusin.modal', function (e) {
- if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
- that.$element.focus()
- }
- })
- }
-
- , escape: function () {
- var that = this
- if (this.isShown && this.options.keyboard) {
- this.$element.on('keyup.dismiss.modal', function ( e ) {
- e.which == 27 && that.hide()
- })
- } else if (!this.isShown) {
- this.$element.off('keyup.dismiss.modal')
- }
- }
-
- , hideWithTransition: function () {
- var that = this
- , timeout = setTimeout(function () {
- that.$element.off($.support.transition.end)
- that.hideModal()
- }, 500)
-
- this.$element.one($.support.transition.end, function () {
- clearTimeout(timeout)
- that.hideModal()
- })
- }
-
- , hideModal: function (that) {
- this.$element
- .hide()
- .trigger('hidden')
-
- this.backdrop()
- }
-
- , removeBackdrop: function () {
- this.$backdrop.remove()
- this.$backdrop = null
- }
-
- , backdrop: function (callback) {
- var that = this
- , animate = this.$element.hasClass('fade') ? 'fade' : ''
-
- if (this.isShown && this.options.backdrop) {
- var doAnimate = $.support.transition && animate
-
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
- .appendTo(document.body)
-
- if (this.options.backdrop != 'static') {
- this.$backdrop.click($.proxy(this.hide, this))
- }
-
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
- this.$backdrop.addClass('in')
-
- doAnimate ?
- this.$backdrop.one($.support.transition.end, callback) :
- callback()
-
- } else if (!this.isShown && this.$backdrop) {
- this.$backdrop.removeClass('in')
-
- $.support.transition && this.$element.hasClass('fade')?
- this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) :
- this.removeBackdrop()
-
- } else if (callback) {
- callback()
- }
- }
- }
-
-
- /* MODAL PLUGIN DEFINITION
- * ======================= */
-
- $.fn.modal = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('modal')
- , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
- if (!data) $this.data('modal', (data = new Modal(this, options)))
- if (typeof option == 'string') data[option]()
- else if (options.show) data.show()
- })
- }
-
- $.fn.modal.defaults = {
- backdrop: true
- , keyboard: true
- , show: true
- }
-
- $.fn.modal.Constructor = Modal
-
-
- /* MODAL DATA-API
- * ============== */
-
- $(function () {
- $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
- var $this = $(this)
- , href = $this.attr('href')
- , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
- , option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
- e.preventDefault()
-
- $target
- .modal(option)
- .one('hide', function () {
- $this.focus()
- })
- })
- })
-
-}(window.jQuery);/* ===========================================================
- * bootstrap-tooltip.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ========================================================== */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* TOOLTIP PUBLIC CLASS DEFINITION
- * =============================== */
-
- var Tooltip = function (element, options) {
- this.init('tooltip', element, options)
- }
-
- Tooltip.prototype = {
-
- constructor: Tooltip
-
- , init: function (type, element, options) {
- var eventIn
- , eventOut
-
- this.type = type
- this.$element = $(element)
- this.options = this.getOptions(options)
- this.enabled = true
-
- if (this.options.trigger == 'click') {
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
- } else if (this.options.trigger != 'manual') {
- eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
- eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
- }
-
- this.options.selector ?
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
- this.fixTitle()
- }
-
- , getOptions: function (options) {
- options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
-
- if (options.delay && typeof options.delay == 'number') {
- options.delay = {
- show: options.delay
- , hide: options.delay
- }
- }
-
- return options
- }
-
- , enter: function (e) {
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
- if (!self.options.delay || !self.options.delay.show) return self.show()
-
- clearTimeout(this.timeout)
- self.hoverState = 'in'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'in') self.show()
- }, self.options.delay.show)
- }
-
- , leave: function (e) {
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
- if (this.timeout) clearTimeout(this.timeout)
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
- self.hoverState = 'out'
- this.timeout = setTimeout(function() {
- if (self.hoverState == 'out') self.hide()
- }, self.options.delay.hide)
- }
-
- , show: function () {
- var $tip
- , inside
- , pos
- , actualWidth
- , actualHeight
- , placement
- , tp
-
- if (this.hasContent() && this.enabled) {
- $tip = this.tip()
- this.setContent()
-
- if (this.options.animation) {
- $tip.addClass('fade')
- }
-
- placement = typeof this.options.placement == 'function' ?
- this.options.placement.call(this, $tip[0], this.$element[0]) :
- this.options.placement
-
- inside = /in/.test(placement)
-
- $tip
- .remove()
- .css({ top: 0, left: 0, display: 'block' })
- .appendTo(inside ? this.$element : document.body)
-
- pos = this.getPosition(inside)
-
- actualWidth = $tip[0].offsetWidth
- actualHeight = $tip[0].offsetHeight
-
- switch (inside ? placement.split(' ')[1] : placement) {
- case 'bottom':
- tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'top':
- tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
- break
- case 'left':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
- break
- case 'right':
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
- break
- }
-
- $tip
- .css(tp)
- .addClass(placement)
- .addClass('in')
- }
- }
-
- , setContent: function () {
- var $tip = this.tip()
- , title = this.getTitle()
-
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
- $tip.removeClass('fade in top bottom left right')
- }
-
- , hide: function () {
- var that = this
- , $tip = this.tip()
-
- $tip.removeClass('in')
-
- function removeWithAnimation() {
- var timeout = setTimeout(function () {
- $tip.off($.support.transition.end).remove()
- }, 500)
-
- $tip.one($.support.transition.end, function () {
- clearTimeout(timeout)
- $tip.remove()
- })
- }
-
- $.support.transition && this.$tip.hasClass('fade') ?
- removeWithAnimation() :
- $tip.remove()
-
- return this
- }
-
- , fixTitle: function () {
- var $e = this.$element
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
- $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
- }
- }
-
- , hasContent: function () {
- return this.getTitle()
- }
-
- , getPosition: function (inside) {
- return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
- width: this.$element[0].offsetWidth
- , height: this.$element[0].offsetHeight
- })
- }
-
- , getTitle: function () {
- var title
- , $e = this.$element
- , o = this.options
-
- title = $e.attr('data-original-title')
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
-
- return title
- }
-
- , tip: function () {
- return this.$tip = this.$tip || $(this.options.template)
- }
-
- , validate: function () {
- if (!this.$element[0].parentNode) {
- this.hide()
- this.$element = null
- this.options = null
- }
- }
-
- , enable: function () {
- this.enabled = true
- }
-
- , disable: function () {
- this.enabled = false
- }
-
- , toggleEnabled: function () {
- this.enabled = !this.enabled
- }
-
- , toggle: function () {
- this[this.tip().hasClass('in') ? 'hide' : 'show']()
- }
-
- , destroy: function () {
- this.hide().$element.off('.' + this.type).removeData(this.type)
- }
-
- }
-
-
- /* TOOLTIP PLUGIN DEFINITION
- * ========================= */
-
- $.fn.tooltip = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('tooltip')
- , options = typeof option == 'object' && option
- if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.tooltip.Constructor = Tooltip
-
- $.fn.tooltip.defaults = {
- animation: true
- , placement: 'top'
- , selector: false
- , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
- , trigger: 'hover'
- , title: ''
- , delay: 0
- , html: true
- }
-
-}(window.jQuery);
-/* ===========================================================
- * bootstrap-popover.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#popovers
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * =========================================================== */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* POPOVER PUBLIC CLASS DEFINITION
- * =============================== */
-
- var Popover = function (element, options) {
- this.init('popover', element, options)
- }
-
-
- /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
- ========================================== */
-
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
-
- constructor: Popover
-
- , setContent: function () {
- var $tip = this.tip()
- , title = this.getTitle()
- , content = this.getContent()
-
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content > *')[this.options.html ? 'html' : 'text'](content)
-
- $tip.removeClass('fade top bottom left right in')
- }
-
- , hasContent: function () {
- return this.getTitle() || this.getContent()
- }
-
- , getContent: function () {
- var content
- , $e = this.$element
- , o = this.options
-
- content = $e.attr('data-content')
- || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
-
- return content
- }
-
- , tip: function () {
- if (!this.$tip) {
- this.$tip = $(this.options.template)
- }
- return this.$tip
- }
-
- , destroy: function () {
- this.hide().$element.off('.' + this.type).removeData(this.type)
- }
-
- })
-
-
- /* POPOVER PLUGIN DEFINITION
- * ======================= */
-
- $.fn.popover = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('popover')
- , options = typeof option == 'object' && option
- if (!data) $this.data('popover', (data = new Popover(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.popover.Constructor = Popover
-
- $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
- placement: 'right'
- , trigger: 'click'
- , content: ''
- , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
- })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-scrollspy.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ============================================================== */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* SCROLLSPY CLASS DEFINITION
- * ========================== */
-
- function ScrollSpy(element, options) {
- var process = $.proxy(this.process, this)
- , $element = $(element).is('body') ? $(window) : $(element)
- , href
- this.options = $.extend({}, $.fn.scrollspy.defaults, options)
- this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
- this.selector = (this.options.target
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
- || '') + ' .nav li > a'
- this.$body = $('body')
- this.refresh()
- this.process()
- }
-
- ScrollSpy.prototype = {
-
- constructor: ScrollSpy
-
- , refresh: function () {
- var self = this
- , $targets
-
- this.offsets = $([])
- this.targets = $([])
-
- $targets = this.$body
- .find(this.selector)
- .map(function () {
- var $el = $(this)
- , href = $el.data('target') || $el.attr('href')
- , $href = /^#\w/.test(href) && $(href)
- return ( $href
- && $href.length
- && [[ $href.position().top, href ]] ) || null
- })
- .sort(function (a, b) { return a[0] - b[0] })
- .each(function () {
- self.offsets.push(this[0])
- self.targets.push(this[1])
- })
- }
-
- , process: function () {
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
- , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
- , maxScroll = scrollHeight - this.$scrollElement.height()
- , offsets = this.offsets
- , targets = this.targets
- , activeTarget = this.activeTarget
- , i
-
- if (scrollTop >= maxScroll) {
- return activeTarget != (i = targets.last()[0])
- && this.activate ( i )
- }
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
- && this.activate( targets[i] )
- }
- }
-
- , activate: function (target) {
- var active
- , selector
-
- this.activeTarget = target
-
- $(this.selector)
- .parent('.active')
- .removeClass('active')
-
- selector = this.selector
- + '[data-target="' + target + '"],'
- + this.selector + '[href="' + target + '"]'
-
- active = $(selector)
- .parent('li')
- .addClass('active')
-
- if (active.parent('.dropdown-menu').length) {
- active = active.closest('li.dropdown').addClass('active')
- }
-
- active.trigger('activate')
- }
-
- }
-
-
- /* SCROLLSPY PLUGIN DEFINITION
- * =========================== */
-
- $.fn.scrollspy = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('scrollspy')
- , options = typeof option == 'object' && option
- if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.scrollspy.Constructor = ScrollSpy
-
- $.fn.scrollspy.defaults = {
- offset: 10
- }
-
-
- /* SCROLLSPY DATA-API
- * ================== */
-
- $(window).on('load', function () {
- $('[data-spy="scroll"]').each(function () {
- var $spy = $(this)
- $spy.scrollspy($spy.data())
- })
- })
-
-}(window.jQuery);/* ========================================================
- * bootstrap-tab.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#tabs
- * ========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ======================================================== */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* TAB CLASS DEFINITION
- * ==================== */
-
- var Tab = function (element) {
- this.element = $(element)
- }
-
- Tab.prototype = {
-
- constructor: Tab
-
- , show: function () {
- var $this = this.element
- , $ul = $this.closest('ul:not(.dropdown-menu)')
- , selector = $this.attr('data-target')
- , previous
- , $target
- , e
-
- if (!selector) {
- selector = $this.attr('href')
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
- }
-
- if ( $this.parent('li').hasClass('active') ) return
-
- previous = $ul.find('.active a').last()[0]
-
- e = $.Event('show', {
- relatedTarget: previous
- })
-
- $this.trigger(e)
-
- if (e.isDefaultPrevented()) return
-
- $target = $(selector)
-
- this.activate($this.parent('li'), $ul)
- this.activate($target, $target.parent(), function () {
- $this.trigger({
- type: 'shown'
- , relatedTarget: previous
- })
- })
- }
-
- , activate: function ( element, container, callback) {
- var $active = container.find('> .active')
- , transition = callback
- && $.support.transition
- && $active.hasClass('fade')
-
- function next() {
- $active
- .removeClass('active')
- .find('> .dropdown-menu > .active')
- .removeClass('active')
-
- element.addClass('active')
-
- if (transition) {
- element[0].offsetWidth // reflow for transition
- element.addClass('in')
- } else {
- element.removeClass('fade')
- }
-
- if ( element.parent('.dropdown-menu') ) {
- element.closest('li.dropdown').addClass('active')
- }
-
- callback && callback()
- }
-
- transition ?
- $active.one($.support.transition.end, next) :
- next()
-
- $active.removeClass('in')
- }
- }
-
-
- /* TAB PLUGIN DEFINITION
- * ===================== */
-
- $.fn.tab = function ( option ) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('tab')
- if (!data) $this.data('tab', (data = new Tab(this)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.tab.Constructor = Tab
-
-
- /* TAB DATA-API
- * ============ */
-
- $(function () {
- $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
- e.preventDefault()
- $(this).tab('show')
- })
- })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-typeahead.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ============================================================ */
-
-
-!function($){
-
- "use strict"; // jshint ;_;
-
-
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
- * ================================= */
-
- var Typeahead = function (element, options) {
- this.$element = $(element)
- this.options = $.extend({}, $.fn.typeahead.defaults, options)
- this.matcher = this.options.matcher || this.matcher
- this.sorter = this.options.sorter || this.sorter
- this.highlighter = this.options.highlighter || this.highlighter
- this.updater = this.options.updater || this.updater
- this.$menu = $(this.options.menu).appendTo('body')
- this.source = this.options.source
- this.shown = false
- this.listen()
- }
-
- Typeahead.prototype = {
-
- constructor: Typeahead
-
- , select: function () {
- var val = this.$menu.find('.active').attr('data-value')
- this.$element
- .val(this.updater(val))
- .change()
- return this.hide()
- }
-
- , updater: function (item) {
- return item
- }
-
- , show: function () {
- var pos = $.extend({}, this.$element.offset(), {
- height: this.$element[0].offsetHeight
- })
-
- this.$menu.css({
- top: pos.top + pos.height
- , left: pos.left
- })
-
- this.$menu.show()
- this.shown = true
- return this
- }
-
- , hide: function () {
- this.$menu.hide()
- this.shown = false
- return this
- }
-
- , lookup: function (event) {
- var items
-
- this.query = this.$element.val()
-
- if (!this.query || this.query.length < this.options.minLength) {
- return this.shown ? this.hide() : this
- }
-
- items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
-
- return items ? this.process(items) : this
- }
-
- , process: function (items) {
- var that = this
-
- items = $.grep(items, function (item) {
- return that.matcher(item)
- })
-
- items = this.sorter(items)
-
- if (!items.length) {
- return this.shown ? this.hide() : this
- }
-
- return this.render(items.slice(0, this.options.items)).show()
- }
-
- , matcher: function (item) {
- return ~item.toLowerCase().indexOf(this.query.toLowerCase())
- }
-
- , sorter: function (items) {
- var beginswith = []
- , caseSensitive = []
- , caseInsensitive = []
- , item
-
- while (item = items.shift()) {
- if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
- else if (~item.indexOf(this.query)) caseSensitive.push(item)
- else caseInsensitive.push(item)
- }
-
- return beginswith.concat(caseSensitive, caseInsensitive)
- }
-
- , highlighter: function (item) {
- var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
- return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
- return '<strong>' + match + '</strong>'
- })
- }
-
- , render: function (items) {
- var that = this
-
- items = $(items).map(function (i, item) {
- i = $(that.options.item).attr('data-value', item)
- i.find('a').html(that.highlighter(item))
- return i[0]
- })
-
- items.first().addClass('active')
- this.$menu.html(items)
- return this
- }
-
- , next: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , next = active.next()
-
- if (!next.length) {
- next = $(this.$menu.find('li')[0])
- }
-
- next.addClass('active')
- }
-
- , prev: function (event) {
- var active = this.$menu.find('.active').removeClass('active')
- , prev = active.prev()
-
- if (!prev.length) {
- prev = this.$menu.find('li').last()
- }
-
- prev.addClass('active')
- }
-
- , listen: function () {
- this.$element
- .on('blur', $.proxy(this.blur, this))
- .on('keypress', $.proxy(this.keypress, this))
- .on('keyup', $.proxy(this.keyup, this))
-
- if ($.browser.chrome || $.browser.webkit || $.browser.msie) {
- this.$element.on('keydown', $.proxy(this.keydown, this))
- }
-
- this.$menu
- .on('click', $.proxy(this.click, this))
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
- }
-
- , move: function (e) {
- if (!this.shown) return
-
- switch(e.keyCode) {
- case 9: // tab
- case 13: // enter
- case 27: // escape
- e.preventDefault()
- break
-
- case 38: // up arrow
- e.preventDefault()
- this.prev()
- break
-
- case 40: // down arrow
- e.preventDefault()
- this.next()
- break
- }
-
- e.stopPropagation()
- }
-
- , keydown: function (e) {
- this.suppressKeyPressRepeat = !~$.inArray(e.keyCode, [40,38,9,13,27])
- this.move(e)
- }
-
- , keypress: function (e) {
- if (this.suppressKeyPressRepeat) return
- this.move(e)
- }
-
- , keyup: function (e) {
- switch(e.keyCode) {
- case 40: // down arrow
- case 38: // up arrow
- break
-
- case 9: // tab
- case 13: // enter
- if (!this.shown) return
- this.select()
- break
-
- case 27: // escape
- if (!this.shown) return
- this.hide()
- break
-
- default:
- this.lookup()
- }
-
- e.stopPropagation()
- e.preventDefault()
- }
-
- , blur: function (e) {
- var that = this
- setTimeout(function () { that.hide() }, 150)
- }
-
- , click: function (e) {
- e.stopPropagation()
- e.preventDefault()
- this.select()
- }
-
- , mouseenter: function (e) {
- this.$menu.find('.active').removeClass('active')
- $(e.currentTarget).addClass('active')
- }
-
- }
-
-
- /* TYPEAHEAD PLUGIN DEFINITION
- * =========================== */
-
- $.fn.typeahead = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('typeahead')
- , options = typeof option == 'object' && option
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.typeahead.defaults = {
- source: []
- , items: 8
- , menu: '<ul class="typeahead dropdown-menu"></ul>'
- , item: '<li><a href="#"></a></li>'
- , minLength: 1
- }
-
- $.fn.typeahead.Constructor = Typeahead
-
-
- /* TYPEAHEAD DATA-API
- * ================== */
-
- $(function () {
- $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
- var $this = $(this)
- if ($this.data('typeahead')) return
- e.preventDefault()
- $this.typeahead($this.data())
- })
- })
-
-}(window.jQuery);
-/* ==========================================================
- * bootstrap-affix.js v2.1.1
- * http://twitter.github.com/bootstrap/javascript.html#affix
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * 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.
- * ========================================================== */
-
-
-!function ($) {
-
- "use strict"; // jshint ;_;
-
-
- /* AFFIX CLASS DEFINITION
- * ====================== */
-
- var Affix = function (element, options) {
- this.options = $.extend({}, $.fn.affix.defaults, options)
- this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
- this.$element = $(element)
- this.checkPosition()
- }
-
- Affix.prototype.checkPosition = function () {
- if (!this.$element.is(':visible')) return
-
- var scrollHeight = $(document).height()
- , scrollTop = this.$window.scrollTop()
- , position = this.$element.offset()
- , offset = this.options.offset
- , offsetBottom = offset.bottom
- , offsetTop = offset.top
- , reset = 'affix affix-top affix-bottom'
- , affix
-
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
- if (typeof offsetTop == 'function') offsetTop = offset.top()
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
-
- affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
- false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
- 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
- 'top' : false
-
- if (this.affixed === affix) return
-
- this.affixed = affix
- this.unpin = affix == 'bottom' ? position.top - scrollTop : null
-
- this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
- }
-
-
- /* AFFIX PLUGIN DEFINITION
- * ======================= */
-
- $.fn.affix = function (option) {
- return this.each(function () {
- var $this = $(this)
- , data = $this.data('affix')
- , options = typeof option == 'object' && option
- if (!data) $this.data('affix', (data = new Affix(this, options)))
- if (typeof option == 'string') data[option]()
- })
- }
-
- $.fn.affix.Constructor = Affix
-
- $.fn.affix.defaults = {
- offset: 0
- }
-
-
- /* AFFIX DATA-API
- * ============== */
-
- $(window).on('load', function () {
- $('[data-spy="affix"]').each(function () {
- var $spy = $(this)
- , data = $spy.data()
-
- data.offset = data.offset || {}
-
- data.offsetBottom && (data.offset.bottom = data.offsetBottom)
- data.offsetTop && (data.offset.top = data.offsetTop)
-
- $spy.affix(data)
- })
- })
-
-
-}(window.jQuery);
\ No newline at end of file
diff --git a/examples/moviefun-plus/src/main/webapp/assets/js/bootstrap.min.js b/examples/moviefun-plus/src/main/webapp/assets/js/bootstrap.min.js
deleted file mode 100644
index 0e33fb1..0000000
--- a/examples/moviefun-plus/src/main/webapp/assets/js/bootstrap.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-* Bootstrap.js by @fat & @mdo
-* Copyright 2012 Twitter, Inc.
-* http://www.apache.org/licenses/LICENSE-2.0.txt
-*/
-!function(e){e(function(){"use strict";e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()},e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e(function(){e("body").on("click.alert.data-api",t,n.prototype.close)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")},e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e(function(){e("body").on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=n,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},to:function(t){var n=this.$element.find(".item.active"),r=n.parent().children(),i=r.index(n),s=this;if(t>r.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){s.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",e(r[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f=e.Event("slide",{relatedTarget:i[0]});this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u]();if(i.hasClass("active"))return;if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}},e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e(function(){e("body").on("click.carousel.data-api","[data-slide]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=!i.data("modal")&&e.extend({},i.data(),n.data());i.carousel(s),t.preventDefault()})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning)return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning)return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=typeof n=="object"&&n;i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e(function(){e("body").on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})})}(window.jQuery),!function(e){"use strict";function r(){i(e(t)).removeClass("open")}function i(t){var n=t.attr("data-target"),r;return n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=e(n),r.length||(r=t.parent()),r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||(s.toggleClass("open"),n.focus()),!1},keydown:function(t){var n,r,s,o,u,a;if(!/(38|40|27)/.test(t.keyCode))return;n=e(this),t.preventDefault(),t.stopPropagation();if(n.is(".disabled, :disabled"))return;o=i(n),u=o.hasClass("open");if(!u||u&&t.keyCode==27)return n.click();r=e("[role=menu] li:not(.divider) a",o);if(!r.length)return;a=r.index(r.filter(":focus")),t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<r.length-1&&a++,~a||(a=0),r.eq(a).focus()}},e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e(function(){e("html").on("click.dropdown.data-api touchstart.dropdown.data-api",r),e("body").on("click.dropdown touchstart.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;e("body").addClass("modal-open"),this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1).focus(),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.trigger("shown")}):t.$element.trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,e("body").removeClass("modal-open"),this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(e){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,e.proxy(this.removeBackdrop,this)):this.removeBackdrop()):t&&t()}},e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e(function(){e("body").on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,this.options.trigger=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):this.options.trigger!="manual"&&(i=this.options.trigger=="hover"?"mouseenter":"focus",s=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this))),this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,t,this.$element.data()),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var e,t,n,r,i,s,o;if(this.hasContent()&&this.enabled){e=this.tip(),this.setContent(),this.options.animation&&e.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,t=/in/.test(s),e.remove().css({top:0,left:0,display:"block"}).appendTo(t?this.$element:document.body),n=this.getPosition(t),r=e[0].offsetWidth,i=e[0].offsetHeight;switch(t?s.split(" ")[1]:s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}e.css(o).addClass(s).addClass("in")}},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function r(){var t=setTimeout(function(){n.off(e.support.transition.end).remove()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.remove()})}var t=this,n=this.tip();return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?r():n.remove(),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(t){return e.extend({},t?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}},e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0,html:!0}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content > *")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-content")||(typeof n.content=="function"?n.content.call(t[0]):n.content),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}}),e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var t=e(this),n=t.data("target")||t.attr("href"),r=/^#\w/.test(n)&&e(n);return r&&r.length&&[[r.position().top,n]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}},e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active a").last()[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}},e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e(function(){e("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=e(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:t.top+t.height,left:t.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),(e.browser.chrome||e.browser.webkit||e.browser.msie)&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this))},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=!~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},blur:function(e){var t=this;setTimeout(function(){t.hide()},150)},click:function(e){e.stopPropagation(),e.preventDefault(),this.select()},mouseenter:function(t){this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")}},e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e(function(){e("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;t.preventDefault(),n.typeahead(n.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))},e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
\ No newline at end of file
diff --git a/examples/moviefun-plus/src/main/webapp/default.css b/examples/moviefun-plus/src/main/webapp/default.css
deleted file mode 100644
index 991f911..0000000
--- a/examples/moviefun-plus/src/main/webapp/default.css
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * 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.
- *
- */
-body, p, td, table, tr, .bodytext, .stepfield {
- font-family: Verdana, arial, sans-serif;
- font-size: 11px;
- line-height: 16px;
- color: #000000;
- font-weight: normal;
-}
-
-body {
- margin: 0px;
- padding: 0px;
- text-align: center;
- background-color: #f0f0f0;
-}
-
-#Content {
- text-align: left;
- background-color: #fff;
- padding: 0px;
- margin: 0px;
-}
-
-HR {
- color: 3 c78b5;
- height: 1;
-}
-
-A:link, A:visited, A:active, A:hover {
- color: #003366;
-}
-
-h1 A:link, h1 A:visited, h1 A:active {
- text-decoration: none;
-}
-
-h1 A:hover {
- border-bottom: 1px dotted #003366;
-}
-
-input {
- font-family: verdana, geneva, arial, sans-serif;
- font-size: 11px;
- color: #000000;
-}
-
-h1 {
- font-size: 24px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- color: #003366;
- border-bottom: 1px solid #3c78b5;
- padding: 2px;
- margin: 36px 0px 4px 0px;
-}
-
-h2 {
- font-size: 18px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- border-bottom: 1px solid #3c78b5;
- padding: 2px;
- margin: 27px 0px 4px 0px;
-}
-
-h3 {
- font-size: 14px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 21px 0px 4px 0px;
-}
-
-h4 {
- font-size: 12px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 18px 0px 4px 0px;
-}
-
-h4.search {
- font-size: 12px;
- line-height: normal;
- font-weight: normal;
- background-color: #f0f0f0;
- padding: 4px;
- margin: 18px 0px 4px 0px;
-}
-
-h5 {
- font-size: 10px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 14px 0px 4px 0px;
-}
-
-h6 {
- font-size: 8px;
- line-height: normal;
- font-weight: bold;
- background-color: #f0f0f0;
- padding: 2px;
- margin: 14px 0px 4px 0px;
-}
-
-.smalltext {
- color: #666666;
- font-size: 10px;
-}
-
-.smalltext a {
- color: #666666;
-}
-
-.tableview table {
- margin: 0;
-}
-
-.tableview th {
- text-align: left;
- color: #003366;
- font-size: 12px;
- padding: 5px 0px 0px 5px;
- border-bottom: 2px solid #3c78b5;
-}
-
-.tableview td {
- text-align: left;
- border-color: #ccc;
- border-width: 0px 0px 1px 0px;
- border-style: solid;
- margin: 0;
- padding: 4px 10px 4px 5px;
-}
-
-.bottomshadow {
- height: 12px;
- background-image: url("/images/border/border_bottom.gif");
- background-repeat: repeat-x;
-}
-
-.topBarDiv a:link {
- color: white;
-}
-
-.topBarDiv a:visited {
- color: white;
-}
-
-.topBarDiv a:active {
- color: white;
-}
-
-.topBarDiv a:hover {
- color: white;
-}
-
-.topBarDiv {
- color: white;
-}
-
-.topBar td {
- background-color: #003366;
-}
-
-.basicPanelContainer {
- border: 1px solid #3c78b5;
- margin-top: 2px;
- margin-bottom: 8px;
- width: 100%
-}
-
-.basicPanelTitle {
- padding: 5px;
- margin: 0px;
- background-color: #f0f0f0;
- color: black;
- font-weight: bold;
-}
-
-.basicPanelBody {
- padding: 5px;
- margin: 0px
-}
diff --git a/examples/moviefun-plus/src/main/webapp/index.jsp b/examples/moviefun-plus/src/main/webapp/index.jsp
deleted file mode 100644
index c0d8562..0000000
--- a/examples/moviefun-plus/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,75 +0,0 @@
-<%--
- 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.
---%>
-
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
-<c:set var="language" value="${pageContext.request.locale}" />
-<fmt:setLocale value="${language}" />
-
-<!DOCTYPE html>
-<html lang="${language}">
-<head>
-<meta charset="utf-8">
-<title>Moviefun</title>
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="description" content="">
-<meta name="author" content="">
-
-<!-- Le styles -->
-<link href="assets/css/bootstrap.css" rel="stylesheet">
-<link href="assets/css/movie.css" rel="stylesheet">
-<style>
-body {
- padding-top: 60px;
- /* 60px to make the container go all the way to the bottom of the topbar */
-}
-</style>
-<link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
-
-<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-<!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
- <div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <a class="btn btn-navbar" data-toggle="collapse"
- data-target=".nav-collapse"> <span class="icon-bar"></span> <span
- class="icon-bar"></span> <span class="icon-bar"></span>
- </a> <a class="brand" href="#">Moviefun</a>
- <!--/.nav-collapse -->
- </div>
- </div>
- </div>
-
- <div class="container">
-
- <h1>Moviefun</h1>
-
- <p>Please select one of the following links:</p>
- <a href="setup.jsp">Setup</a> - Sets up the application with some sample data<br />
- <a href="moviefun">Index</a> - Start the application<br />
-
- </div>
- <!-- /container -->
-</body>
-</html>
diff --git a/examples/moviefun-plus/src/main/webapp/setup.jsp b/examples/moviefun-plus/src/main/webapp/setup.jsp
deleted file mode 100644
index 1dd5932..0000000
--- a/examples/moviefun-plus/src/main/webapp/setup.jsp
+++ /dev/null
@@ -1,115 +0,0 @@
-<%--
- 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.
---%>
-<%@ page import=" org.superbiz.moviefun.Movie" %>
-<%@ page import="org.superbiz.moviefun.MoviesBean" %>
-<%@ page import="javax.naming.InitialContext" %>
-<%@ page import="java.util.List" %>
-<%@ page import="java.util.Iterator" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
-<%
- InitialContext initialContext = new InitialContext();
- MoviesBean moviesBean = (MoviesBean) initialContext.lookup("java:comp/env/movies");
-
- moviesBean.addMovie(new Movie("Wedding Crashers", "David Dobkin", "Comedy", 7, 2005));
- moviesBean.addMovie(new Movie("Starsky & Hutch", "Todd Phillips", "Action", 6, 2004));
- moviesBean.addMovie(new Movie("Shanghai Knights", "David Dobkin", "Action", 6, 2003));
- moviesBean.addMovie(new Movie("I-Spy", "Betty Thomas", "Adventure", 5, 2002));
- moviesBean.addMovie(new Movie("The Royal Tenenbaums", "Wes Anderson", "Comedy", 8, 2001));
- moviesBean.addMovie(new Movie("Zoolander", "Ben Stiller", "Comedy", 6, 2001));
- moviesBean.addMovie(new Movie("Shanghai Noon", "Tom Dey", "Comedy", 7, 2000));
-%>
-<c:set var="language" value="${pageContext.request.locale}" />
-<fmt:setLocale value="${language}" />
-
-<!DOCTYPE html>
-<html lang="${language}">
-<head>
-<meta charset="utf-8">
-<title>Moviefun</title>
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="description" content="">
-<meta name="author" content="">
-
-<!-- Le styles -->
-<link href="assets/css/bootstrap.css" rel="stylesheet">
-<link href="assets/css/movie.css" rel="stylesheet">
-<style>
-body {
- padding-top: 60px;
- /* 60px to make the container go all the way to the bottom of the topbar */
-}
-</style>
-<link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
-
-<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
-<!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
- <div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <a class="btn btn-navbar" data-toggle="collapse"
- data-target=".nav-collapse"> <span class="icon-bar"></span> <span
- class="icon-bar"></span> <span class="icon-bar"></span>
- </a> <a class="brand" href="#">Moviefun</a>
- <!--/.nav-collapse -->
- </div>
- </div>
- </div>
-
- <div class="container">
-
- <h1>Moviefun</h1>
-
-<h2>Seeded Database with the Following movies</h2>
-<table width="500">
- <tr>
- <td><b>Title</b></td>
- <td><b>Director</b></td>
- <td><b>Genre</b></td>
- </tr>
- <%
- List<Movie> movies = moviesBean.getMovies();
- for (Iterator<Movie> iterator = movies.iterator(); iterator.hasNext();) {
- Movie movie = (Movie) iterator.next();
- %>
- <tr>
- <td><%=movie.getTitle()%>
- </td>
- <td><%=movie.getDirector()%>
- </td>
- <td><%=movie.getGenre()%>
- </td>
- </tr>
-
- <%
- }
- %>
-</table>
-
-<h2>Continue</h2>
-<a href="moviefun">Go to main app</a>
- </div>
- <!-- /container -->
-</body>
-</html>
diff --git a/examples/moviefun-plus/src/test/java/org/superbiz/moviefun/MoviesIT.java b/examples/moviefun-plus/src/test/java/org/superbiz/moviefun/MoviesIT.java
deleted file mode 100644
index f7dad98..0000000
--- a/examples/moviefun-plus/src/test/java/org/superbiz/moviefun/MoviesIT.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.util.Properties;
-
-import javax.ejb.embeddable.EJBContainer;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.tomee.embedded.EmbeddedTomEEContainer;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
-
-public class MoviesIT {
-
- private static EJBContainer container;
- private static File webApp;
- private static int port;
-
- @BeforeClass
- public static void start() throws IOException {
-
- // get a random unused port to use for http requests
- ServerSocket server = new ServerSocket(0);
- port = server.getLocalPort();
- server.close();
-
- webApp = createWebApp();
- Properties p = new Properties();
- p.setProperty(EJBContainer.APP_NAME, "moviefun");
- p.setProperty(EJBContainer.PROVIDER, "tomee-embedded"); // need web feature
- p.setProperty(EJBContainer.MODULES, webApp.getAbsolutePath());
- p.setProperty(EmbeddedTomEEContainer.TOMEE_EJBCONTAINER_HTTP_PORT, String.valueOf(port));
- container = EJBContainer.createEJBContainer(p);
- }
-
- @AfterClass
- public static void stop() {
- if (container != null) {
- container.close();
- }
- if (webApp != null) {
- try {
- FileUtils.forceDelete(webApp);
- } catch (IOException e) {
- FileUtils.deleteQuietly(webApp);
- }
- }
- }
-
- private static File createWebApp() throws IOException {
- File file = new File(System.getProperty("java.io.tmpdir") + "/tomee-" + Math.random());
- if (!file.mkdirs() && !file.exists()) {
- throw new RuntimeException("can't create " + file.getAbsolutePath());
- }
-
- FileUtils.copyDirectory(new File("target/classes"), new File(file, "WEB-INF/classes"));
- FileUtils.copyDirectory(new File("src/main/webapp"), file);
-
- return file;
- }
-
- @Test
- public void testShouldMakeSureWebappIsWorking() throws Exception {
- WebClient webClient = new WebClient();
- HtmlPage page = webClient.getPage("http://localhost:" + port + "/moviefun/setup.jsp");
-
- assertMoviesPresent(page);
-
- page = webClient.getPage("http://localhost:" + port + "/moviefun/moviefun");
-
- assertMoviesPresent(page);
- webClient.closeAllWindows();
- }
-
- private void assertMoviesPresent(HtmlPage page) {
- String pageAsText = page.asText();
- assertTrue(pageAsText.contains("Wedding Crashers"));
- assertTrue(pageAsText.contains("Starsky & Hutch"));
- assertTrue(pageAsText.contains("Shanghai Knights"));
- assertTrue(pageAsText.contains("I-Spy"));
- assertTrue(pageAsText.contains("The Royal Tenenbaums"));
- }
-}
diff --git a/examples/moviefun-plus/src/test/java/org/superbiz/moviefun/MoviesTest.java b/examples/moviefun-plus/src/test/java/org/superbiz/moviefun/MoviesTest.java
deleted file mode 100644
index 2cf80a8..0000000
--- a/examples/moviefun-plus/src/test/java/org/superbiz/moviefun/MoviesTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 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.superbiz.moviefun;
-
-import java.util.List;
-
-import javax.ejb.embeddable.EJBContainer;
-
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class MoviesTest {
-
- private static EJBContainer ejbContainer;
-
- @BeforeClass
- public static void setUp() throws Exception {
- ejbContainer = EJBContainer.createEJBContainer();
- }
-
- @AfterClass
- public static void tearDown() {
- if (ejbContainer != null) {
- ejbContainer.close();
- }
- }
-
- @Before
- @After
- public void clean() throws Exception {
- MoviesBean movies = (MoviesBean) ejbContainer.getContext().lookup("java:global/moviefun/Movies!org.superbiz.moviefun.MoviesBean");
- movies.clean();
- }
-
- @Test
- public void testShouldAddAMovie() throws Exception {
- MoviesBean movies = (MoviesBean) ejbContainer.getContext().lookup("java:global/moviefun/Movies!org.superbiz.moviefun.MoviesBean");
-
- Movie movie = new Movie();
- movie.setDirector("Michael Bay");
- movie.setGenre("Action");
- movie.setRating(9);
- movie.setTitle("Bad Boys");
- movie.setYear(1995);
- movies.addMovie(movie);
-
- Assert.assertEquals(1, movies.count());
- List<Movie> moviesFound = movies.findRange("title", "Bad Boys", 0, 10);
-
- Assert.assertEquals(1, moviesFound.size());
- Assert.assertEquals("Michael Bay", moviesFound.get(0).getDirector());
- Assert.assertEquals("Action", moviesFound.get(0).getGenre());
- Assert.assertEquals(9, moviesFound.get(0).getRating());
- Assert.assertEquals("Bad Boys", moviesFound.get(0).getTitle());
- Assert.assertEquals(1995, moviesFound.get(0).getYear());
- }
-
-}
\ No newline at end of file
diff --git a/examples/moviefun-plus/src/test/resources/META-INF/application-client.xml b/examples/moviefun-plus/src/test/resources/META-INF/application-client.xml
deleted file mode 100644
index 1e91dca..0000000
--- a/examples/moviefun-plus/src/test/resources/META-INF/application-client.xml
+++ /dev/null
@@ -1 +0,0 @@
-<application-client/>
\ No newline at end of file
diff --git a/examples/movies-complete-meta/pom.xml b/examples/movies-complete-meta/pom.xml
index 57c410c..2ac24df 100644
--- a/examples/movies-complete-meta/pom.xml
+++ b/examples/movies-complete-meta/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>movies-complete-meta</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Movies Complete (Meta)</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/movies-complete/pom.xml b/examples/movies-complete/pom.xml
index 96e7b42..4bf2a1f 100644
--- a/examples/movies-complete/pom.xml
+++ b/examples/movies-complete/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>movies-complete</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Movies Complete</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/multi-jpa-provider-testing/pom.xml b/examples/multi-jpa-provider-testing/pom.xml
index 510992f..bdcbb96 100644
--- a/examples/multi-jpa-provider-testing/pom.xml
+++ b/examples/multi-jpa-provider-testing/pom.xml
@@ -17,137 +17,145 @@
limitations under the License.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.superbiz</groupId>
- <artifactId>multi-jpa-provider-testing</artifactId>
- <packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
- <name>OpenEJB :: Examples :: Multiple JPA providers</name>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.superbiz</groupId>
+ <artifactId>multi-jpa-provider-testing</artifactId>
+ <packaging>jar</packaging>
+ <version>1.1.0</version>
+ <name>OpenEJB :: Examples :: Multiple JPA providers</name>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
- <build>
- <defaultGoal>install</defaultGoal>
+ <build>
+ <defaultGoal>install</defaultGoal>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.5.1</version>
- <configuration>
- <source>1.6</source>
- <target>1.6</target>
- </configuration>
- </plugin>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.5.1</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
- <plugin> <!-- run tests twice, once with openjpa and once with hibernate -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.12.4</version>
- <executions>
- <execution>
- <id>test-hibernate</id>
- <phase>test</phase>
- <goals>
- <goal>test</goal>
- </goals>
- <configuration>
- <skip>${maven.test.skip}</skip>
- <systemPropertyVariables>
- <javax.persistence.provider>org.hibernate.ejb.HibernatePersistence</javax.persistence.provider>
- </systemPropertyVariables>
- </configuration>
- </execution>
- <execution>
- <id>test-openjpa</id>
- <phase>test</phase>
- <goals>
- <goal>test</goal>
- </goals>
- <configuration>
- <skip>${maven.test.skip}</skip>
- <systemPropertyVariables>
- <javax.persistence.provider>org.apache.openjpa.persistence.PersistenceProviderImpl</javax.persistence.provider>
- </systemPropertyVariables>
- </configuration>
- </execution>
- </executions>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- </plugins>
- </build>
+ <plugin> <!-- run tests twice, once with openjpa and once with hibernate -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.12.4</version>
+ <executions>
+ <execution>
+ <id>test-hibernate</id>
+ <phase>test</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <skip>${maven.test.skip}</skip>
+ <systemPropertyVariables>
+ <javax.persistence.provider>org.hibernate.ejb.HibernatePersistence</javax.persistence.provider>
+ </systemPropertyVariables>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test-openjpa</id>
+ <phase>test</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <skip>${maven.test.skip}</skip>
+ <systemPropertyVariables>
+ <javax.persistence.provider>org.apache.openjpa.persistence.PersistenceProviderImpl</javax.persistence.provider>
+ </systemPropertyVariables>
+ </configuration>
+ </execution>
+ </executions>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
- <repositories>
- <repository>
- <id>apache-m2-snapshot</id>
- <name>Apache Snapshot Repository</name>
- <url>http://repository.apache.org/snapshots</url>
- </repository>
- </repositories>
+ <repositories>
+ <repository>
+ <id>apache-m2-snapshot</id>
+ <name>Apache Snapshot Repository</name>
+ <url>http://repository.apache.org/snapshots</url>
+ </repository>
+ </repositories>
- <dependencies>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0-4</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>javaee-api</artifactId>
+ <version>6.0-4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.10</version>
+ <scope>test</scope>
+ </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.jboss.shrinkwrap.resolver</groupId>
- <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
- <version>1.1.0-alpha-3</version>
- <scope>test</scope>
- </dependency>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>arquillian-openejb-embedded-4</artifactId>
+ <version>4.5.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
+ <version>2.0.0-alpha-5</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.shrinkwrap</groupId>
+ <artifactId>shrinkwrap-spi</artifactId>
+ <version>1.1.1-alpha-2</version>
+ <scope>test</scope>
+ </dependency>
- <!--
- don't be shy and put all JPA provider in the classpath
- otherwise arquillian has some difficulties in embedded mode to find your classes
- -->
- <dependency>
- <groupId>org.apache.openjpa</groupId>
- <artifactId>openjpa</artifactId>
- <version>2.2.0</version>
- <scope>test</scope>
- </dependency>
- <dependency> <!-- just a facade pom which will bring hibernate for us -->
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-core-hibernate</artifactId>
- <version>4.5.1-SNAPSHOT</version>
- <scope>test</scope>
- <type>pom</type>
- </dependency>
- </dependencies>
+ <!--
+ don't be shy and put all JPA provider in the classpath
+ otherwise arquillian has some difficulties in embedded mode to find your classes
+ -->
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa</artifactId>
+ <version>2.2.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency> <!-- just a facade pom which will bring hibernate for us -->
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-core-hibernate</artifactId>
+ <version>4.5.1</version>
+ <scope>test</scope>
+ <type>pom</type>
+ </dependency>
+ </dependencies>
- <!-- This section allows you to configure where to publish libraries for
- sharing. It is not required and may be deleted. For more information see:
- http://maven.apache.org/plugins/maven-deploy-plugin/ -->
- <distributionManagement>
- <repository>
- <id>localhost</id>
- <url>file://${basedir}/target/repo/</url>
- </repository>
- <snapshotRepository>
- <id>localhost</id>
- <url>file://${basedir}/target/snapshot-repo/</url>
- </snapshotRepository>
- </distributionManagement>
+ <!-- This section allows you to configure where to publish libraries for
+ sharing. It is not required and may be deleted. For more information see:
+ http://maven.apache.org/plugins/maven-deploy-plugin/ -->
+ <distributionManagement>
+ <repository>
+ <id>localhost</id>
+ <url>file://${basedir}/target/repo/</url>
+ </repository>
+ <snapshotRepository>
+ <id>localhost</id>
+ <url>file://${basedir}/target/snapshot-repo/</url>
+ </snapshotRepository>
+ </distributionManagement>
</project>
diff --git a/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/HibernateEnricher.java b/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/HibernateEnricher.java
index ad2cca2..601556b 100644
--- a/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/HibernateEnricher.java
+++ b/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/HibernateEnricher.java
@@ -23,7 +23,6 @@
public class HibernateEnricher implements AuxiliaryArchiveProcessor {
@Override
public void process(final Archive<?> auxiliaryArchive) {
- Enrichers.wrap(auxiliaryArchive)
- .addAsLibraries(Enrichers.resolve("src/test/resources/hibernate-pom.xml"));
+ Enrichers.wrap(auxiliaryArchive).addAsLibraries(Enrichers.resolve("src/test/resources/hibernate-pom.xml"));
}
}
diff --git a/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/OpenJPAEnricher.java b/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/OpenJPAEnricher.java
index d961501..92e2fc7 100644
--- a/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/OpenJPAEnricher.java
+++ b/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/jpa/OpenJPAEnricher.java
@@ -23,7 +23,6 @@
public class OpenJPAEnricher implements AuxiliaryArchiveProcessor {
@Override
public void process(final Archive<?> auxiliaryArchive) {
- Enrichers.wrap(auxiliaryArchive)
- .addAsLibraries(Enrichers.resolve("src/test/resources/openjpa-pom.xml"));
+ Enrichers.wrap(auxiliaryArchive).addAsLibraries(Enrichers.resolve("src/test/resources/openjpa-pom.xml"));
}
}
diff --git a/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/maven/Enrichers.java b/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/maven/Enrichers.java
index 2f5705a..7e7b958 100644
--- a/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/maven/Enrichers.java
+++ b/examples/multi-jpa-provider-testing/src/test/java/org/superbiz/enricher/maven/Enrichers.java
@@ -17,10 +17,11 @@
*/
package org.superbiz.enricher.maven;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
-import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
-import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
+import org.jboss.shrinkwrap.api.container.LibraryContainer;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+import org.jboss.shrinkwrap.resolver.api.maven.ScopeType;
+import org.jboss.shrinkwrap.resolver.api.maven.strategy.AcceptScopesStrategy;
+import org.jboss.shrinkwrap.resolver.api.maven.strategy.TransitiveStrategy;
import javax.enterprise.inject.ResolutionException;
import java.io.File;
@@ -36,26 +37,28 @@
public static File[] resolve(final String pom) {
if (!CACHE.containsKey(pom)) {
- try { // try offline first since it is generally faster
- CACHE.put(pom, DependencyResolvers.use(MavenDependencyResolver.class)
- .goOffline()
- .loadMetadataFromPom(pom)
- .scope("compile")
- .resolveAsFiles());
+ try {
+
+ // try offline first since it is generally faster
+ CACHE.put(pom, Maven.resolver()
+ .offline(true)
+ .loadPomFromFile(pom)
+ .importRuntimeAndTestDependencies(new AcceptScopesStrategy(ScopeType.COMPILE))
+ .asFile());
} catch (ResolutionException re) { // try on central
- CACHE.put(pom, DependencyResolvers.use(MavenDependencyResolver.class)
- .loadMetadataFromPom(pom)
- .scope("compile")
- .resolveAsFiles());
+ CACHE.put(pom, Maven.resolver()
+ .loadPomFromFile(pom)
+ .importRuntimeAndTestDependencies(new AcceptScopesStrategy(ScopeType.COMPILE))
+ .asFile());
}
}
return CACHE.get(pom);
}
- public static WebArchive wrap(final Archive<?> archive) {
- if (!(WebArchive.class.isInstance(archive))) {
+ public static LibraryContainer wrap(final org.jboss.shrinkwrap.api.Archive<?> archive) {
+ if (!(LibraryContainer.class.isInstance(archive))) {
throw new IllegalArgumentException("Unsupported archive type: " + archive.getClass().getName());
}
- return (WebArchive) archive;
+ return (LibraryContainer) archive;
}
}
diff --git a/examples/multi-jpa-provider-testing/src/test/resources/hibernate-pom.xml b/examples/multi-jpa-provider-testing/src/test/resources/hibernate-pom.xml
index 218d893..dca207a 100644
--- a/examples/multi-jpa-provider-testing/src/test/resources/hibernate-pom.xml
+++ b/examples/multi-jpa-provider-testing/src/test/resources/hibernate-pom.xml
@@ -27,7 +27,7 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
- <version>4.1.6.Final</version>
+ <version>4.1.8.Final</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
diff --git a/examples/multiple-arquillian-adapters/pom.xml b/examples/multiple-arquillian-adapters/pom.xml
index b452568..a5e7a47 100644
--- a/examples/multiple-arquillian-adapters/pom.xml
+++ b/examples/multiple-arquillian-adapters/pom.xml
@@ -23,14 +23,14 @@
<groupId>org.superbiz</groupId>
<artifactId>multiple-arquillian-adapters</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Multiple Arquillian Adapters</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <tomee.version>1.5.1</tomee.version>
+ <openejb.version>4.5.1</openejb.version>
<arquillian.version>1.0.1.Final</arquillian.version>
</properties>
diff --git a/examples/multiple-tomee-arquillian/pom.xml b/examples/multiple-tomee-arquillian/pom.xml
index 5badd70..e988b6f 100644
--- a/examples/multiple-tomee-arquillian/pom.xml
+++ b/examples/multiple-tomee-arquillian/pom.xml
@@ -23,11 +23,11 @@
<groupId>org.superbiz</groupId>
<artifactId>multiple-tomee-arquillian</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Multiple TomEE with Arquillian</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
+ <tomee.version>1.5.1</tomee.version>
</properties>
<build>
<defaultGoal>install</defaultGoal>
@@ -86,7 +86,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -110,7 +110,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -129,4 +129,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/persistence-fragment/pom.xml b/examples/persistence-fragment/pom.xml
index ffaa5e1..0679ef7 100644
--- a/examples/persistence-fragment/pom.xml
+++ b/examples/persistence-fragment/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>persistence-fragment</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Persistence Fragment</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/pojo-webservice/pom.xml b/examples/pojo-webservice/pom.xml
index bc0ddb0..9e3737d 100644
--- a/examples/pojo-webservice/pom.xml
+++ b/examples/pojo-webservice/pom.xml
@@ -21,11 +21,11 @@
<groupId>org.superbiz</groupId>
<artifactId>pojo-webservice</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: Pojo WS</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
+ <tomee.version>1.5.1</tomee.version>
</properties>
<repositories>
<repository>
@@ -62,7 +62,7 @@
<plugin> <!-- http://localhost:8080/pojo-webservice?wsdl -->
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<configuration>
<tomeeVersion>${tomee.version}</tomeeVersion>
<tomeeClassifier>plus</tomeeClassifier>
diff --git a/examples/polling-parent/polling-client/pom.xml b/examples/polling-parent/polling-client/pom.xml
index 3dd9ee9..9596b6c 100644
--- a/examples/polling-parent/polling-client/pom.xml
+++ b/examples/polling-parent/polling-client/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>polling-parent</artifactId>
<groupId>jug</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/examples/polling-parent/polling-core/pom.xml b/examples/polling-parent/polling-core/pom.xml
index 7155830..5cf6990 100644
--- a/examples/polling-parent/polling-core/pom.xml
+++ b/examples/polling-parent/polling-core/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>polling-parent</artifactId>
<groupId>jug</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/examples/polling-parent/polling-domain/pom.xml b/examples/polling-parent/polling-domain/pom.xml
index 48c45f8..60c2874 100644
--- a/examples/polling-parent/polling-domain/pom.xml
+++ b/examples/polling-parent/polling-domain/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>polling-parent</artifactId>
<groupId>jug</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/examples/polling-parent/polling-web/pom.xml b/examples/polling-parent/polling-web/pom.xml
index fcbaee8..fdb0db2 100644
--- a/examples/polling-parent/polling-web/pom.xml
+++ b/examples/polling-parent/polling-web/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>polling-parent</artifactId>
<groupId>jug</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -79,7 +79,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<configuration>
<tomeeClassifier>jaxrs</tomeeClassifier>
</configuration>
diff --git a/examples/polling-parent/pom.xml b/examples/polling-parent/pom.xml
index 3a7f370..1cb6982 100644
--- a/examples/polling-parent/pom.xml
+++ b/examples/polling-parent/pom.xml
@@ -23,7 +23,7 @@
<groupId>jug</groupId>
<artifactId>polling-parent</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<packaging>pom</packaging>
<name>OpenEJB :: Examples :: Polling</name>
@@ -84,7 +84,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-api</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
@@ -92,13 +92,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf-rs</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
@@ -106,19 +106,19 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-tomee-embedded</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-webservices</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>ziplock</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/examples/pom.xml b/examples/pom.xml
index a2541c6..bbd417e 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>examples</artifactId>
@@ -45,7 +45,6 @@
<module>cdi-interceptors</module>
<module>cdi-produces-disposes</module>
<module>cdi-produces-field</module>
- <module>cdi-query</module>
<module>cdi-realm</module>
<module>cdi-request-scope</module>
<module>cdi-session-scope</module>
@@ -87,7 +86,6 @@
<module>mbean-auto-registration</module>
<module>movies-complete-meta</module>
<module>movies-complete</module>
- <module>moviefun-old</module>
<module>multi-jpa-provider-testing</module>
<module>multiple-arquillian-adapters</module>
<module>multiple-tomee-arquillian</module>
diff --git a/examples/projectstage-demo/pom.xml b/examples/projectstage-demo/pom.xml
index fba3f55..90aba1a 100644
--- a/examples/projectstage-demo/pom.xml
+++ b/examples/projectstage-demo/pom.xml
@@ -23,7 +23,7 @@
<groupId>org.superbiz</groupId>
<artifactId>projectstage-demo</artifactId>
- <version>1.0-SNAPSHOT</version>
+ <version>1.0</version>
<name>OpenEJB :: Examples :: DeltaSpike ProjectStage</name>
<dependencies>
@@ -66,7 +66,7 @@
</dependencies>
<properties>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
+ <tomee.version>1.5.1</tomee.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
diff --git a/examples/quartz-app/pom.xml b/examples/quartz-app/pom.xml
index 772a2f8..07d522d 100644
--- a/examples/quartz-app/pom.xml
+++ b/examples/quartz-app/pom.xml
@@ -20,7 +20,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.superbiz.quartz</groupId>
<artifactId>quartz-app</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<packaging>pom</packaging>
<name>OpenEJB :: Examples :: Quartz</name>
<properties>
@@ -68,7 +68,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
diff --git a/examples/quartz-app/quartz-beans/pom.xml b/examples/quartz-app/quartz-beans/pom.xml
index 7b96bee..ea05a47 100644
--- a/examples/quartz-app/quartz-beans/pom.xml
+++ b/examples/quartz-app/quartz-beans/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.superbiz.quartz</groupId>
<artifactId>quartz-app</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>quartz-beans</artifactId>
@@ -30,7 +30,7 @@
<dependency>
<groupId>org.superbiz.quartz</groupId>
<artifactId>quartz-ra</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/examples/quartz-app/quartz-ra/pom.xml b/examples/quartz-app/quartz-ra/pom.xml
index f821520..561d2a1 100644
--- a/examples/quartz-app/quartz-ra/pom.xml
+++ b/examples/quartz-app/quartz-ra/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.superbiz.quartz</groupId>
<artifactId>quartz-app</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>quartz-ra</artifactId>
diff --git a/examples/realm-in-tomee/README.md b/examples/realm-in-tomee/README.md
index 8c1fee0..2c3f7da 100644
--- a/examples/realm-in-tomee/README.md
+++ b/examples/realm-in-tomee/README.md
@@ -30,5 +30,5 @@
## Test it
-Go to http://localhost:8080/realm-in-tomee-1.1-SNAPSHOT/, then connect using
+Go to http://localhost:8080/realm-in-tomee-1.1.0-SNAPSHOT/, then connect using
the login/password tomee/tomee. You should see "Home".
diff --git a/examples/realm-in-tomee/pom.xml b/examples/realm-in-tomee/pom.xml
index 7a1703b..4bb281f 100644
--- a/examples/realm-in-tomee/pom.xml
+++ b/examples/realm-in-tomee/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.superbiz</groupId>
<artifactId>realm-in-tomee</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: DataSource Realm</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -86,4 +86,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/reload-persistence-unit-properties/pom.xml b/examples/reload-persistence-unit-properties/pom.xml
index 05c7ad7..32bbffb 100644
--- a/examples/reload-persistence-unit-properties/pom.xml
+++ b/examples/reload-persistence-unit-properties/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>reload-persistence-unit-properties</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Reloadable Persistence Unit Properties</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/examples/resources-declared-in-webapp/pom.xml b/examples/resources-declared-in-webapp/pom.xml
index 5d74389..378671e 100644
--- a/examples/resources-declared-in-webapp/pom.xml
+++ b/examples/resources-declared-in-webapp/pom.xml
@@ -21,12 +21,12 @@
<groupId>org.superbiz</groupId>
<artifactId>resources-declared-in-webapp</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: Resource Declared In A Webapp</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
<repositories>
diff --git a/examples/rest-applicationcomposer-mockito/pom.xml b/examples/rest-applicationcomposer-mockito/pom.xml
index 1a26ca8..d8fe389 100644
--- a/examples/rest-applicationcomposer-mockito/pom.xml
+++ b/examples/rest-applicationcomposer-mockito/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>rest-applicationcomposer-mockito</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: REST, Mockito and Application Composer</name>
<properties>
@@ -75,19 +75,19 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf-rs</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-mockito</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/rest-applicationcomposer/pom.xml b/examples/rest-applicationcomposer/pom.xml
index 16347cd..8e4951e 100644
--- a/examples/rest-applicationcomposer/pom.xml
+++ b/examples/rest-applicationcomposer/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>rest-applicationcomposer</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: REST and Application Composer</name>
<properties>
@@ -75,13 +75,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf-rs</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/rest-example-with-application/pom.xml b/examples/rest-example-with-application/pom.xml
index 0ce0a64..93e33bb 100644
--- a/examples/rest-example-with-application/pom.xml
+++ b/examples/rest-example-with-application/pom.xml
@@ -21,12 +21,12 @@
<groupId>org.superbiz</groupId>
<artifactId>rest-example-with-application</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: REST Example With Application</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
+ <openejb.version>4.5.1</openejb.version>
+ <tomee.version>1.5.1</tomee.version>
</properties>
<repositories>
<repository>
@@ -109,4 +109,4 @@
<url>file://${project.build.outputDirectory}/repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/rest-example-with-application/src/main/webapp/index.html b/examples/rest-example-with-application/src/main/webapp/index.html
index 008d472..ca0b92d 100644
--- a/examples/rest-example-with-application/src/main/webapp/index.html
+++ b/examples/rest-example-with-application/src/main/webapp/index.html
@@ -25,8 +25,8 @@
<p>
Two rest services are deployed:
<ul>
- <li>A simple Pojo one: http://localhost:1234/rest-example-with-application-1.1-SNAPSHOT/rest-prefix/pojo</li>
- <li>An EJB one: http://localhost:1234/rest-example-with-application-1.1-SNAPSHOT/rest-prefix/ejb</li>
+ <li>A simple Pojo one: http://localhost:1234/rest-example-with-application-1.1.0/rest-prefix/pojo</li>
+ <li>An EJB one: http://localhost:1234/rest-example-with-application-1.1.0/rest-prefix/ejb</li>
</ul>
</p>
<p>
diff --git a/examples/rest-example/pom.xml b/examples/rest-example/pom.xml
index c4ce790..633ac2a 100644
--- a/examples/rest-example/pom.xml
+++ b/examples/rest-example/pom.xml
@@ -21,12 +21,12 @@
<groupId>org.superbiz</groupId>
<artifactId>rest-example</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: REST Example</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
+ <openejb.version>4.5.1</openejb.version>
+ <tomee.version>1.5.1</tomee.version>
</properties>
<repositories>
<repository>
@@ -70,7 +70,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1</version>
<configuration>
<tomeeVersion>${tomee.version}</tomeeVersion>
<tomeeClassifier>plus</tomeeClassifier>
@@ -79,12 +79,12 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-embedded-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1</version>
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-jaxrs</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</dependency>
</dependencies>
</plugin>
@@ -106,34 +106,6 @@
</webapps>
</configuration>
</plugin>
- <plugin>
- <groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
- <artifactId>spi-helper-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>generate-scan-xml</id>
- <goals>
- <goal>generate</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <outputFilename>${project.build.directory}/${project.build.finalName}/WEB-INF/classes/META-INF/scan.xml</outputFilename>
- </configuration>
- <dependencies>
- <dependency> <!-- mandatory for the scanning since we enhanced our entities -->
- <groupId>org.apache.openjpa</groupId>
- <artifactId>openjpa</artifactId>
- <version>2.2.0</version>
- </dependency>
- <dependency> <!-- to get the jee6 profile without configuration -->
- <groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
- <artifactId>spi-helper-jee6-profile</artifactId>
- </dependency>
- </dependencies>
- </plugin>
<plugin> <!-- needed otherwise it will not work at runtime -->
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-maven-plugin</artifactId>
diff --git a/examples/rest-on-ejb/pom.xml b/examples/rest-on-ejb/pom.xml
index 0f99540..4e8ca67 100644
--- a/examples/rest-on-ejb/pom.xml
+++ b/examples/rest-on-ejb/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>rest-on-ejb</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: REST and EJB</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,13 +70,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf-rs</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -101,4 +101,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/rest-xml-json/pom.xml b/examples/rest-xml-json/pom.xml
index 3bb3c59..2671e75 100644
--- a/examples/rest-xml-json/pom.xml
+++ b/examples/rest-xml-json/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.superbiz</groupId>
<artifactId>rest-xml-json</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: REST XML JSON</name>
<properties>
@@ -74,7 +74,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf-rs</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/scala-basic/build.sbt b/examples/scala-basic/build.sbt
index b99e8e0..efcccc5 100644
--- a/examples/scala-basic/build.sbt
+++ b/examples/scala-basic/build.sbt
@@ -17,7 +17,7 @@
name := "scala-basic"
-version := "1.1-SNAPSHOT"
+version := "1.1.0"
scalaVersion := "2.9.1"
@@ -28,7 +28,7 @@
libraryDependencies ++= Seq(
"org.apache.openejb" % "javaee-api" % "6.0-4",
- "org.apache.openejb" % "openejb-core" % "4.5.1-SNAPSHOT" % "test",
+ "org.apache.openejb" % "openejb-core" % "4.5.1" % "test",
"org.scalatest" %% "scalatest" % "1.6.1" % "test"
)
diff --git a/examples/scala-basic/pom.xml b/examples/scala-basic/pom.xml
index b6a7752..8ee8699 100644
--- a/examples/scala-basic/pom.xml
+++ b/examples/scala-basic/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>scala-basic</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Basic Scala</name>
<properties>
@@ -127,7 +127,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/schedule-events/pom.xml b/examples/schedule-events/pom.xml
index e37f35e..0480c0c 100644
--- a/examples/schedule-events/pom.xml
+++ b/examples/schedule-events/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>schedule-events</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @Schedule Events</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/schedule-expression/pom.xml b/examples/schedule-expression/pom.xml
index 9d6c1c4..5c50a54 100644
--- a/examples/schedule-expression/pom.xml
+++ b/examples/schedule-expression/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>schedule-expression</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: ScheduleExpression</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/schedule-methods-meta/pom.xml b/examples/schedule-methods-meta/pom.xml
index 15f1df4..838da22 100644
--- a/examples/schedule-methods-meta/pom.xml
+++ b/examples/schedule-methods-meta/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>schedule-methods-meta</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @Schedule Methods (Meta)</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/schedule-methods/pom.xml b/examples/schedule-methods/pom.xml
index 888944d..cf4875d 100644
--- a/examples/schedule-methods/pom.xml
+++ b/examples/schedule-methods/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>schedule-methods</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @Schedule Methods</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/server-events/pom.xml b/examples/server-events/pom.xml
index dabe1b6..a6d0f11 100644
--- a/examples/server-events/pom.xml
+++ b/examples/server-events/pom.xml
@@ -25,7 +25,7 @@
<groupId>org.superbiz</groupId>
<artifactId>server-events</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Server Events</name>
<properties>
@@ -68,7 +68,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
@@ -82,7 +82,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-openejb-embedded-4</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -101,4 +101,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-cdi-interceptor/pom.xml b/examples/simple-cdi-interceptor/pom.xml
index cc0020b..5a25518 100644
--- a/examples/simple-cdi-interceptor/pom.xml
+++ b/examples/simple-cdi-interceptor/pom.xml
@@ -18,7 +18,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-cdi-interceptor</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple CDI Interceptor</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -64,7 +64,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/simple-cmp2/pom.xml b/examples/simple-cmp2/pom.xml
index 9b850e2..10238d8 100644
--- a/examples/simple-cmp2/pom.xml
+++ b/examples/simple-cmp2/pom.xml
@@ -24,11 +24,11 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-cmp2</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple CMP2 Entity</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
<build>
<defaultGoal>install</defaultGoal>
@@ -107,7 +107,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/simple-mdb-and-cdi/pom.xml b/examples/simple-mdb-and-cdi/pom.xml
index c6eed7c..a003663 100644
--- a/examples/simple-mdb-and-cdi/pom.xml
+++ b/examples/simple-mdb-and-cdi/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-mdb-and-cdi</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple MDB With a CDI Injection</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-mdb-with-descriptor/pom.xml b/examples/simple-mdb-with-descriptor/pom.xml
index 1ed06f2..15414d0 100644
--- a/examples/simple-mdb-with-descriptor/pom.xml
+++ b/examples/simple-mdb-with-descriptor/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-mdb-with-descriptor</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple MDB Using Deployment Descriptor Example</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/simple-mdb/pom.xml b/examples/simple-mdb/pom.xml
index 66ef2cf..9703bdf 100644
--- a/examples/simple-mdb/pom.xml
+++ b/examples/simple-mdb/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-mdb</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple MDB Example</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-osgi/pom.xml b/examples/simple-osgi/pom.xml
index 87e52ae..cfbc96e 100644
--- a/examples/simple-osgi/pom.xml
+++ b/examples/simple-osgi/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-osgi</artifactId>
<packaging>pom</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<modules>
<module>simple-osgi-api</module>
<module>simple-osgi-core</module>
@@ -99,7 +99,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/examples/simple-osgi/simple-osgi-api/pom.xml b/examples/simple-osgi/simple-osgi-api/pom.xml
index f498b40..eca89d4 100644
--- a/examples/simple-osgi/simple-osgi-api/pom.xml
+++ b/examples/simple-osgi/simple-osgi-api/pom.xml
@@ -24,7 +24,7 @@
<parent>
<artifactId>simple-osgi</artifactId>
<groupId>org.superbiz</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<artifactId>simple-osgi-api</artifactId>
@@ -56,4 +56,4 @@
</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-osgi/simple-osgi-camel-client/pom.xml b/examples/simple-osgi/simple-osgi-camel-client/pom.xml
index 49a7225..5d636a3 100644
--- a/examples/simple-osgi/simple-osgi-camel-client/pom.xml
+++ b/examples/simple-osgi/simple-osgi-camel-client/pom.xml
@@ -24,7 +24,7 @@
<parent>
<artifactId>simple-osgi</artifactId>
<groupId>org.superbiz</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<artifactId>simple-osgi-camel-client</artifactId>
@@ -72,4 +72,4 @@
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-osgi/simple-osgi-core/pom.xml b/examples/simple-osgi/simple-osgi-core/pom.xml
index 3a9d98f..1cfce2e 100644
--- a/examples/simple-osgi/simple-osgi-core/pom.xml
+++ b/examples/simple-osgi/simple-osgi-core/pom.xml
@@ -24,7 +24,7 @@
<parent>
<artifactId>simple-osgi</artifactId>
<groupId>org.superbiz</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<artifactId>simple-osgi-core</artifactId>
@@ -83,4 +83,4 @@
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-osgi/simple-osgi-local-lookup-client/pom.xml b/examples/simple-osgi/simple-osgi-local-lookup-client/pom.xml
index cb5d4a7..6c4d770 100644
--- a/examples/simple-osgi/simple-osgi-local-lookup-client/pom.xml
+++ b/examples/simple-osgi/simple-osgi-local-lookup-client/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>simple-osgi</artifactId>
<groupId>org.superbiz</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/examples/simple-osgi/simple-osgi-remote-client/pom.xml b/examples/simple-osgi/simple-osgi-remote-client/pom.xml
index cc0b903..75b1c12 100644
--- a/examples/simple-osgi/simple-osgi-remote-client/pom.xml
+++ b/examples/simple-osgi/simple-osgi-remote-client/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>simple-osgi</artifactId>
<groupId>org.superbiz</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -39,7 +39,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-client</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
diff --git a/examples/simple-osgi/simple-osgi-service-injection/pom.xml b/examples/simple-osgi/simple-osgi-service-injection/pom.xml
index 7873c74..3eb4b21 100644
--- a/examples/simple-osgi/simple-osgi-service-injection/pom.xml
+++ b/examples/simple-osgi/simple-osgi-service-injection/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>simple-osgi</artifactId>
<groupId>org.superbiz</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/examples/simple-osgi/standard-ejbd-server/pom.xml b/examples/simple-osgi/standard-ejbd-server/pom.xml
index c55ea81..0c3ecac 100644
--- a/examples/simple-osgi/standard-ejbd-server/pom.xml
+++ b/examples/simple-osgi/standard-ejbd-server/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>simple-osgi</artifactId>
<groupId>org.superbiz</groupId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -42,7 +42,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-ejbd</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
diff --git a/examples/simple-rest/pom.xml b/examples/simple-rest/pom.xml
index fdeb14f..fd6a892 100644
--- a/examples/simple-rest/pom.xml
+++ b/examples/simple-rest/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-rest</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple REST</name>
<properties>
@@ -74,7 +74,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf-rs</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/simple-singleton/pom.xml b/examples/simple-singleton/pom.xml
index 628afaa..1fc47bf 100644
--- a/examples/simple-singleton/pom.xml
+++ b/examples/simple-singleton/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-singleton</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Singleton</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-stateful-callbacks/pom.xml b/examples/simple-stateful-callbacks/pom.xml
index c815a54..f0ff525 100644
--- a/examples/simple-stateful-callbacks/pom.xml
+++ b/examples/simple-stateful-callbacks/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-stateful-callbacks</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Stateful Pojo Callbacks</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/simple-stateful/pom.xml b/examples/simple-stateful/pom.xml
index 0948b5d..c6eea6f 100644
--- a/examples/simple-stateful/pom.xml
+++ b/examples/simple-stateful/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-stateful</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Stateful Pojo</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -70,7 +70,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -89,4 +89,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-stateless-callbacks/pom.xml b/examples/simple-stateless-callbacks/pom.xml
index 917dc9d..b46dcba 100644
--- a/examples/simple-stateless-callbacks/pom.xml
+++ b/examples/simple-stateless-callbacks/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-stateless-callbacks</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Stateless Pojo Callbacks</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/simple-stateless-with-descriptor/pom.xml b/examples/simple-stateless-with-descriptor/pom.xml
index a1efe05..e3da1f7 100644
--- a/examples/simple-stateless-with-descriptor/pom.xml
+++ b/examples/simple-stateless-with-descriptor/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-stateless-with-descriptor</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Stateless With Deployment Descriptor</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,13 +71,13 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-jee-accessors</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/simple-stateless/pom.xml b/examples/simple-stateless/pom.xml
index 7c2e042..405248a 100644
--- a/examples/simple-stateless/pom.xml
+++ b/examples/simple-stateless/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-stateless</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Stateless Pojo</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/examples/simple-webservice-without-interface/pom.xml b/examples/simple-webservice-without-interface/pom.xml
index 046c251..e58fad3 100644
--- a/examples/simple-webservice-without-interface/pom.xml
+++ b/examples/simple-webservice-without-interface/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-webservice-without-interface</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Webservice Without Interface</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
@@ -106,4 +106,4 @@
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/simple-webservice/README.md b/examples/simple-webservice/README.md
index dc61607..f3ddd54 100644
--- a/examples/simple-webservice/README.md
+++ b/examples/simple-webservice/README.md
@@ -318,7 +318,7 @@
If we look at the jar built by maven, we'll see the application itself is quite small:
- $ jar tvf target/simple-webservice-1.1-SNAPSHOT.jar
+ $ jar tvf target/simple-webservice-1.1.0-SNAPSHOT.jar
0 Sat Feb 18 19:17:06 PST 2012 META-INF/
127 Sat Feb 18 19:17:04 PST 2012 META-INF/MANIFEST.MF
0 Sat Feb 18 19:17:02 PST 2012 org/
diff --git a/examples/simple-webservice/pom.xml b/examples/simple-webservice/pom.xml
index db5f191..3bc0843 100644
--- a/examples/simple-webservice/pom.xml
+++ b/examples/simple-webservice/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>simple-webservice</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Simple Webservice</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
@@ -99,4 +99,4 @@
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/spring-data-proxy-meta/pom.xml b/examples/spring-data-proxy-meta/pom.xml
index 931481e..6e512f6 100644
--- a/examples/spring-data-proxy-meta/pom.xml
+++ b/examples/spring-data-proxy-meta/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.superbiz</groupId>
<artifactId>spring-data-proxy-meta</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Spring Data Meta</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
</dependencies>
diff --git a/examples/spring-data-proxy/pom.xml b/examples/spring-data-proxy/pom.xml
index ef4ed5e..2b9e4a2 100644
--- a/examples/spring-data-proxy/pom.xml
+++ b/examples/spring-data-proxy/pom.xml
@@ -21,7 +21,7 @@
<groupId>org.superbiz</groupId>
<artifactId>spring-data-proxy</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Spring Data</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</dependency>
</dependencies>
diff --git a/examples/struts/pom.xml b/examples/struts/pom.xml
index d1478f8..c64eb15 100644
--- a/examples/struts/pom.xml
+++ b/examples/struts/pom.xml
@@ -19,7 +19,7 @@
<groupId>org.superbiz.struts</groupId>
<artifactId>struts</artifactId>
<packaging>war</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: Struts</name>
<url>http://openejb.apache.org</url>
<properties>
diff --git a/examples/telephone-stateful/pom.xml b/examples/telephone-stateful/pom.xml
index e2244a5..78f4065 100644
--- a/examples/telephone-stateful/pom.xml
+++ b/examples/telephone-stateful/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>telephone-stateful</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Telephone Stateful Pojo</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -83,7 +83,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-ejbd</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- END SNIPPET: openejbdep -->
diff --git a/examples/testcase-injection/pom.xml b/examples/testcase-injection/pom.xml
index 7140a1f..79545f3 100644
--- a/examples/testcase-injection/pom.xml
+++ b/examples/testcase-injection/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testcase-injection</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: TestCase Injection</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/testing-security-2/pom.xml b/examples/testing-security-2/pom.xml
index 4d7dd13..044b993 100644
--- a/examples/testing-security-2/pom.xml
+++ b/examples/testing-security-2/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testing-security-2</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Testing Security</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -79,7 +79,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/testing-security-3/pom.xml b/examples/testing-security-3/pom.xml
index 8e766ef..c36e79f 100644
--- a/examples/testing-security-3/pom.xml
+++ b/examples/testing-security-3/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testing-security-3</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Testing Security Service Provider</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -79,7 +79,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
diff --git a/examples/testing-security-4/pom.xml b/examples/testing-security-4/pom.xml
index d3f1e3b..3158d80 100644
--- a/examples/testing-security-4/pom.xml
+++ b/examples/testing-security-4/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testing-security-4</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Testing Security Script Service Provider</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -79,7 +79,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
diff --git a/examples/testing-security-meta/pom.xml b/examples/testing-security-meta/pom.xml
index d409f8c..1b614ad 100644
--- a/examples/testing-security-meta/pom.xml
+++ b/examples/testing-security-meta/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testing-security-meta</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Testing Security (Meta)</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -78,7 +78,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -97,4 +97,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/testing-security/pom.xml b/examples/testing-security/pom.xml
index 12b26a6..9337631 100644
--- a/examples/testing-security/pom.xml
+++ b/examples/testing-security/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testing-security</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Testing Security</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -78,7 +78,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -97,4 +97,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/testing-transactions-bmt/pom.xml b/examples/testing-transactions-bmt/pom.xml
index 03142fd..ac8bb74 100644
--- a/examples/testing-transactions-bmt/pom.xml
+++ b/examples/testing-transactions-bmt/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testing-transactions-bmt</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Testing Transactions BMT</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/testing-transactions/pom.xml b/examples/testing-transactions/pom.xml
index e753957..19a91d2 100644
--- a/examples/testing-transactions/pom.xml
+++ b/examples/testing-transactions/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>testing-transactions</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Testing Transactions</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
diff --git a/examples/tomee-jersey-eclipselink/pom.xml b/examples/tomee-jersey-eclipselink/pom.xml
index 13e3963..392e46b 100644
--- a/examples/tomee-jersey-eclipselink/pom.xml
+++ b/examples/tomee-jersey-eclipselink/pom.xml
@@ -23,7 +23,7 @@
<groupId>org.superbiz</groupId>
<artifactId>tomee-jersey-eclipselink</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<packaging>war</packaging>
<name>OpenEJB :: Examples :: TomEE, Jersey, Eclipselink</name>
@@ -87,7 +87,7 @@
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<configuration>
<systemVariables>
<com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager>true</com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager>
diff --git a/examples/transaction-rollback/pom.xml b/examples/transaction-rollback/pom.xml
index af34b55..bd0f148 100644
--- a/examples/transaction-rollback/pom.xml
+++ b/examples/transaction-rollback/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>transaction-rollback</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Transaction Rollback</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -68,7 +68,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
@@ -90,4 +90,4 @@
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/troubleshooting/pom.xml b/examples/troubleshooting/pom.xml
index c9b0827..81472f6 100644
--- a/examples/troubleshooting/pom.xml
+++ b/examples/troubleshooting/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>troubleshooting</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Troubleshooting</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -67,7 +67,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -86,4 +86,4 @@
<url>file://${basedir}/target/snapshot-repo/</url>
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/webservice-attachments/pom.xml b/examples/webservice-attachments/pom.xml
index 4ff595e..acece4c 100644
--- a/examples/webservice-attachments/pom.xml
+++ b/examples/webservice-attachments/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>webservice-attachments</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Webservice Attachments</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
@@ -98,4 +98,4 @@
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/webservice-handlerchain/pom.xml b/examples/webservice-handlerchain/pom.xml
index f0b690c..0236e41 100644
--- a/examples/webservice-handlerchain/pom.xml
+++ b/examples/webservice-handlerchain/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>webservice-handlerchain</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Web Service Handlers</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
diff --git a/examples/webservice-holder/pom.xml b/examples/webservice-holder/pom.xml
index 009b4ff..cba1b84 100644
--- a/examples/webservice-holder/pom.xml
+++ b/examples/webservice-holder/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>webservice-holder</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: @WebService Holder</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
diff --git a/examples/webservice-inheritance/pom.xml b/examples/webservice-inheritance/pom.xml
index 139d91e..0ffee47 100644
--- a/examples/webservice-inheritance/pom.xml
+++ b/examples/webservice-inheritance/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>webservice-inheritance</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Examples :: Webservice Inheritance</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
@@ -98,4 +98,4 @@
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/webservice-security/pom.xml b/examples/webservice-security/pom.xml
index fbfb302..f6e39b6 100644
--- a/examples/webservice-security/pom.xml
+++ b/examples/webservice-security/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>webservice-security</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: EJB WebService with Security</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -69,7 +69,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
@@ -98,4 +98,4 @@
</snapshotRepository>
</distributionManagement>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/webservice-ws-security/pom.xml b/examples/webservice-ws-security/pom.xml
index 43085c4..63fe715 100644
--- a/examples/webservice-ws-security/pom.xml
+++ b/examples/webservice-ws-security/pom.xml
@@ -24,7 +24,7 @@
<groupId>org.superbiz</groupId>
<artifactId>webservice-ws-security</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: EJB WebService with WS-Security</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -56,7 +56,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>test</scope>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
diff --git a/examples/webservice-ws-with-resources-config/pom.xml b/examples/webservice-ws-with-resources-config/pom.xml
index 41f1268..ffbf7d2 100644
--- a/examples/webservice-ws-with-resources-config/pom.xml
+++ b/examples/webservice-ws-with-resources-config/pom.xml
@@ -22,7 +22,7 @@
<groupId>org.superbiz</groupId>
<artifactId>webservice-ws-with-resources-config</artifactId>
<packaging>jar</packaging>
- <version>1.1-SNAPSHOT</version>
+ <version>1.1.0</version>
<name>OpenEJB :: Web Examples :: EJB WebService WS Security with resources.xml</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -38,7 +38,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-cxf</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/itests/failover-ejb/pom.xml b/itests/failover-ejb/pom.xml
index 8b4b65f..7cc67c5 100644
--- a/itests/failover-ejb/pom.xml
+++ b/itests/failover-ejb/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>itests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.openejb.itests</groupId>
diff --git a/itests/failover/pom.xml b/itests/failover/pom.xml
index 114f205..2cfbaf9 100644
--- a/itests/failover/pom.xml
+++ b/itests/failover/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>itests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.openejb.itests</groupId>
@@ -65,7 +65,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>arquillian-tomee-common</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.openejb</groupId>
diff --git a/itests/openejb-itests-app/pom.xml b/itests/openejb-itests-app/pom.xml
index a20bd71..06ac7b4 100644
--- a/itests/openejb-itests-app/pom.xml
+++ b/itests/openejb-itests-app/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>itests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-itests-app</artifactId>
diff --git a/itests/openejb-itests-beans/pom.xml b/itests/openejb-itests-beans/pom.xml
index 37b7f93..f1d754b 100644
--- a/itests/openejb-itests-beans/pom.xml
+++ b/itests/openejb-itests-beans/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>itests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-itests-beans</artifactId>
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/AnnotatedFieldInjectionMdbBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/AnnotatedFieldInjectionMdbBean.java
index a87f297..5af1dcd 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/AnnotatedFieldInjectionMdbBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/AnnotatedFieldInjectionMdbBean.java
@@ -17,44 +17,43 @@
*/
package org.apache.openejb.test.mdb;
-import org.apache.openejb.test.entity.bmp.BasicBmpHome;
-import org.apache.openejb.test.stateful.BasicStatefulHome;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
-import org.apache.openejb.test.stateless.BasicStatelessHome;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
-import org.apache.openejb.test.TestFailureException;
-
-import javax.annotation.PreDestroy;
-import javax.ejb.EJB;
-import javax.ejb.MessageDriven;
-import javax.ejb.MessageDrivenContext;
-import javax.ejb.EJBException;
-import javax.ejb.ActivationConfigProperty;
-import javax.annotation.Resource;
-import javax.annotation.PostConstruct;
-import javax.sql.DataSource;
-import javax.jms.ConnectionFactory;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.Session;
-import javax.jms.Topic;
-import javax.jms.MessageProducer;
-import javax.jms.MessageListener;
-import javax.jms.Message;
-import javax.persistence.PersistenceUnit;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceContext;
-import javax.persistence.EntityManager;
-
import junit.framework.Assert;
import junit.framework.AssertionFailedError;
+import org.apache.openejb.test.TestFailureException;
+import org.apache.openejb.test.entity.bmp.BasicBmpHome;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
+import org.apache.openejb.test.stateful.BasicStatefulHome;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
+import org.apache.openejb.test.stateless.BasicStatelessHome;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.ejb.ActivationConfigProperty;
+import javax.ejb.EJB;
+import javax.ejb.EJBException;
+import javax.ejb.MessageDriven;
+import javax.ejb.MessageDrivenContext;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.QueueConnectionFactory;
+import javax.jms.Session;
+import javax.jms.Topic;
+import javax.jms.TopicConnectionFactory;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceUnit;
+import javax.sql.DataSource;
@MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName="destinationType", propertyValue = "javax.jms.Queue"),
- @ActivationConfigProperty(propertyName="destination", propertyValue = "AnnotatedFieldInjectionMdb")})
+ @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
+ @ActivationConfigProperty(propertyName = "destination", propertyValue = "AnnotatedFieldInjectionMdb")})
public class AnnotatedFieldInjectionMdbBean implements MessageListener {
@Resource
private MessageDrivenContext mdbContext;
@@ -75,11 +74,11 @@
@Resource
private Integer inteeger = 1;
@Resource
- private Short shoort = (short)1;
+ private Short shoort = (short) 1;
@Resource
private Boolean booolean = true;
@Resource
- private Byte byyte = (byte)1;
+ private Byte byyte = (byte) 1;
@Resource
private Character chaaracter = 'D';
@Resource
@@ -114,7 +113,19 @@
}
}
- public void onMessage(Message message) {
+ @PreDestroy
+ public void preDestroy() {
+ if (null != mdbInvoker) {
+ try {
+ mdbInvoker.destroy();
+ } catch (Throwable e) {
+ //Ignore
+ }
+ }
+ }
+
+ @Override
+ public void onMessage(final Message message) {
try {
// System.out.println("\n" +
// "***************************************\n" +
@@ -189,7 +200,7 @@
public void lookupStringEntry() throws TestFailureException {
try {
- String expected = new String("1");
+ final String expected = "1";
Assert.assertNotNull("The String looked up is null", striing);
Assert.assertEquals(expected, striing);
} catch (AssertionFailedError afe) {
@@ -199,7 +210,7 @@
public void lookupDoubleEntry() throws TestFailureException {
try {
- Double expected = new Double(1.0D);
+ final Double expected = 1.0D;
Assert.assertNotNull("The Double looked up is null", doouble);
Assert.assertEquals(expected, doouble);
@@ -211,7 +222,7 @@
public void lookupLongEntry() throws TestFailureException {
try {
- Long expected = new Long(1L);
+ final Long expected = 1L;
Assert.assertNotNull("The Long looked up is null", loong);
Assert.assertEquals(expected, loong);
@@ -222,7 +233,7 @@
public void lookupFloatEntry() throws TestFailureException {
try {
- Float expected = new Float(1.0F);
+ final Float expected = 1.0F;
Assert.assertNotNull("The Float looked up is null", flooat);
Assert.assertEquals(expected, flooat);
@@ -233,7 +244,7 @@
public void lookupIntegerEntry() throws TestFailureException {
try {
- Integer expected = new Integer(1);
+ final Integer expected = 1;
Assert.assertNotNull("The Integer looked up is null", inteeger);
Assert.assertEquals(expected, inteeger);
@@ -245,7 +256,7 @@
public void lookupShortEntry() throws TestFailureException {
try {
- Short expected = new Short((short) 1);
+ final Short expected = (short) 1;
Assert.assertNotNull("The Short looked up is null", shoort);
Assert.assertEquals(expected, shoort);
@@ -256,7 +267,7 @@
public void lookupBooleanEntry() throws TestFailureException {
try {
- Boolean expected = new Boolean(true);
+ final Boolean expected = true;
Assert.assertNotNull("The Boolean looked up is null", booolean);
Assert.assertEquals(expected, booolean);
@@ -267,7 +278,7 @@
public void lookupByteEntry() throws TestFailureException {
try {
- Byte expected = new Byte((byte) 1);
+ final Byte expected = (byte) 1;
Assert.assertNotNull("The Byte looked up is null", byyte);
Assert.assertEquals(expected, byyte);
@@ -278,7 +289,7 @@
public void lookupCharacterEntry() throws TestFailureException {
try {
- Character expected = new Character('D');
+ final Character expected = 'D';
Assert.assertNotNull("The Character looked up is null", chaaracter);
Assert.assertEquals(expected, chaaracter);
@@ -295,25 +306,25 @@
}
}
- public void lookupJMSConnectionFactory() throws TestFailureException{
- try{
- try{
+ public void lookupJMSConnectionFactory() throws TestFailureException {
+ try {
+ try {
testJmsConnection(coonnectionFactory.createConnection());
testJmsConnection(queueCoonnectionFactory.createConnection());
testJmsConnection(topicCoonnectionFactory.createConnection());
- } catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- private void testJmsConnection(javax.jms.Connection connection) throws JMSException {
- Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
- Topic topic = session.createTopic("test");
- MessageProducer producer = session.createProducer(topic);
+ private void testJmsConnection(final javax.jms.Connection connection) throws JMSException {
+ final Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+ final Topic topic = session.createTopic("test");
+ final MessageProducer producer = session.createProducer(topic);
producer.send(session.createMessage());
producer.close();
session.close();
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/BasicMdbBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/BasicMdbBean.java
index 64b4d5f..6dc50f3 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/BasicMdbBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/BasicMdbBean.java
@@ -19,7 +19,6 @@
import org.apache.openejb.test.ApplicationException;
import org.apache.openejb.test.object.OperationsPolicy;
-import javax.annotation.PreDestroy;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
@@ -28,26 +27,28 @@
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.naming.InitialContext;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.Properties;
public class BasicMdbBean implements BasicMdbObject, MessageDrivenBean, MessageListener {
- private MessageDrivenContext mdbContext = null;
- private static Hashtable allowedOperationsTable = new Hashtable();
+ private MessageDrivenContext mdbContext = null;
+ private static final HashMap<String, OperationsPolicy> allowedOperationsTable = new HashMap<String, OperationsPolicy>();
protected MdbInvoker mdbInvoker;
- public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
+ @Override
+ public void setMessageDrivenContext(final MessageDrivenContext ctx) throws EJBException {
this.mdbContext = ctx;
testAllowedOperations("setMessageDrivenContext");
try {
- ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
+ final ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
mdbInvoker = new MdbInvoker(connectionFactory, this);
} catch (Exception e) {
throw new EJBException(e);
}
}
- public void onMessage(Message message) {
+ @Override
+ public void onMessage(final Message message) {
try {
// System.out.println("\n" +
// "***************************************\n" +
@@ -60,7 +61,7 @@
}
mdbInvoker.onMessage(message);
} catch (Throwable e) {
- e.printStackTrace();
+ e.printStackTrace();
}
}
@@ -79,18 +80,19 @@
/**
* Maps to BasicStatelessObject.businessMethod
*/
- public String businessMethod(String text){
+ @Override
+ public String businessMethod(final String text) {
testAllowedOperations("businessMethod");
- StringBuffer b = new StringBuffer(text);
+ final StringBuffer b = new StringBuffer(text);
return b.reverse().toString();
}
/**
* Throws an ApplicationException when invoked
- *
*/
- public void throwApplicationException() throws ApplicationException{
+ @Override
+ public void throwApplicationException() throws ApplicationException {
throw new ApplicationException("Testing ability to throw Application Exceptions");
}
@@ -99,35 +101,37 @@
* This is a system exception and should result in the
* destruction of the instance and invalidation of the
* remote reference.
- *
*/
+ @Override
public void throwSystemException_NullPointer() {
throw new NullPointerException("Testing ability to throw System Exceptions");
}
/**
* Maps to BasicStatelessObject.getPermissionsReport
- *
+ * <p/>
* Returns a report of the bean's
* runtime permissions
*
* @return
*/
- public Properties getPermissionsReport(){
+ @Override
+ public Properties getPermissionsReport() {
/* TO DO: */
return null;
}
/**
* Maps to BasicStatelessObject.getAllowedOperationsReport
- *
+ * <p/>
* Returns a report of the allowed opperations
* for one of the bean's methods.
*
* @param methodName The method for which to get the allowed opperations report
* @return
*/
- public OperationsPolicy getAllowedOperationsReport(String methodName){
+ @Override
+ public OperationsPolicy getAllowedOperationsReport(final String methodName) {
return (OperationsPolicy) allowedOperationsTable.get(methodName);
}
@@ -140,11 +144,17 @@
// MessageDrivenBean interface methods
//
- public void ejbCreate() throws javax.ejb.CreateException{
+ public void ejbCreate() throws javax.ejb.CreateException {
testAllowedOperations("ejbCreate");
}
+ @Override
public void ejbRemove() throws EJBException {
+
+ if (null != mdbInvoker) {
+ mdbInvoker.destroy();
+ }
+
testAllowedOperations("ejbRemove");
}
@@ -152,67 +162,67 @@
// SessionBean interface methods
//================================
- protected void testAllowedOperations(String methodName) {
- OperationsPolicy policy = new OperationsPolicy();
+ protected void testAllowedOperations(final String methodName) {
+ final OperationsPolicy policy = new OperationsPolicy();
- /*[0] Test getEJBHome /////////////////*/
- try {
- mdbContext.getEJBHome();
- policy.allow(OperationsPolicy.Context_getEJBHome);
- } catch (IllegalStateException ignored) {
- }
+ /*[0] Test getEJBHome /////////////////*/
+ try {
+ mdbContext.getEJBHome();
+ policy.allow(OperationsPolicy.Context_getEJBHome);
+ } catch (IllegalStateException ignored) {
+ }
- /*[1] Test getCallerPrincipal /////////*/
- try {
- mdbContext.getCallerPrincipal();
- policy.allow(OperationsPolicy.Context_getCallerPrincipal);
- } catch (IllegalStateException ignored) {
- }
+ /*[1] Test getCallerPrincipal /////////*/
+ try {
+ mdbContext.getCallerPrincipal();
+ policy.allow(OperationsPolicy.Context_getCallerPrincipal);
+ } catch (IllegalStateException ignored) {
+ }
- /*[2] Test isCallerInRole /////////////*/
- try {
- mdbContext.isCallerInRole("TheMan");
- policy.allow(OperationsPolicy.Context_isCallerInRole);
- } catch (IllegalStateException ignored) {
- }
+ /*[2] Test isCallerInRole /////////////*/
+ try {
+ mdbContext.isCallerInRole("TheMan");
+ policy.allow(OperationsPolicy.Context_isCallerInRole);
+ } catch (IllegalStateException ignored) {
+ }
- /*[3] Test getRollbackOnly ////////////*/
- try {
- mdbContext.getRollbackOnly();
- policy.allow(OperationsPolicy.Context_getRollbackOnly);
- } catch (IllegalStateException ignored) {
- }
+ /*[3] Test getRollbackOnly ////////////*/
+ try {
+ mdbContext.getRollbackOnly();
+ policy.allow(OperationsPolicy.Context_getRollbackOnly);
+ } catch (IllegalStateException ignored) {
+ }
- /*[4] Test setRollbackOnly ////////////*/
+ /*[4] Test setRollbackOnly ////////////*/
// Rollback causes message redelivery
- /*[5] Test getUserTransaction /////////*/
- try {
- mdbContext.getUserTransaction();
- policy.allow(OperationsPolicy.Context_getUserTransaction);
- } catch (IllegalStateException ignored) {
- }
+ /*[5] Test getUserTransaction /////////*/
+ try {
+ mdbContext.getUserTransaction();
+ policy.allow(OperationsPolicy.Context_getUserTransaction);
+ } catch (IllegalStateException ignored) {
+ }
- /*[6] Test getEJBObject ///////////////
- *
- * MDBs don't have an ejbObject
- */
+ /*[6] Test getEJBObject ///////////////
+ *
+ * MDBs don't have an ejbObject
+ */
- /*[7] Test Context_getPrimaryKey ///////////////
- *
- * Can't really do this
- */
+ /*[7] Test Context_getPrimaryKey ///////////////
+ *
+ * Can't really do this
+ */
- /*[8] Test JNDI_access_to_java_comp_env ///////////////*/
- try {
- InitialContext jndiContext = new InitialContext();
+ /*[8] Test JNDI_access_to_java_comp_env ///////////////*/
+ try {
+ final InitialContext jndiContext = new InitialContext();
- String actual = (String)jndiContext.lookup("java:comp/env/stateless/references/JNDI_access_to_java_comp_env");
+ final String actual = (String) jndiContext.lookup("java:comp/env/stateless/references/JNDI_access_to_java_comp_env");
- policy.allow(OperationsPolicy.JNDI_access_to_java_comp_env);
- } catch (IllegalStateException ignored) {
- } catch (javax.naming.NamingException ignored) {
- }
+ policy.allow(OperationsPolicy.JNDI_access_to_java_comp_env);
+ } catch (IllegalStateException ignored) {
+ } catch (javax.naming.NamingException ignored) {
+ }
/*[11] Test lookup /////////*/
try {
@@ -221,7 +231,7 @@
} catch (IllegalArgumentException ignored) {
}
- allowedOperationsTable.put(methodName, policy);
+ allowedOperationsTable.put(methodName, policy);
}
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbBean.java
index f47c634..481a994 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbBean.java
@@ -17,56 +17,56 @@
*/
package org.apache.openejb.test.mdb;
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
import org.apache.openejb.test.TestFailureException;
-import org.apache.openejb.test.stateless.BasicStatelessHome;
-import org.apache.openejb.test.stateless.BasicStatelessObject;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
-import org.apache.openejb.test.stateful.BasicStatefulHome;
-import org.apache.openejb.test.stateful.BasicStatefulObject;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
import org.apache.openejb.test.entity.bmp.BasicBmpHome;
import org.apache.openejb.test.entity.bmp.BasicBmpObject;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
+import org.apache.openejb.test.stateful.BasicStatefulHome;
+import org.apache.openejb.test.stateful.BasicStatefulObject;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
+import org.apache.openejb.test.stateless.BasicStatelessHome;
+import org.apache.openejb.test.stateless.BasicStatelessObject;
-import javax.annotation.PreDestroy;
import javax.ejb.EJBContext;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
-import javax.sql.DataSource;
-import javax.jms.ConnectionFactory;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.QueueConnectionFactory;
import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.jms.Topic;
-import javax.jms.MessageProducer;
-import javax.jms.MessageListener;
-import javax.jms.Message;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityManager;
+import javax.jms.TopicConnectionFactory;
import javax.naming.InitialContext;
-
-import junit.framework.Assert;
-import junit.framework.AssertionFailedError;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
public class ContextLookupMdbBean implements EncMdbObject, MessageDrivenBean, MessageListener {
- private MessageDrivenContext mdbContext = null;
+ private MessageDrivenContext mdbContext = null;
private MdbInvoker mdbInvoker;
- public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
+ @Override
+ public void setMessageDrivenContext(final MessageDrivenContext ctx) throws EJBException {
this.mdbContext = ctx;
try {
- ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
+ final ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
mdbInvoker = new MdbInvoker(connectionFactory, this);
} catch (Exception e) {
throw new EJBException(e);
}
}
- public void onMessage(Message message) {
+ @Override
+ public void onMessage(final Message message) {
try {
// System.out.println("\n" +
// "***************************************\n" +
@@ -83,13 +83,14 @@
}
}
+ @Override
public void lookupEntityBean() throws TestFailureException {
try {
try {
- BasicBmpHome home = (BasicBmpHome) mdbContext.lookup("stateless/beanReferences/bmp_entity");
+ final BasicBmpHome home = (BasicBmpHome) mdbContext.lookup("stateless/beanReferences/bmp_entity");
Assert.assertNotNull("The EJBHome looked up is null", home);
- BasicBmpObject object = home.createObject("Enc Bean");
+ final BasicBmpObject object = home.createObject("Enc Bean");
Assert.assertNotNull("The EJBObject is null", object);
} catch (Exception e) {
Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
@@ -99,13 +100,14 @@
}
}
+ @Override
public void lookupStatefulBean() throws TestFailureException {
try {
try {
- BasicStatefulHome home = (BasicStatefulHome) mdbContext.lookup("stateless/beanReferences/stateful");
+ final BasicStatefulHome home = (BasicStatefulHome) mdbContext.lookup("stateless/beanReferences/stateful");
Assert.assertNotNull("The EJBHome looked up is null", home);
- BasicStatefulObject object = home.createObject("Enc Bean");
+ final BasicStatefulObject object = home.createObject("Enc Bean");
Assert.assertNotNull("The EJBObject is null", object);
} catch (Exception e) {
Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
@@ -115,13 +117,14 @@
}
}
+ @Override
public void lookupStatelessBean() throws TestFailureException {
try {
try {
- BasicStatelessHome home = (BasicStatelessHome) mdbContext.lookup("stateless/beanReferences/stateless");
+ final BasicStatelessHome home = (BasicStatelessHome) mdbContext.lookup("stateless/beanReferences/stateless");
Assert.assertNotNull("The EJBHome looked up is null", home);
- BasicStatelessObject object = home.createObject();
+ final BasicStatelessObject object = home.createObject();
Assert.assertNotNull("The EJBObject is null", object);
} catch (Exception e) {
Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
@@ -131,63 +134,68 @@
}
}
- public void lookupStatelessBusinessLocal() throws TestFailureException{
- try{
- try{
- BasicStatelessBusinessLocal object = (BasicStatelessBusinessLocal) mdbContext.lookup("stateless/beanReferences/stateless-business-local");
- Assert.assertNotNull("The EJB BusinessLocal is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ @Override
+ public void lookupStatelessBusinessLocal() throws TestFailureException {
+ try {
+ try {
+ final BasicStatelessBusinessLocal object = (BasicStatelessBusinessLocal) mdbContext.lookup("stateless/beanReferences/stateless-business-local");
+ Assert.assertNotNull("The EJB BusinessLocal is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatelessBusinessRemote() throws TestFailureException{
- try{
- try{
- BasicStatelessBusinessRemote object = (BasicStatelessBusinessRemote) mdbContext.lookup("stateless/beanReferences/stateless-business-remote");
- Assert.assertNotNull("The EJB BusinessRemote is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ @Override
+ public void lookupStatelessBusinessRemote() throws TestFailureException {
+ try {
+ try {
+ final BasicStatelessBusinessRemote object = (BasicStatelessBusinessRemote) mdbContext.lookup("stateless/beanReferences/stateless-business-remote");
+ Assert.assertNotNull("The EJB BusinessRemote is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessLocal() throws TestFailureException{
- try{
- try{
- BasicStatefulBusinessLocal object = (BasicStatefulBusinessLocal) mdbContext.lookup("stateless/beanReferences/stateful-business-local");
- Assert.assertNotNull("The EJB BusinessLocal is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ @Override
+ public void lookupStatefulBusinessLocal() throws TestFailureException {
+ try {
+ try {
+ final BasicStatefulBusinessLocal object = (BasicStatefulBusinessLocal) mdbContext.lookup("stateless/beanReferences/stateful-business-local");
+ Assert.assertNotNull("The EJB BusinessLocal is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessRemote() throws TestFailureException{
- try{
- try{
- BasicStatefulBusinessRemote object = (BasicStatefulBusinessRemote) mdbContext.lookup("stateless/beanReferences/stateful-business-remote");
- Assert.assertNotNull("The EJB BusinessRemote is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ @Override
+ public void lookupStatefulBusinessRemote() throws TestFailureException {
+ try {
+ try {
+ final BasicStatefulBusinessRemote object = (BasicStatefulBusinessRemote) mdbContext.lookup("stateless/beanReferences/stateful-business-remote");
+ Assert.assertNotNull("The EJB BusinessRemote is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
+ @Override
public void lookupStringEntry() throws TestFailureException {
try {
try {
- String expected = new String("1");
- String actual = (String) mdbContext.lookup("stateless/references/String");
+ final String expected = "1";
+ final String actual = (String) mdbContext.lookup("stateless/references/String");
Assert.assertNotNull("The String looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -200,11 +208,12 @@
}
}
+ @Override
public void lookupDoubleEntry() throws TestFailureException {
try {
try {
- Double expected = new Double(1.0D);
- Double actual = (Double) mdbContext.lookup("stateless/references/Double");
+ final Double expected = 1.0D;
+ final Double actual = (Double) mdbContext.lookup("stateless/references/Double");
Assert.assertNotNull("The Double looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -217,11 +226,12 @@
}
}
+ @Override
public void lookupLongEntry() throws TestFailureException {
try {
try {
- Long expected = new Long(1L);
- Long actual = (Long) mdbContext.lookup("stateless/references/Long");
+ final Long expected = 1L;
+ final Long actual = (Long) mdbContext.lookup("stateless/references/Long");
Assert.assertNotNull("The Long looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -234,11 +244,12 @@
}
}
+ @Override
public void lookupFloatEntry() throws TestFailureException {
try {
try {
- Float expected = new Float(1.0F);
- Float actual = (Float) mdbContext.lookup("stateless/references/Float");
+ final Float expected = 1.0F;
+ final Float actual = (Float) mdbContext.lookup("stateless/references/Float");
Assert.assertNotNull("The Float looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -251,11 +262,12 @@
}
}
+ @Override
public void lookupIntegerEntry() throws TestFailureException {
try {
try {
- Integer expected = new Integer(1);
- Integer actual = (Integer) mdbContext.lookup("stateless/references/Integer");
+ final Integer expected = 1;
+ final Integer actual = (Integer) mdbContext.lookup("stateless/references/Integer");
Assert.assertNotNull("The Integer looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -268,11 +280,12 @@
}
}
+ @Override
public void lookupShortEntry() throws TestFailureException {
try {
try {
- Short expected = new Short((short) 1);
- Short actual = (Short) mdbContext.lookup("stateless/references/Short");
+ final Short expected = (short) 1;
+ final Short actual = (Short) mdbContext.lookup("stateless/references/Short");
Assert.assertNotNull("The Short looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -285,11 +298,12 @@
}
}
+ @Override
public void lookupBooleanEntry() throws TestFailureException {
try {
try {
- Boolean expected = new Boolean(true);
- Boolean actual = (Boolean) mdbContext.lookup("stateless/references/Boolean");
+ final Boolean expected = true;
+ final Boolean actual = (Boolean) mdbContext.lookup("stateless/references/Boolean");
Assert.assertNotNull("The Boolean looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -302,11 +316,12 @@
}
}
+ @Override
public void lookupByteEntry() throws TestFailureException {
try {
try {
- Byte expected = new Byte((byte) 1);
- Byte actual = (Byte) mdbContext.lookup("stateless/references/Byte");
+ final Byte expected = (byte) 1;
+ final Byte actual = (Byte) mdbContext.lookup("stateless/references/Byte");
Assert.assertNotNull("The Byte looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -319,11 +334,12 @@
}
}
+ @Override
public void lookupCharacterEntry() throws TestFailureException {
try {
try {
- Character expected = new Character('D');
- Character actual = (Character) mdbContext.lookup("stateless/references/Character");
+ final Character expected = 'D';
+ final Character actual = (Character) mdbContext.lookup("stateless/references/Character");
Assert.assertNotNull("The Character looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -336,10 +352,11 @@
}
}
+ @Override
public void lookupResource() throws TestFailureException {
try {
try {
- Object obj = mdbContext.lookup("datasource");
+ final Object obj = mdbContext.lookup("datasource");
Assert.assertNotNull("The DataSource is null", obj);
Assert.assertTrue("Not an instance of DataSource", obj instanceof DataSource);
} catch (Exception e) {
@@ -350,95 +367,99 @@
}
}
- public void lookupJMSConnectionFactory() throws TestFailureException{
- try{
- try{
+ @Override
+ public void lookupJMSConnectionFactory() throws TestFailureException {
+ try {
+ try {
Object obj = mdbContext.lookup("jms");
Assert.assertNotNull("The JMS ConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of ConnectionFactory", obj instanceof ConnectionFactory);
- ConnectionFactory connectionFactory = (ConnectionFactory) obj;
+ final ConnectionFactory connectionFactory = (ConnectionFactory) obj;
testJmsConnection(connectionFactory.createConnection());
obj = mdbContext.lookup("TopicCF");
Assert.assertNotNull("The JMS TopicConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of TopicConnectionFactory", obj instanceof TopicConnectionFactory);
- TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) obj;
+ final TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) obj;
testJmsConnection(topicConnectionFactory.createConnection());
obj = mdbContext.lookup("QueueCF");
Assert.assertNotNull("The JMS QueueConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of QueueConnectionFactory", obj instanceof QueueConnectionFactory);
- QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) obj;
+ final QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) obj;
testJmsConnection(queueConnectionFactory.createConnection());
- } catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- private void testJmsConnection(Connection connection) throws JMSException {
- Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
- Topic topic = session.createTopic("test");
- MessageProducer producer = session.createProducer(topic);
+ private void testJmsConnection(final Connection connection) throws JMSException {
+ final Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+ final Topic topic = session.createTopic("test");
+ final MessageProducer producer = session.createProducer(topic);
producer.send(session.createMessage());
producer.close();
session.close();
connection.close();
}
- public void lookupPersistenceUnit() throws TestFailureException{
- try{
- try{
- EntityManagerFactory emf = (EntityManagerFactory) mdbContext.lookup("persistence/TestUnit");
- Assert.assertNotNull("The EntityManagerFactory is null", emf );
+ @Override
+ public void lookupPersistenceUnit() throws TestFailureException {
+ try {
+ try {
+ final EntityManagerFactory emf = (EntityManagerFactory) mdbContext.lookup("persistence/TestUnit");
+ Assert.assertNotNull("The EntityManagerFactory is null", emf);
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupPersistenceContext() throws TestFailureException{
- try{
- try{
- EntityManager em = (EntityManager) mdbContext.lookup("persistence/TestContext");
+ @Override
+ public void lookupPersistenceContext() throws TestFailureException {
+ try {
+ try {
+ final EntityManager em = (EntityManager) mdbContext.lookup("persistence/TestContext");
Assert.assertNotNull("The EntityManager is null", em);
// call a do nothing method to assure entity manager actually exists
em.getFlushMode();
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupMessageDrivenContext() throws TestFailureException{
- try{
- try{
- InitialContext ctx = new InitialContext();
+ @Override
+ public void lookupMessageDrivenContext() throws TestFailureException {
+ try {
+ try {
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
// lookup in enc
- MessageDrivenContext sctx = (MessageDrivenContext)ctx.lookup("java:comp/env/mdbcontext");
- Assert.assertNotNull("The MessageDrivenContext got from java:comp/env/mdbcontext is null", sctx );
+ final MessageDrivenContext sctx = (MessageDrivenContext) ctx.lookup("java:comp/env/mdbcontext");
+ Assert.assertNotNull("The MessageDrivenContext got from java:comp/env/mdbcontext is null", sctx);
// lookup using global name
- EJBContext ejbCtx = (EJBContext)ctx.lookup("java:comp/EJBContext");
- Assert.assertNotNull("The MessageDrivenContext got from java:comp/EJBContext is null ", ejbCtx );
+ final EJBContext ejbCtx = (EJBContext) ctx.lookup("java:comp/EJBContext");
+ Assert.assertNotNull("The MessageDrivenContext got from java:comp/EJBContext is null ", ejbCtx);
// verify context was set via legacy set method
Assert.assertNotNull("The MessageDrivenContext is null from setter method", mdbContext);
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
@@ -447,6 +468,11 @@
public void ejbCreate() throws javax.ejb.CreateException {
}
+ @Override
public void ejbRemove() throws EJBException {
+
+ if (null != mdbInvoker) {
+ mdbInvoker.destroy();
+ }
}
}
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbPojoBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbPojoBean.java
index 67b3966..5d8a42c 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbPojoBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/ContextLookupMdbPojoBean.java
@@ -17,54 +17,60 @@
*/
package org.apache.openejb.test.mdb;
-import org.apache.openejb.test.TestFailureException;
-import org.apache.openejb.test.stateless.BasicStatelessHome;
-import org.apache.openejb.test.stateless.BasicStatelessObject;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
-import org.apache.openejb.test.stateful.BasicStatefulHome;
-import org.apache.openejb.test.stateful.BasicStatefulObject;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
-import org.apache.openejb.test.entity.bmp.BasicBmpHome;
-import org.apache.openejb.test.entity.bmp.BasicBmpObject;
import junit.framework.Assert;
import junit.framework.AssertionFailedError;
+import org.apache.openejb.test.TestFailureException;
+import org.apache.openejb.test.entity.bmp.BasicBmpHome;
+import org.apache.openejb.test.entity.bmp.BasicBmpObject;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
+import org.apache.openejb.test.stateful.BasicStatefulHome;
+import org.apache.openejb.test.stateful.BasicStatefulObject;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
+import org.apache.openejb.test.stateless.BasicStatelessHome;
+import org.apache.openejb.test.stateless.BasicStatelessObject;
-import javax.annotation.PreDestroy;
-import javax.sql.DataSource;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityManager;
import javax.ejb.EJBContext;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenContext;
-import javax.jms.MessageListener;
-import javax.jms.ConnectionFactory;
-import javax.jms.Message;
-import javax.jms.JMSException;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.QueueConnectionFactory;
import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.jms.Topic;
-import javax.jms.MessageProducer;
-import java.rmi.RemoteException;
+import javax.jms.TopicConnectionFactory;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
public class ContextLookupMdbPojoBean implements MessageListener {
- private MdbInvoker mdbInvoker;
+ private final MdbInvoker mdbInvoker;
public ContextLookupMdbPojoBean() {
try {
- ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
+ final ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
mdbInvoker = new MdbInvoker(connectionFactory, this);
} catch (Exception e) {
throw new EJBException(e);
}
}
- public void onMessage(Message message) {
+ public void ejbRemove() throws EJBException {
+
+ if (null != mdbInvoker) {
+ mdbInvoker.destroy();
+ }
+ }
+
+ @Override
+ public void onMessage(final Message message) {
try {
// System.out.println("\n" +
// "***************************************\n" +
@@ -85,10 +91,10 @@
public void lookupEntityBean() throws TestFailureException {
try {
try {
- BasicBmpHome home = (BasicBmpHome) getMessageDrivenContext().lookup("stateless/beanReferences/bmp_entity");
+ final BasicBmpHome home = (BasicBmpHome) getMessageDrivenContext().lookup("stateless/beanReferences/bmp_entity");
Assert.assertNotNull("The EJBHome looked up is null", home);
- BasicBmpObject object = home.createObject("Enc Bean");
+ final BasicBmpObject object = home.createObject("Enc Bean");
Assert.assertNotNull("The EJBObject is null", object);
} catch (Exception e) {
Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
@@ -101,10 +107,10 @@
public void lookupStatefulBean() throws TestFailureException {
try {
try {
- BasicStatefulHome home = (BasicStatefulHome) getMessageDrivenContext().lookup("stateless/beanReferences/stateful");
+ final BasicStatefulHome home = (BasicStatefulHome) getMessageDrivenContext().lookup("stateless/beanReferences/stateful");
Assert.assertNotNull("The EJBHome looked up is null", home);
- BasicStatefulObject object = home.createObject("Enc Bean");
+ final BasicStatefulObject object = home.createObject("Enc Bean");
Assert.assertNotNull("The EJBObject is null", object);
} catch (Exception e) {
Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
@@ -117,10 +123,10 @@
public void lookupStatelessBean() throws TestFailureException {
try {
try {
- BasicStatelessHome home = (BasicStatelessHome) getMessageDrivenContext().lookup("stateless/beanReferences/stateless");
+ final BasicStatelessHome home = (BasicStatelessHome) getMessageDrivenContext().lookup("stateless/beanReferences/stateless");
Assert.assertNotNull("The EJBHome looked up is null", home);
- BasicStatelessObject object = home.createObject();
+ final BasicStatelessObject object = home.createObject();
Assert.assertNotNull("The EJBObject is null", object);
} catch (Exception e) {
Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
@@ -130,54 +136,54 @@
}
}
- public void lookupStatelessBusinessLocal() throws TestFailureException{
- try{
- try{
- BasicStatelessBusinessLocal object = (BasicStatelessBusinessLocal) getMessageDrivenContext().lookup("stateless/beanReferences/stateless-business-local");
- Assert.assertNotNull("The EJB BusinessLocal is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ public void lookupStatelessBusinessLocal() throws TestFailureException {
+ try {
+ try {
+ final BasicStatelessBusinessLocal object = (BasicStatelessBusinessLocal) getMessageDrivenContext().lookup("stateless/beanReferences/stateless-business-local");
+ Assert.assertNotNull("The EJB BusinessLocal is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatelessBusinessRemote() throws TestFailureException{
- try{
- try{
- BasicStatelessBusinessRemote object = (BasicStatelessBusinessRemote) getMessageDrivenContext().lookup("stateless/beanReferences/stateless-business-remote");
- Assert.assertNotNull("The EJB BusinessRemote is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ public void lookupStatelessBusinessRemote() throws TestFailureException {
+ try {
+ try {
+ final BasicStatelessBusinessRemote object = (BasicStatelessBusinessRemote) getMessageDrivenContext().lookup("stateless/beanReferences/stateless-business-remote");
+ Assert.assertNotNull("The EJB BusinessRemote is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessLocal() throws TestFailureException{
- try{
- try{
- BasicStatefulBusinessLocal object = (BasicStatefulBusinessLocal) getMessageDrivenContext().lookup("stateless/beanReferences/stateful-business-local");
- Assert.assertNotNull("The EJB BusinessLocal is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ public void lookupStatefulBusinessLocal() throws TestFailureException {
+ try {
+ try {
+ final BasicStatefulBusinessLocal object = (BasicStatefulBusinessLocal) getMessageDrivenContext().lookup("stateless/beanReferences/stateful-business-local");
+ Assert.assertNotNull("The EJB BusinessLocal is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessRemote() throws TestFailureException{
- try{
- try{
- BasicStatefulBusinessRemote object = (BasicStatefulBusinessRemote) getMessageDrivenContext().lookup("stateless/beanReferences/stateful-business-remote");
- Assert.assertNotNull("The EJB BusinessRemote is null", object );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ public void lookupStatefulBusinessRemote() throws TestFailureException {
+ try {
+ try {
+ final BasicStatefulBusinessRemote object = (BasicStatefulBusinessRemote) getMessageDrivenContext().lookup("stateless/beanReferences/stateful-business-remote");
+ Assert.assertNotNull("The EJB BusinessRemote is null", object);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
@@ -186,8 +192,8 @@
public void lookupStringEntry() throws TestFailureException {
try {
try {
- String expected = new String("1");
- String actual = (String) getMessageDrivenContext().lookup("stateless/references/String");
+ final String expected = "1";
+ final String actual = (String) getMessageDrivenContext().lookup("stateless/references/String");
Assert.assertNotNull("The String looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -203,8 +209,8 @@
public void lookupDoubleEntry() throws TestFailureException {
try {
try {
- Double expected = new Double(1.0D);
- Double actual = (Double) getMessageDrivenContext().lookup("stateless/references/Double");
+ final Double expected = 1.0D;
+ final Double actual = (Double) getMessageDrivenContext().lookup("stateless/references/Double");
Assert.assertNotNull("The Double looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -220,8 +226,8 @@
public void lookupLongEntry() throws TestFailureException {
try {
try {
- Long expected = new Long(1L);
- Long actual = (Long) getMessageDrivenContext().lookup("stateless/references/Long");
+ final Long expected = 1L;
+ final Long actual = (Long) getMessageDrivenContext().lookup("stateless/references/Long");
Assert.assertNotNull("The Long looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -237,8 +243,8 @@
public void lookupFloatEntry() throws TestFailureException {
try {
try {
- Float expected = new Float(1.0F);
- Float actual = (Float) getMessageDrivenContext().lookup("stateless/references/Float");
+ final Float expected = 1.0F;
+ final Float actual = (Float) getMessageDrivenContext().lookup("stateless/references/Float");
Assert.assertNotNull("The Float looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -254,8 +260,8 @@
public void lookupIntegerEntry() throws TestFailureException {
try {
try {
- Integer expected = new Integer(1);
- Integer actual = (Integer) getMessageDrivenContext().lookup("stateless/references/Integer");
+ final Integer expected = 1;
+ final Integer actual = (Integer) getMessageDrivenContext().lookup("stateless/references/Integer");
Assert.assertNotNull("The Integer looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -271,8 +277,8 @@
public void lookupShortEntry() throws TestFailureException {
try {
try {
- Short expected = new Short((short) 1);
- Short actual = (Short) getMessageDrivenContext().lookup("stateless/references/Short");
+ final Short expected = (short) 1;
+ final Short actual = (Short) getMessageDrivenContext().lookup("stateless/references/Short");
Assert.assertNotNull("The Short looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -288,8 +294,8 @@
public void lookupBooleanEntry() throws TestFailureException {
try {
try {
- Boolean expected = new Boolean(true);
- Boolean actual = (Boolean) getMessageDrivenContext().lookup("stateless/references/Boolean");
+ final Boolean expected = true;
+ final Boolean actual = (Boolean) getMessageDrivenContext().lookup("stateless/references/Boolean");
Assert.assertNotNull("The Boolean looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -305,8 +311,8 @@
public void lookupByteEntry() throws TestFailureException {
try {
try {
- Byte expected = new Byte((byte) 1);
- Byte actual = (Byte) getMessageDrivenContext().lookup("stateless/references/Byte");
+ final Byte expected = (byte) 1;
+ final Byte actual = (Byte) getMessageDrivenContext().lookup("stateless/references/Byte");
Assert.assertNotNull("The Byte looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -322,8 +328,8 @@
public void lookupCharacterEntry() throws TestFailureException {
try {
try {
- Character expected = new Character('D');
- Character actual = (Character) getMessageDrivenContext().lookup("stateless/references/Character");
+ final Character expected = 'D';
+ final Character actual = (Character) getMessageDrivenContext().lookup("stateless/references/Character");
Assert.assertNotNull("The Character looked up is null", actual);
Assert.assertEquals(expected, actual);
@@ -339,7 +345,7 @@
public void lookupResource() throws TestFailureException {
try {
try {
- Object obj = getMessageDrivenContext().lookup("datasource");
+ final Object obj = getMessageDrivenContext().lookup("datasource");
Assert.assertNotNull("The DataSource is null", obj);
Assert.assertTrue("Not an instance of DataSource", obj instanceof DataSource);
} catch (Exception e) {
@@ -350,97 +356,97 @@
}
}
- public void lookupJMSConnectionFactory() throws TestFailureException{
- try{
- try{
+ public void lookupJMSConnectionFactory() throws TestFailureException {
+ try {
+ try {
Object obj = getMessageDrivenContext().lookup("jms");
Assert.assertNotNull("The JMS ConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of ConnectionFactory", obj instanceof ConnectionFactory);
- ConnectionFactory connectionFactory = (ConnectionFactory) obj;
+ final ConnectionFactory connectionFactory = (ConnectionFactory) obj;
testJmsConnection(connectionFactory.createConnection());
obj = getMessageDrivenContext().lookup("TopicCF");
Assert.assertNotNull("The JMS TopicConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of TopicConnectionFactory", obj instanceof TopicConnectionFactory);
- TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) obj;
+ final TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) obj;
testJmsConnection(topicConnectionFactory.createConnection());
obj = getMessageDrivenContext().lookup("QueueCF");
Assert.assertNotNull("The JMS QueueConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of QueueConnectionFactory", obj instanceof QueueConnectionFactory);
- QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) obj;
+ final QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) obj;
testJmsConnection(queueConnectionFactory.createConnection());
- } catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- private void testJmsConnection(Connection connection) throws JMSException {
- Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
- Topic topic = session.createTopic("test");
- MessageProducer producer = session.createProducer(topic);
+ private void testJmsConnection(final Connection connection) throws JMSException {
+ final Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+ final Topic topic = session.createTopic("test");
+ final MessageProducer producer = session.createProducer(topic);
producer.send(session.createMessage());
producer.close();
session.close();
connection.close();
}
- public void lookupPersistenceUnit() throws TestFailureException{
- try{
- try{
- InitialContext ctx = new InitialContext();
+ public void lookupPersistenceUnit() throws TestFailureException {
+ try {
+ try {
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
- EntityManagerFactory emf = (EntityManagerFactory)ctx.lookup("java:comp/env/persistence/TestUnit");
- Assert.assertNotNull("The EntityManagerFactory is null", emf );
+ final EntityManagerFactory emf = (EntityManagerFactory) ctx.lookup("java:comp/env/persistence/TestUnit");
+ Assert.assertNotNull("The EntityManagerFactory is null", emf);
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupMessageDrivenContext() throws TestFailureException{
- try{
- try{
- InitialContext ctx = new InitialContext();
+ public void lookupMessageDrivenContext() throws TestFailureException {
+ try {
+ try {
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
// lookup in enc
- MessageDrivenContext sctx = (MessageDrivenContext)ctx.lookup("java:comp/env/mdbcontext");
- Assert.assertNotNull("The MessageDrivenContext got from java:comp/env/mdbcontext is null", sctx );
+ final MessageDrivenContext sctx = (MessageDrivenContext) ctx.lookup("java:comp/env/mdbcontext");
+ Assert.assertNotNull("The MessageDrivenContext got from java:comp/env/mdbcontext is null", sctx);
// lookup using global name
- EJBContext ejbCtx = (EJBContext)ctx.lookup("java:comp/EJBContext");
- Assert.assertNotNull("The MessageDrivenContext got from java:comp/EJBContext is null ", ejbCtx );
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ final EJBContext ejbCtx = (EJBContext) ctx.lookup("java:comp/EJBContext");
+ Assert.assertNotNull("The MessageDrivenContext got from java:comp/EJBContext is null ", ejbCtx);
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupPersistenceContext() throws TestFailureException{
- try{
- try{
- InitialContext ctx = new InitialContext();
+ public void lookupPersistenceContext() throws TestFailureException {
+ try {
+ try {
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
- EntityManager em = (EntityManager)ctx.lookup("java:comp/env/persistence/TestContext");
+ final EntityManager em = (EntityManager) ctx.lookup("java:comp/env/persistence/TestContext");
Assert.assertNotNull("The EntityManager is null", em);
// call a do nothing method to assure entity manager actually exists
em.getFlushMode();
- } catch (Exception e){
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ } catch (Exception e) {
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
@@ -449,7 +455,7 @@
* Set the associated message driven context. The container calls this method
* after the instance creation.
*/
- public MessageDrivenContext getMessageDrivenContext() throws EJBException, RemoteException {
+ public MessageDrivenContext getMessageDrivenContext() throws EJBException {
MessageDrivenContext ejbContext = null;
try {
ejbContext = (MessageDrivenContext) new InitialContext().lookup("java:comp/EJBContext");
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/EncMdbBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/EncMdbBean.java
index e5d2608..4ac2e8e 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/EncMdbBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/EncMdbBean.java
@@ -55,17 +55,19 @@
private MessageDrivenContext mdbContext = null;
private MdbInvoker mdbInvoker;
- public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
+ @Override
+ public void setMessageDrivenContext(final MessageDrivenContext ctx) throws EJBException {
this.mdbContext = ctx;
try {
- ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
+ final ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
mdbInvoker = new MdbInvoker(connectionFactory, this);
} catch (Exception e) {
throw new EJBException(e);
}
}
- public void onMessage(Message message) {
+ @Override
+ public void onMessage(final Message message) {
try {
// System.out.println("\n" +
// "***************************************\n" +
@@ -82,16 +84,17 @@
}
}
+ @Override
public void lookupEntityBean() throws TestFailureException {
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- BasicBmpHome home = (BasicBmpHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/bmp_entity"), BasicBmpHome.class );
+ final BasicBmpHome home = (BasicBmpHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/bmp_entity"), BasicBmpHome.class );
Assert.assertNotNull("The EJBHome looked up is null",home);
- BasicBmpObject object = home.createObject("Enc Bean");
+ final BasicBmpObject object = home.createObject("Enc Bean");
Assert.assertNotNull("The EJBObject is null", object );
} catch (Exception e){
Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
@@ -101,16 +104,17 @@
}
}
+ @Override
public void lookupStatefulBean() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- BasicStatefulHome home = (BasicStatefulHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateful"), BasicStatefulHome.class );
+ final BasicStatefulHome home = (BasicStatefulHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateful"), BasicStatefulHome.class );
Assert.assertNotNull("The EJBHome looked up is null",home);
- BasicStatefulObject object = home.createObject("Enc Bean");
+ final BasicStatefulObject object = home.createObject("Enc Bean");
Assert.assertNotNull("The EJBObject is null", object );
} catch (Exception e){
Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
@@ -120,16 +124,17 @@
}
}
+ @Override
public void lookupStatelessBean() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- BasicStatelessHome home = (BasicStatelessHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateless"), BasicStatelessHome.class );
+ final BasicStatelessHome home = (BasicStatelessHome) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateless"), BasicStatelessHome.class );
Assert.assertNotNull("The EJBHome looked up is null",home);
- BasicStatelessObject object = home.createObject();
+ final BasicStatelessObject object = home.createObject();
Assert.assertNotNull("The EJBObject is null", object );
} catch (Exception e){
Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
@@ -139,14 +144,15 @@
}
}
+ @Override
public void lookupStatelessBusinessLocal() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Object o = ctx.lookup("java:comp/env/stateless/beanReferences/stateless-business-local");
- BasicStatelessBusinessLocal object = (BasicStatelessBusinessLocal) o;
+ final Object o = ctx.lookup("java:comp/env/stateless/beanReferences/stateless-business-local");
+ final BasicStatelessBusinessLocal object = (BasicStatelessBusinessLocal) o;
Assert.assertNotNull("The EJB BusinessLocal is null", object );
} catch (Exception e){
e.printStackTrace();
@@ -157,13 +163,14 @@
}
}
+ @Override
public void lookupStatelessBusinessRemote() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- BasicStatelessBusinessRemote object = (BasicStatelessBusinessRemote) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateless-business-remote"), BasicStatelessBusinessRemote.class );
+ final BasicStatelessBusinessRemote object = (BasicStatelessBusinessRemote) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateless-business-remote"), BasicStatelessBusinessRemote.class );
Assert.assertNotNull("The EJB BusinessRemote is null", object );
} catch (Exception e){
Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
@@ -173,13 +180,14 @@
}
}
+ @Override
public void lookupStatefulBusinessLocal() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- BasicStatefulBusinessLocal object = (BasicStatefulBusinessLocal) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateful-business-local"), BasicStatefulBusinessLocal.class );
+ final BasicStatefulBusinessLocal object = (BasicStatefulBusinessLocal) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateful-business-local"), BasicStatefulBusinessLocal.class );
Assert.assertNotNull("The EJB BusinessLocal is null", object );
} catch (Exception e){
Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
@@ -189,13 +197,14 @@
}
}
+ @Override
public void lookupStatefulBusinessRemote() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- BasicStatefulBusinessRemote object = (BasicStatefulBusinessRemote) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateful-business-remote"), BasicStatefulBusinessRemote.class );
+ final BasicStatefulBusinessRemote object = (BasicStatefulBusinessRemote) javax.rmi.PortableRemoteObject.narrow( ctx.lookup("java:comp/env/stateless/beanReferences/stateful-business-remote"), BasicStatefulBusinessRemote.class );
Assert.assertNotNull("The EJB BusinessRemote is null", object );
} catch (Exception e){
Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
@@ -205,14 +214,15 @@
}
}
+ @Override
public void lookupStringEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- String expected = new String("1");
- String actual = (String)ctx.lookup("java:comp/env/stateless/references/String");
+ final String expected = "1";
+ final String actual = (String)ctx.lookup("java:comp/env/stateless/references/String");
Assert.assertNotNull("The String looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -225,14 +235,15 @@
}
}
+ @Override
public void lookupDoubleEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Double expected = new Double(1.0D);
- Double actual = (Double)ctx.lookup("java:comp/env/stateless/references/Double");
+ final Double expected = 1.0D;
+ final Double actual = (Double)ctx.lookup("java:comp/env/stateless/references/Double");
Assert.assertNotNull("The Double looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -245,14 +256,15 @@
}
}
+ @Override
public void lookupLongEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Long expected = new Long(1L);
- Long actual = (Long)ctx.lookup("java:comp/env/stateless/references/Long");
+ final Long expected = 1L;
+ final Long actual = (Long)ctx.lookup("java:comp/env/stateless/references/Long");
Assert.assertNotNull("The Long looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -265,14 +277,15 @@
}
}
+ @Override
public void lookupFloatEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Float expected = new Float(1.0F);
- Float actual = (Float)ctx.lookup("java:comp/env/stateless/references/Float");
+ final Float expected = 1.0F;
+ final Float actual = (Float)ctx.lookup("java:comp/env/stateless/references/Float");
Assert.assertNotNull("The Float looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -285,14 +298,15 @@
}
}
+ @Override
public void lookupIntegerEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Integer expected = new Integer(1);
- Integer actual = (Integer)ctx.lookup("java:comp/env/stateless/references/Integer");
+ final Integer expected = 1;
+ final Integer actual = (Integer)ctx.lookup("java:comp/env/stateless/references/Integer");
Assert.assertNotNull("The Integer looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -305,14 +319,15 @@
}
}
+ @Override
public void lookupShortEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Short expected = new Short((short)1);
- Short actual = (Short)ctx.lookup("java:comp/env/stateless/references/Short");
+ final Short expected = (short) 1;
+ final Short actual = (Short)ctx.lookup("java:comp/env/stateless/references/Short");
Assert.assertNotNull("The Short looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -325,14 +340,15 @@
}
}
+ @Override
public void lookupBooleanEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Boolean expected = new Boolean(true);
- Boolean actual = (Boolean)ctx.lookup("java:comp/env/stateless/references/Boolean");
+ final Boolean expected = true;
+ final Boolean actual = (Boolean)ctx.lookup("java:comp/env/stateless/references/Boolean");
Assert.assertNotNull("The Boolean looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -345,14 +361,15 @@
}
}
+ @Override
public void lookupByteEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Byte expected = new Byte((byte)1);
- Byte actual = (Byte)ctx.lookup("java:comp/env/stateless/references/Byte");
+ final Byte expected = (byte) 1;
+ final Byte actual = (Byte)ctx.lookup("java:comp/env/stateless/references/Byte");
Assert.assertNotNull("The Byte looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -365,14 +382,15 @@
}
}
+ @Override
public void lookupCharacterEntry() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx );
- Character expected = new Character('D');
- Character actual = (Character)ctx.lookup("java:comp/env/stateless/references/Character");
+ final Character expected = 'D';
+ final Character actual = (Character)ctx.lookup("java:comp/env/stateless/references/Character");
Assert.assertNotNull("The Character looked up is null", actual );
Assert.assertEquals(expected, actual );
@@ -385,12 +403,13 @@
}
}
+ @Override
public void lookupResource() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
- Object obj = ctx.lookup("java:comp/env/datasource");
+ final Object obj = ctx.lookup("java:comp/env/datasource");
Assert.assertNotNull("The DataSource is null", obj);
Assert.assertTrue("Not an instance of DataSource", obj instanceof DataSource);
} catch (Exception e){
@@ -401,27 +420,28 @@
}
}
+ @Override
public void lookupJMSConnectionFactory() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
Object obj = ctx.lookup("java:comp/env/jms");
Assert.assertNotNull("The JMS ConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of ConnectionFactory", obj instanceof ConnectionFactory);
- ConnectionFactory connectionFactory = (ConnectionFactory) obj;
+ final ConnectionFactory connectionFactory = (ConnectionFactory) obj;
testJmsConnection(connectionFactory.createConnection());
obj = ctx.lookup("java:comp/env/TopicCF");
Assert.assertNotNull("The JMS TopicConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of TopicConnectionFactory", obj instanceof TopicConnectionFactory);
- TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) obj;
+ final TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) obj;
testJmsConnection(topicConnectionFactory.createConnection());
obj = ctx.lookup("java:comp/env/QueueCF");
Assert.assertNotNull("The JMS QueueConnectionFactory is null", obj);
Assert.assertTrue("Not an instance of QueueConnectionFactory", obj instanceof QueueConnectionFactory);
- QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) obj;
+ final QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) obj;
testJmsConnection(queueConnectionFactory.createConnection());
} catch (Exception e){
e.printStackTrace();
@@ -432,22 +452,23 @@
}
}
- private void testJmsConnection(javax.jms.Connection connection) throws JMSException {
- Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
- Topic topic = session.createTopic("test");
- MessageProducer producer = session.createProducer(topic);
+ private void testJmsConnection(final javax.jms.Connection connection) throws JMSException {
+ final Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+ final Topic topic = session.createTopic("test");
+ final MessageProducer producer = session.createProducer(topic);
producer.send(session.createMessage());
producer.close();
session.close();
connection.close();
}
+ @Override
public void lookupPersistenceUnit() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
- EntityManagerFactory emf = (EntityManagerFactory)ctx.lookup("java:comp/env/persistence/TestUnit");
+ final EntityManagerFactory emf = (EntityManagerFactory)ctx.lookup("java:comp/env/persistence/TestUnit");
Assert.assertNotNull("The EntityManagerFactory is null", emf );
} catch (Exception e){
@@ -458,12 +479,13 @@
}
}
+ @Override
public void lookupPersistenceContext() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
- EntityManager em = (EntityManager)ctx.lookup("java:comp/env/persistence/TestContext");
+ final EntityManager em = (EntityManager)ctx.lookup("java:comp/env/persistence/TestContext");
Assert.assertNotNull("The EntityManager is null", em);
// call a do nothing method to assure entity manager actually exists
@@ -476,18 +498,19 @@
}
}
+ @Override
public void lookupMessageDrivenContext() throws TestFailureException{
try{
try{
- InitialContext ctx = new InitialContext();
+ final InitialContext ctx = new InitialContext();
Assert.assertNotNull("The InitialContext is null", ctx);
// lookup in enc
- MessageDrivenContext messageDrivenContext = (MessageDrivenContext)ctx.lookup("java:comp/env/mdbcontext");
+ final MessageDrivenContext messageDrivenContext = (MessageDrivenContext)ctx.lookup("java:comp/env/mdbcontext");
Assert.assertNotNull("The SessionContext got from java:comp/env/mdbcontext is null", messageDrivenContext );
// lookup using global name
- EJBContext ejbCtx = (EJBContext)ctx.lookup("java:comp/EJBContext");
+ final EJBContext ejbCtx = (EJBContext)ctx.lookup("java:comp/EJBContext");
Assert.assertNotNull("The SessionContext got from java:comp/EJBContext is null ", ejbCtx );
// verify context was set via legacy set method
@@ -504,6 +527,11 @@
public void ejbCreate() throws javax.ejb.CreateException{
}
+ @Override
public void ejbRemove() throws EJBException {
+
+ if(null != mdbInvoker){
+ mdbInvoker.destroy();
+ }
}
}
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/FieldInjectionMdbBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/FieldInjectionMdbBean.java
index c65e0f5..46fc417 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/FieldInjectionMdbBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/FieldInjectionMdbBean.java
@@ -17,36 +17,34 @@
*/
package org.apache.openejb.test.mdb;
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
+import org.apache.openejb.test.TestFailureException;
import org.apache.openejb.test.entity.bmp.BasicBmpHome;
-import org.apache.openejb.test.stateful.BasicStatefulHome;
import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
-import org.apache.openejb.test.stateless.BasicStatelessHome;
+import org.apache.openejb.test.stateful.BasicStatefulHome;
import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
-import org.apache.openejb.test.TestFailureException;
+import org.apache.openejb.test.stateless.BasicStatelessHome;
-import javax.annotation.PreDestroy;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
-import javax.sql.DataSource;
import javax.jms.ConnectionFactory;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.TopicConnectionFactory;
import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.jms.Topic;
-import javax.jms.MessageProducer;
-import javax.jms.MessageListener;
-import javax.jms.Message;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityManager;
+import javax.jms.TopicConnectionFactory;
import javax.naming.InitialContext;
-
-import junit.framework.Assert;
-import junit.framework.AssertionFailedError;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
public class FieldInjectionMdbBean implements EncMdbObject, MessageDrivenBean, MessageListener {
private MessageDrivenContext ejbContext;
@@ -79,17 +77,19 @@
private MessageDrivenContext mdbContext = null;
private MdbInvoker mdbInvoker;
- public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
+ @Override
+ public void setMessageDrivenContext(final MessageDrivenContext ctx) throws EJBException {
this.mdbContext = ctx;
try {
- ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
+ final ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
mdbInvoker = new MdbInvoker(connectionFactory, this);
} catch (Exception e) {
throw new EJBException(e);
}
}
- public void onMessage(Message message) {
+ @Override
+ public void onMessage(final Message message) {
try {
// System.out.println("\n" +
// "***************************************\n" +
@@ -109,6 +109,7 @@
public void ejbCreate() throws CreateException {
}
+ @Override
public void lookupEntityBean() throws TestFailureException {
try {
Assert.assertNotNull("The EJBObject is null", bmpHome);
@@ -117,6 +118,7 @@
}
}
+ @Override
public void lookupStatefulBean() throws TestFailureException {
try {
Assert.assertNotNull("The EJBObject is null", statefulHome);
@@ -125,6 +127,7 @@
}
}
+ @Override
public void lookupStatelessBean() throws TestFailureException {
try {
Assert.assertNotNull("The EJBObject is null", statelessHome);
@@ -133,41 +136,46 @@
}
}
- public void lookupStatelessBusinessLocal() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessLocal is null", statelessBusinessLocal );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatelessBusinessLocal() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessLocal is null", statelessBusinessLocal);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatelessBusinessRemote() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessRemote is null", statelessBusinessRemote );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatelessBusinessRemote() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessRemote is null", statelessBusinessRemote);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessLocal() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessLocal is null", statefulBusinessLocal );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatefulBusinessLocal() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessLocal is null", statefulBusinessLocal);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessRemote() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessRemote is null", statefulBusinessRemote );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatefulBusinessRemote() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessRemote is null", statefulBusinessRemote);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
+ @Override
public void lookupStringEntry() throws TestFailureException {
try {
- String expected = new String("1");
+ final String expected = "1";
Assert.assertNotNull("The String looked up is null", striing);
Assert.assertEquals(expected, striing);
} catch (AssertionFailedError afe) {
@@ -175,9 +183,10 @@
}
}
+ @Override
public void lookupDoubleEntry() throws TestFailureException {
try {
- Double expected = new Double(1.0D);
+ final Double expected = 1.0D;
Assert.assertNotNull("The Double looked up is null", doouble);
Assert.assertEquals(expected, doouble);
@@ -187,9 +196,10 @@
}
}
+ @Override
public void lookupLongEntry() throws TestFailureException {
try {
- Long expected = new Long(1L);
+ final Long expected = 1L;
Assert.assertNotNull("The Long looked up is null", loong);
Assert.assertEquals(expected, loong);
@@ -198,9 +208,10 @@
}
}
+ @Override
public void lookupFloatEntry() throws TestFailureException {
try {
- Float expected = new Float(1.0F);
+ final Float expected = 1.0F;
Assert.assertNotNull("The Float looked up is null", flooat);
Assert.assertEquals(expected, flooat);
@@ -209,9 +220,10 @@
}
}
+ @Override
public void lookupIntegerEntry() throws TestFailureException {
try {
- Integer expected = new Integer(1);
+ final Integer expected = 1;
Assert.assertNotNull("The Integer looked up is null", inteeger);
Assert.assertEquals(expected, inteeger);
@@ -221,9 +233,10 @@
}
}
+ @Override
public void lookupShortEntry() throws TestFailureException {
try {
- Short expected = new Short((short) 1);
+ final Short expected = (short) 1;
Assert.assertNotNull("The Short looked up is null", shoort);
Assert.assertEquals(expected, shoort);
@@ -232,9 +245,10 @@
}
}
+ @Override
public void lookupBooleanEntry() throws TestFailureException {
try {
- Boolean expected = new Boolean(true);
+ final Boolean expected = true;
Assert.assertNotNull("The Boolean looked up is null", booolean);
Assert.assertEquals(expected, booolean);
@@ -243,9 +257,10 @@
}
}
+ @Override
public void lookupByteEntry() throws TestFailureException {
try {
- Byte expected = new Byte((byte) 1);
+ final Byte expected = (byte) 1;
Assert.assertNotNull("The Byte looked up is null", byyte);
Assert.assertEquals(expected, byyte);
@@ -254,9 +269,10 @@
}
}
+ @Override
public void lookupCharacterEntry() throws TestFailureException {
try {
- Character expected = new Character('D');
+ final Character expected = 'D';
Assert.assertNotNull("The Character looked up is null", chaaracter);
Assert.assertEquals(expected, chaaracter);
@@ -265,6 +281,7 @@
}
}
+ @Override
public void lookupResource() throws TestFailureException {
try {
Assert.assertNotNull("The DataSource is null", daataSource);
@@ -273,31 +290,33 @@
}
}
- public void lookupJMSConnectionFactory() throws TestFailureException{
- try{
- try{
+ @Override
+ public void lookupJMSConnectionFactory() throws TestFailureException {
+ try {
+ try {
testJmsConnection(coonnectionFactory.createConnection());
testJmsConnection(queueCoonnectionFactory.createConnection());
testJmsConnection(topicCoonnectionFactory.createConnection());
- } catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- private void testJmsConnection(javax.jms.Connection connection) throws JMSException {
- Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
- Topic topic = session.createTopic("test");
- MessageProducer producer = session.createProducer(topic);
+ private void testJmsConnection(final javax.jms.Connection connection) throws JMSException {
+ final Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+ final Topic topic = session.createTopic("test");
+ final MessageProducer producer = session.createProducer(topic);
producer.send(session.createMessage());
producer.close();
session.close();
connection.close();
}
+ @Override
public void lookupPersistenceUnit() throws TestFailureException {
try {
Assert.assertNotNull("The EntityManagerFactory is null", emf);
@@ -306,6 +325,7 @@
}
}
+ @Override
public void lookupPersistenceContext() throws TestFailureException {
try {
Assert.assertNotNull("The EntityManager is null", em);
@@ -321,6 +341,7 @@
}
}
+ @Override
public void lookupMessageDrivenContext() throws TestFailureException {
try {
Assert.assertNotNull("The MessageDrivenContext is null", ejbContext);
@@ -330,6 +351,11 @@
}
+ @Override
public void ejbRemove() throws EJBException {
+
+ if (null != mdbInvoker) {
+ mdbInvoker.destroy();
+ }
}
}
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/InterceptorMdbBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/InterceptorMdbBean.java
index 6496332..37f1d31 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/InterceptorMdbBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/InterceptorMdbBean.java
@@ -18,8 +18,11 @@
package org.apache.openejb.test.mdb;
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
+import org.apache.openejb.test.TestFailureException;
+
import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJBException;
@@ -34,19 +37,12 @@
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
-import javax.jms.MessageProducer;
import javax.jms.Session;
-import javax.naming.InitialContext;
-import junit.framework.Assert;
-import junit.framework.AssertionFailedError;
-
-import org.apache.openejb.test.TestFailureException;
-
-@Interceptors ({MdbInterceptor.class})
+@Interceptors({MdbInterceptor.class})
@MessageDriven(activationConfig = {
- @ActivationConfigProperty(propertyName="destinationType", propertyValue = "javax.jms.Queue"),
- @ActivationConfigProperty(propertyName="destination", propertyValue = "InterceptorMdbBean")})
+ @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
+ @ActivationConfigProperty(propertyName = "destination", propertyValue = "InterceptorMdbBean")})
public class InterceptorMdbBean implements MessageListener, MessageDrivenBean {
private boolean classLevelBusinessMethodInterception = false;
@@ -57,17 +53,18 @@
private Session session;
private Connection connection;
protected MdbInvoker mdbInvoker;
- @Resource(name="jms", type=javax.jms.QueueConnectionFactory.class)
+ @Resource(name = "jms", type = javax.jms.QueueConnectionFactory.class)
private ConnectionFactory connectionFactory;
- public void onMessage(Message msg) {
+ @Override
+ public void onMessage(final Message msg) {
try {
classLevelBusinessMethodInterception = msg.getBooleanProperty("ClassLevelBusinessMethodInterception");
methodLevelBusinessMethodInterception = msg.getBooleanProperty("MethodLevelBusinessMethodInterception");
try {
msg.acknowledge();
} catch (JMSException e) {
- e.printStackTrace();
+ e.printStackTrace();
}
mdbInvoker.onMessage(msg);
} catch (Throwable e) {
@@ -76,23 +73,21 @@
}
@AroundInvoke
- public Object mdbInterceptor(InvocationContext ctx) throws Exception
- {
- Object[] objArr = ctx.getParameters();
- Message msg = (Message)objArr[0];
- msg.setBooleanProperty("MethodLevelBusinessMethodInterception",true);
- ctx.setParameters(objArr);
- return ctx.proceed();
+ public Object aroundInvoke(final InvocationContext ctx) throws Exception {
+ final Object[] objArr = ctx.getParameters();
+ final Message msg = (Message) objArr[0];
+ msg.setBooleanProperty("MethodLevelBusinessMethodInterception", true);
+ ctx.setParameters(objArr);
+ return ctx.proceed();
}
@PostConstruct
- public void ejbCreate() throws EJBException
- {
+ public void ejbCreate() throws EJBException {
methodLevelCreateMethodInterception = true;
}
- public void checkMethodLevelBusinessMethodInterception() throws TestFailureException{
+ public void checkMethodLevelBusinessMethodInterception() throws TestFailureException {
try {
Assert.assertTrue("Method Level Business Method Interception failed for Mdb", methodLevelBusinessMethodInterception);
} catch (AssertionFailedError afe) {
@@ -100,7 +95,7 @@
}
}
- public void checkMethodLevelCreateMethodInterception() throws TestFailureException{
+ public void checkMethodLevelCreateMethodInterception() throws TestFailureException {
try {
Assert.assertTrue("Method Level Business Method Interception failed for Mdb", methodLevelCreateMethodInterception);
} catch (AssertionFailedError afe) {
@@ -109,7 +104,7 @@
}
- public void checkClassLevelBusinessMethodInterception() throws TestFailureException{
+ public void checkClassLevelBusinessMethodInterception() throws TestFailureException {
try {
Assert.assertTrue("Class Level Business Method Interception failed for Mdb", classLevelBusinessMethodInterception);
} catch (AssertionFailedError afe) {
@@ -117,7 +112,7 @@
}
}
- public void checkClassLevelCreateMethodInterception() throws TestFailureException{
+ public void checkClassLevelCreateMethodInterception() throws TestFailureException {
try {
Assert.assertTrue("Class Level Business Method Interception failed for Mdb", classLevelCreateMethodInterception);
} catch (AssertionFailedError afe) {
@@ -126,12 +121,17 @@
}
+ @Override
public void ejbRemove() throws EJBException {
// TODO Auto-generated method stub
+ if (null != mdbInvoker) {
+ mdbInvoker.destroy();
+ }
}
- public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
+ @Override
+ public void setMessageDrivenContext(final MessageDrivenContext ctx) throws EJBException {
this.mdbContext = ctx;
try {
mdbInvoker = new MdbInvoker(connectionFactory, this);
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbInvoker.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbInvoker.java
index d63eebf..5638138 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbInvoker.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbInvoker.java
@@ -19,6 +19,7 @@
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
@@ -34,37 +35,56 @@
import java.util.TreeMap;
public class MdbInvoker implements MessageListener {
+
private final Map<String, Method> signatures = new TreeMap<String, Method>();
+ private final ConnectionFactory connectionFactory;
private final Object target;
+
private Connection connection;
private Session session;
- private ConnectionFactory connectionFactory;
+ private MessageProducer replyProducer = null;
- public MdbInvoker(ConnectionFactory connectionFactory, Object target) throws JMSException {
- this.target = target;
+ public MdbInvoker(final ConnectionFactory connectionFactory, final Object target) throws JMSException {
+
this.connectionFactory = connectionFactory;
- for (Method method : target.getClass().getMethods()) {
- String signature = MdbUtil.getSignature(method);
+ this.target = target;
+
+ for (final Method method : target.getClass().getMethods()) {
+ final String signature = MdbUtil.getSignature(method);
signatures.put(signature, method);
}
}
+ @Override
+ protected void finalize() throws Throwable {
+
+ try {
+ this.destroy();
+ } finally {
+ super.finalize();
+ }
+ }
+
public synchronized void destroy() {
+ MdbUtil.close(replyProducer);
MdbUtil.close(session);
session = null;
MdbUtil.close(connection);
connection = null;
}
- private synchronized Session getSession() throws JMSException{
- connection = connectionFactory.createConnection();
- connection.start();
+ private synchronized Session getSession() throws JMSException {
+
+ this.connection = this.connectionFactory.createConnection();
+ this.connection.start();
+
boolean isBeanManagedTransaction = false;
try {
new InitialContext().lookup("java:comp/UserTransaction");
isBeanManagedTransaction = true;
} catch (NamingException e) {
+ //Ignore - Not transacted
}
if (isBeanManagedTransaction) {
@@ -72,34 +92,43 @@
} else {
session = connection.createSession(true, Session.SESSION_TRANSACTED);
}
+
+ this.replyProducer = this.session.createProducer(null);
+ this.replyProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+
return session;
}
- public void onMessage(Message message) {
- if (!(message instanceof ObjectMessage)) return;
+ @Override
+ public void onMessage(final Message message) {
try {
- Session session = getSession();
+
+ if (!(message instanceof ObjectMessage)) {
+ return;
+ }
+
+ final Session session = getSession();
if (session == null) throw new IllegalStateException("Invoker has been destroyed");
if (message == null) throw new NullPointerException("request message is null");
if (!(message instanceof ObjectMessage)) throw new IllegalArgumentException("Expected a ObjectMessage request but got a " + message.getClass().getName());
- ObjectMessage responseMessage = (ObjectMessage) message;
- Serializable object = responseMessage.getObject();
+ final Serializable object = ((ObjectMessage) message).getObject();
if (object == null) throw new NullPointerException("object in ObjectMessage is null");
if (!(object instanceof Map)) {
- if (message instanceof ObjectMessage) throw new IllegalArgumentException("Expected a Map contained in the ObjectMessage request but got a " + object.getClass().getName());
+ if (message instanceof ObjectMessage)
+ throw new IllegalArgumentException("Expected a Map contained in the ObjectMessage request but got a " + object.getClass().getName());
}
- Map request = (Map) object;
+ final Map request = (Map) object;
- String signature = (String) request.get("method");
+ final String signature = (String) request.get("method");
if (signature == null) throw new NullPointerException("method property is null");
- Method method = signatures.get(signature);
+ final Method method = signatures.get(signature);
if (method == null) throw new IllegalArgumentException("no such method " + signature + "; known methods are " + signatures.keySet());
- Object[] args = (Object[]) request.get("args");
+ final Object[] args = (Object[]) request.get("args");
boolean exception = false;
- Object result = null;
+ Object result;
try {
result = method.invoke(target, args);
} catch (IllegalAccessException e) {
@@ -109,39 +138,35 @@
result = e.getCause();
if (result == null) result = e;
exception = true;
+ } catch (Exception e) {
+ result = e.getCause();
+ if (result == null) result = e;
+ exception = true;
}
- MessageProducer producer = null;
try {
// create response
- Map<String, Object> response = new TreeMap<String, Object>();
+ final Map<String, Object> response = new TreeMap<String, Object>();
if (exception) {
response.put("exception", "true");
}
response.put("return", result);
// create response message
- ObjectMessage resMessage = session.createObjectMessage();
- resMessage.setJMSCorrelationID(responseMessage.getJMSCorrelationID());
+ final ObjectMessage resMessage = session.createObjectMessage();
+ resMessage.setJMSCorrelationID(message.getJMSCorrelationID());
resMessage.setObject((Serializable) response);
// send response message
- producer = session.createProducer(responseMessage.getJMSReplyTo());
- producer.send(resMessage);
-// System.out.println("\n" +
-// "***************************************\n" +
-// "Sent response message: " + responseMessage + "\n" +
-// " response map: " + response + "\n" +
-// " to queue: " + message.getJMSReplyTo() + "\n" +
-// "***************************************\n\n");
+ replyProducer.send(message.getJMSReplyTo(), resMessage);
+
} catch (Exception e) {
e.printStackTrace();
- } finally {
- MdbUtil.close(producer);
- destroy();
}
} catch (Throwable e) {
e.printStackTrace();
+ } finally {
+ this.destroy();
}
}
}
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbProxy.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbProxy.java
index 54146dd..f50b740 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbProxy.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbProxy.java
@@ -17,63 +17,65 @@
*/
package org.apache.openejb.test.mdb;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
import javax.jms.Connection;
-import javax.jms.Session;
-import javax.jms.MessageProducer;
-import javax.jms.Destination;
+import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
-import javax.jms.ObjectMessage;
-import javax.jms.MessageConsumer;
+import javax.jms.Destination;
+import javax.jms.JMSException;
import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
import java.util.Map;
import java.util.TreeMap;
import java.util.UUID;
-import java.io.Serializable;
+import java.util.logging.Level;
+import java.util.logging.Logger;
public class MdbProxy {
@SuppressWarnings({"unchecked"})
- public static <T> T newProxyInstance(Class<T> type, ConnectionFactory connectionFactory, String requestQueueName) throws JMSException {
+ public static <T> T newProxyInstance(final Class<T> type, final ConnectionFactory connectionFactory, final String requestQueueName) throws JMSException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) classLoader = type.getClassLoader();
if (classLoader == null) classLoader = ClassLoader.getSystemClassLoader();
- InvocationHandler invocationHandler = new MdbInvocationHandler(connectionFactory, requestQueueName);
- Object proxy = Proxy.newProxyInstance(classLoader, new Class[]{type}, invocationHandler);
+ final InvocationHandler invocationHandler = new MdbInvocationHandler(connectionFactory, requestQueueName);
+ final Object proxy = Proxy.newProxyInstance(classLoader, new Class[]{type}, invocationHandler);
return (T) proxy;
}
@SuppressWarnings({"unchecked"})
- public static <T> T newProxyInstance(Class<T> type, ConnectionFactory connectionFactory, Destination requestQueue) throws JMSException {
+ public static <T> T newProxyInstance(final Class<T> type, final ConnectionFactory connectionFactory, final Destination requestQueue) throws JMSException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) classLoader = type.getClassLoader();
if (classLoader == null) classLoader = ClassLoader.getSystemClassLoader();
- InvocationHandler invocationHandler = new MdbInvocationHandler(connectionFactory, requestQueue);
- Object proxy = Proxy.newProxyInstance(classLoader, new Class[]{type}, invocationHandler);
+ final InvocationHandler invocationHandler = new MdbInvocationHandler(connectionFactory, requestQueue);
+ final Object proxy = Proxy.newProxyInstance(classLoader, new Class[]{type}, invocationHandler);
return (T) proxy;
}
- public static void destroyProxy(Object proxy) {
- InvocationHandler handler = Proxy.getInvocationHandler(proxy);
- if (handler instanceof MdbProxy) {
- MdbInvocationHandler mdbInvocationHandler = (MdbInvocationHandler) handler;
+ public static void destroyProxy(final Object proxy) {
+ final InvocationHandler handler = Proxy.getInvocationHandler(proxy);
+ if (MdbProxy.class.isInstance(handler)) {
+ final MdbInvocationHandler mdbInvocationHandler = (MdbInvocationHandler) handler;
mdbInvocationHandler.destroy();
}
}
private static class MdbInvocationHandler implements InvocationHandler {
- private static final int MAX_RESPONSE_WAIT = 30000;
+ private static final int MAX_RESPONSE_WAIT = Integer.parseInt(System.getProperty("max.response.wait", "45000"));
private Connection connection;
private Session session;
private MessageProducer producer;
- private Destination requestQueue;
+ private final Destination requestQueue;
- public MdbInvocationHandler(ConnectionFactory connectionFactory, String requestQueueName) throws JMSException {
+ public MdbInvocationHandler(final ConnectionFactory connectionFactory, final String requestQueueName) throws JMSException {
// open a connection
connection = connectionFactory.createConnection();
connection.start();
@@ -89,7 +91,7 @@
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
}
- public MdbInvocationHandler(ConnectionFactory connectionFactory, Destination requestQueue) throws JMSException {
+ public MdbInvocationHandler(final ConnectionFactory connectionFactory, final Destination requestQueue) throws JMSException {
this.requestQueue = requestQueue;
// open a connection
@@ -121,70 +123,69 @@
return producer;
}
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- Session session = getSession();
- if (session == null) throw new IllegalStateException("Proxy has been destroyed");
+ @Override
+ public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
+ final Session tempSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ if (tempSession == null) throw new IllegalStateException("Proxy has been destroyed");
// create request
- Map<String,Object> request = new TreeMap<String,Object>();
- String signature = MdbUtil.getSignature(method);
+ final Map<String, Object> request = new TreeMap<String, Object>();
+ final String signature = MdbUtil.getSignature(method);
request.put("method", signature);
request.put("args", args);
// create a new temp response queue and consumer
// this is very inefficient, but eliminates a whole class of errors
- Destination responseQueue = session.createTemporaryQueue();
+ final String correlationId = UUID.randomUUID().toString();
- // Create a messages
- ObjectMessage requestMessage = session.createObjectMessage();
- requestMessage.setJMSReplyTo(responseQueue);
- String correlationId = UUID.randomUUID().toString();
- requestMessage.setJMSCorrelationID(correlationId);
- requestMessage.setObject((Serializable) request);
-
+ //final Destination responseQueue = tempSession.createTemporaryQueue();
+ final Destination responseQueue = tempSession.createQueue(correlationId);
// create a producer and consumers used to send requests and receive response
MessageConsumer consumer = null;
try {
+
+ // Wait for a message
+ // Again this is quite inefficient
+ consumer = tempSession.createConsumer(responseQueue);
+
+ // Create a message
+ final ObjectMessage requestMessage = tempSession.createObjectMessage();
+ requestMessage.setJMSReplyTo(responseQueue);
+ requestMessage.setJMSCorrelationID(correlationId);
+ requestMessage.setObject((Serializable) request);
+
// Send the request
getProducer().send(requestMessage);
-// System.out.println("\n" + "***************************************\n" +
-// "Sent request message: " + requestMessage + "\n" +
-// " request map: " + request + "\n" +
-// " to queue: " + requestQueue + "\n" +
-// "***************************************\n\n");
-//
- // Wait for a message
- // Again this is quite inefficient
- consumer = session.createConsumer(responseQueue);
-
// wait for the message
- Message message = consumer.receive(MdbProxy.MdbInvocationHandler.MAX_RESPONSE_WAIT);
+ final Message message = consumer.receive(MdbProxy.MdbInvocationHandler.MAX_RESPONSE_WAIT);
// verify message
- if (message == null) throw new NullPointerException("Did not get a response withing " + MdbProxy.MdbInvocationHandler.MAX_RESPONSE_WAIT + "ms");
+ if (message == null) throw new NullPointerException("Did not get a response within " + MdbProxy.MdbInvocationHandler.MAX_RESPONSE_WAIT + "ms");
if (!correlationId.equals(message.getJMSCorrelationID())) {
throw new IllegalStateException("Received a response message with the wrong correlation id");
}
if (!(message instanceof ObjectMessage)) throw new IllegalArgumentException("Expected a ObjectMessage response but got a " + message.getClass().getName());
- ObjectMessage resMessage = (ObjectMessage) message;
- Serializable object = resMessage.getObject();
+ final ObjectMessage resMessage = (ObjectMessage) message;
+ final Serializable object = resMessage.getObject();
if (object == null) throw new NullPointerException("object in ObjectMessage is null");
if (!(object instanceof Map)) {
- if (message instanceof ObjectMessage) throw new IllegalArgumentException("Expected a Map contained in the ObjectMessage response but got a " + object.getClass().getName());
+ if (ObjectMessage.class.isInstance(message))
+ throw new IllegalArgumentException("Expected a Map contained in the ObjectMessage response but got a " + object.getClass().getName());
}
- Map response = (Map) object;
+ final Map response = (Map) object;
// process results
- boolean exception = response.containsKey("exception");
- Object returnValue = response.get("return");
+ final boolean exception = response.containsKey("exception");
+ final Object returnValue = response.get("return");
if (exception) {
throw (Throwable) returnValue;
}
return returnValue;
} finally {
MdbUtil.close(consumer);
+ MdbUtil.close(tempSession);
}
}
}
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbUtil.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbUtil.java
index 0e0a7e5..081771a 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbUtil.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/MdbUtil.java
@@ -17,19 +17,19 @@
*/
package org.apache.openejb.test.mdb;
-import javax.jms.MessageProducer;
-import javax.jms.JMSException;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
import javax.jms.Connection;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
import java.lang.reflect.Method;
public class MdbUtil {
- public static String getSignature(Method method){
- StringBuilder builder = new StringBuilder();
+
+ public static String getSignature(final Method method) {
+ final StringBuilder builder = new StringBuilder();
builder.append(method.getName()).append("(");
boolean first = true;
- for (Class<?> type : method.getParameterTypes()) {
+ for (final Class<?> type : method.getParameterTypes()) {
if (!first) {
builder.append(",");
}
@@ -40,38 +40,49 @@
return builder.toString();
}
- public static void close(MessageProducer closeable) {
+ public static void close(final MessageProducer closeable) {
if (closeable != null) {
try {
closeable.close();
- } catch (JMSException e) {
+ } catch (Throwable e) {
+ //Ignore
}
}
}
- public static void close(MessageConsumer closeable) {
+ public static void close(final MessageConsumer closeable) {
if (closeable != null) {
try {
closeable.close();
- } catch (JMSException e) {
+ } catch (Throwable e) {
+ //Ignore
}
}
}
- public static void close(Session closeable) {
+ public static void close(final Session closeable) {
if (closeable != null) {
try {
closeable.close();
- } catch (JMSException e) {
+ } catch (Throwable e) {
+ //Ignore
}
}
}
- public static void close(Connection closeable) {
+ public static void close(final Connection closeable) {
if (closeable != null) {
+
+ try {
+ closeable.stop();
+ } catch (Throwable e) {
+ //Ignore
+ }
+
try {
closeable.close();
- } catch (JMSException e) {
+ } catch (Throwable e) {
+ //Ignore
}
}
}
diff --git a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/SetterInjectionMdbBean.java b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/SetterInjectionMdbBean.java
index 87a5c04..e5823ab 100644
--- a/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/SetterInjectionMdbBean.java
+++ b/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/mdb/SetterInjectionMdbBean.java
@@ -17,7 +17,17 @@
*/
package org.apache.openejb.test.mdb;
-import javax.annotation.PreDestroy;
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
+import org.apache.openejb.test.TestFailureException;
+import org.apache.openejb.test.entity.bmp.BasicBmpHome;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
+import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
+import org.apache.openejb.test.stateful.BasicStatefulHome;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
+import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
+import org.apache.openejb.test.stateless.BasicStatelessHome;
+
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
@@ -36,17 +46,6 @@
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
-import junit.framework.Assert;
-import junit.framework.AssertionFailedError;
-import org.apache.openejb.test.TestFailureException;
-import org.apache.openejb.test.entity.bmp.BasicBmpHome;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessLocal;
-import org.apache.openejb.test.stateful.BasicStatefulBusinessRemote;
-import org.apache.openejb.test.stateful.BasicStatefulHome;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessLocal;
-import org.apache.openejb.test.stateless.BasicStatelessBusinessRemote;
-import org.apache.openejb.test.stateless.BasicStatelessHome;
-
public class SetterInjectionMdbBean implements EncMdbObject, MessageDrivenBean, MessageListener {
private MessageDrivenContext ejbContextField;
private BasicBmpHome bmpHomeField;
@@ -77,28 +76,25 @@
private MessageDrivenContext mdbContext = null;
private MdbInvoker mdbInvoker;
- public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
+ @Override
+ public void setMessageDrivenContext(final MessageDrivenContext ctx) throws EJBException {
this.mdbContext = ctx;
try {
- ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
+ final ConnectionFactory connectionFactory = (ConnectionFactory) new InitialContext().lookup("java:comp/env/jms");
mdbInvoker = new MdbInvoker(connectionFactory, this);
} catch (Exception e) {
throw new EJBException(e);
}
}
- public void onMessage(Message message) {
+ @Override
+ public void onMessage(final Message message) {
try {
// System.out.println("\n" +
// "***************************************\n" +
// "Got message: " + message + "\n" +
// "***************************************\n\n");
- try {
- message.acknowledge();
- } catch (JMSException e) {
- e.printStackTrace();
- }
- mdbInvoker.onMessage(message);
+ mdbInvoker.onMessage(message);
} catch (Throwable e) {
e.printStackTrace();
}
@@ -108,7 +104,7 @@
return statefulBusinessLocalField;
}
- public void setStatefulBusinessLocal(BasicStatefulBusinessLocal statefulBusinessLocal) {
+ public void setStatefulBusinessLocal(final BasicStatefulBusinessLocal statefulBusinessLocal) {
this.statefulBusinessLocalField = statefulBusinessLocal;
}
@@ -116,7 +112,7 @@
return statefulBusinessRemoteField;
}
- public void setStatefulBusinessRemote(BasicStatefulBusinessRemote statefulBusinessRemote) {
+ public void setStatefulBusinessRemote(final BasicStatefulBusinessRemote statefulBusinessRemote) {
this.statefulBusinessRemoteField = statefulBusinessRemote;
}
@@ -124,7 +120,7 @@
return statelessBusinessLocalField;
}
- public void setStatelessBusinessLocal(BasicStatelessBusinessLocal statelessBusinessLocal) {
+ public void setStatelessBusinessLocal(final BasicStatelessBusinessLocal statelessBusinessLocal) {
this.statelessBusinessLocalField = statelessBusinessLocal;
}
@@ -132,7 +128,7 @@
return statelessBusinessRemoteField;
}
- public void setStatelessBusinessRemote(BasicStatelessBusinessRemote statelessBusinessRemote) {
+ public void setStatelessBusinessRemote(final BasicStatelessBusinessRemote statelessBusinessRemote) {
this.statelessBusinessRemoteField = statelessBusinessRemote;
}
@@ -140,7 +136,7 @@
return bmpHomeField;
}
- public void setBmpHome(BasicBmpHome bmpHome) {
+ public void setBmpHome(final BasicBmpHome bmpHome) {
this.bmpHomeField = bmpHome;
}
@@ -148,7 +144,7 @@
return boooleanField;
}
- public void setBooolean(Boolean booolean) {
+ public void setBooolean(final Boolean booolean) {
this.boooleanField = booolean;
}
@@ -156,7 +152,7 @@
return byyteField;
}
- public void setByyte(Byte byyte) {
+ public void setByyte(final Byte byyte) {
this.byyteField = byyte;
}
@@ -164,7 +160,7 @@
return chaaracterField;
}
- public void setChaaracter(Character chaaracter) {
+ public void setChaaracter(final Character chaaracter) {
this.chaaracterField = chaaracter;
}
@@ -172,7 +168,7 @@
return daataSourceField;
}
- public void setDaataSource(DataSource daataSource) {
+ public void setDaataSource(final DataSource daataSource) {
this.daataSourceField = daataSource;
}
@@ -180,7 +176,7 @@
return coonnectionFactory;
}
- public void setCoonnectionFactory(ConnectionFactory coonnectionFactory) {
+ public void setCoonnectionFactory(final ConnectionFactory coonnectionFactory) {
this.coonnectionFactory = coonnectionFactory;
}
@@ -188,7 +184,7 @@
return queueCoonnectionFactory;
}
- public void setQueueCoonnectionFactory(QueueConnectionFactory queueCoonnectionFactory) {
+ public void setQueueCoonnectionFactory(final QueueConnectionFactory queueCoonnectionFactory) {
this.queueCoonnectionFactory = queueCoonnectionFactory;
}
@@ -196,7 +192,7 @@
return topicCoonnectionFactory;
}
- public void setTopicCoonnectionFactory(TopicConnectionFactory topicCoonnectionFactory) {
+ public void setTopicCoonnectionFactory(final TopicConnectionFactory topicCoonnectionFactory) {
this.topicCoonnectionFactory = topicCoonnectionFactory;
}
@@ -204,7 +200,7 @@
return dooubleField;
}
- public void setDoouble(Double doouble) {
+ public void setDoouble(final Double doouble) {
this.dooubleField = doouble;
}
@@ -212,7 +208,7 @@
return eemField;
}
- public void setEem(EntityManager eem) {
+ public void setEem(final EntityManager eem) {
this.eemField = eem;
}
@@ -220,7 +216,7 @@
return ejbContextField;
}
- public void setEjbContext(MessageDrivenContext ejbContext) {
+ public void setEjbContext(final MessageDrivenContext ejbContext) {
this.ejbContextField = ejbContext;
}
@@ -228,7 +224,7 @@
return emField;
}
- public void setEm(EntityManager em) {
+ public void setEm(final EntityManager em) {
this.emField = em;
}
@@ -236,7 +232,7 @@
return emfField;
}
- public void setEmf(EntityManagerFactory emf) {
+ public void setEmf(final EntityManagerFactory emf) {
this.emfField = emf;
}
@@ -244,7 +240,7 @@
return flooatField;
}
- public void setFlooat(Float flooat) {
+ public void setFlooat(final Float flooat) {
this.flooatField = flooat;
}
@@ -252,7 +248,7 @@
return inteegerField;
}
- public void setInteeger(Integer inteeger) {
+ public void setInteeger(final Integer inteeger) {
this.inteegerField = inteeger;
}
@@ -260,7 +256,7 @@
return loongField;
}
- public void setLoong(Long loong) {
+ public void setLoong(final Long loong) {
this.loongField = loong;
}
@@ -268,7 +264,7 @@
return pemField;
}
- public void setPem(EntityManager pem) {
+ public void setPem(final EntityManager pem) {
this.pemField = pem;
}
@@ -276,7 +272,7 @@
return shoortField;
}
- public void setShoort(Short shoort) {
+ public void setShoort(final Short shoort) {
this.shoortField = shoort;
}
@@ -284,7 +280,7 @@
return statefulHomeField;
}
- public void setStatefulHome(BasicStatefulHome statefulHome) {
+ public void setStatefulHome(final BasicStatefulHome statefulHome) {
this.statefulHomeField = statefulHome;
}
@@ -292,7 +288,7 @@
return statelessHomeField;
}
- public void setStatelessHome(BasicStatelessHome statelessHome) {
+ public void setStatelessHome(final BasicStatelessHome statelessHome) {
this.statelessHomeField = statelessHome;
}
@@ -300,13 +296,14 @@
return striingField;
}
- public void setStriing(String striing) {
+ public void setStriing(final String striing) {
this.striingField = striing;
}
public void ejbCreate() throws CreateException {
}
+ @Override
public void lookupEntityBean() throws TestFailureException {
try {
Assert.assertNotNull("The EJBObject is null", bmpHomeField);
@@ -315,6 +312,7 @@
}
}
+ @Override
public void lookupStatefulBean() throws TestFailureException {
try {
Assert.assertNotNull("The EJBObject is null", statefulHomeField);
@@ -323,6 +321,7 @@
}
}
+ @Override
public void lookupStatelessBean() throws TestFailureException {
try {
Assert.assertNotNull("The EJBObject is null", statelessHomeField);
@@ -331,42 +330,47 @@
}
}
- public void lookupStatelessBusinessLocal() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessLocal is null", statelessBusinessLocalField );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatelessBusinessLocal() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessLocal is null", statelessBusinessLocalField);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatelessBusinessRemote() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessRemote is null", statelessBusinessRemoteField );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatelessBusinessRemote() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessRemote is null", statelessBusinessRemoteField);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessLocal() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessLocal is null", statefulBusinessLocalField );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatefulBusinessLocal() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessLocal is null", statefulBusinessLocalField);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- public void lookupStatefulBusinessRemote() throws TestFailureException{
- try{
- Assert.assertNotNull("The EJB BusinessRemote is null", statefulBusinessRemoteField );
- } catch (AssertionFailedError afe){
+ @Override
+ public void lookupStatefulBusinessRemote() throws TestFailureException {
+ try {
+ Assert.assertNotNull("The EJB BusinessRemote is null", statefulBusinessRemoteField);
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
+ @Override
public void lookupStringEntry() throws TestFailureException {
try {
- String expected = new String("1");
+ final String expected = "1";
Assert.assertNotNull("The String looked up is null", striingField);
Assert.assertEquals(expected, striingField);
} catch (AssertionFailedError afe) {
@@ -374,9 +378,10 @@
}
}
+ @Override
public void lookupDoubleEntry() throws TestFailureException {
try {
- Double expected = new Double(1.0D);
+ final Double expected = 1.0D;
Assert.assertNotNull("The Double looked up is null", dooubleField);
Assert.assertEquals(expected, dooubleField);
@@ -386,9 +391,10 @@
}
}
+ @Override
public void lookupLongEntry() throws TestFailureException {
try {
- Long expected = new Long(1L);
+ final Long expected = 1L;
Assert.assertNotNull("The Long looked up is null", loongField);
Assert.assertEquals(expected, loongField);
@@ -397,9 +403,10 @@
}
}
+ @Override
public void lookupFloatEntry() throws TestFailureException {
try {
- Float expected = new Float(1.0F);
+ final Float expected = 1.0F;
Assert.assertNotNull("The Float looked up is null", flooatField);
Assert.assertEquals(expected, flooatField);
@@ -408,9 +415,10 @@
}
}
+ @Override
public void lookupIntegerEntry() throws TestFailureException {
try {
- Integer expected = new Integer(1);
+ final Integer expected = 1;
Assert.assertNotNull("The Integer looked up is null", inteegerField);
Assert.assertEquals(expected, inteegerField);
@@ -420,9 +428,10 @@
}
}
+ @Override
public void lookupShortEntry() throws TestFailureException {
try {
- Short expected = new Short((short) 1);
+ final Short expected = (short) 1;
Assert.assertNotNull("The Short looked up is null", shoortField);
Assert.assertEquals(expected, shoortField);
@@ -431,9 +440,10 @@
}
}
+ @Override
public void lookupBooleanEntry() throws TestFailureException {
try {
- Boolean expected = new Boolean(true);
+ final Boolean expected = true;
Assert.assertNotNull("The Boolean looked up is null", boooleanField);
Assert.assertEquals(expected, boooleanField);
@@ -442,9 +452,10 @@
}
}
+ @Override
public void lookupByteEntry() throws TestFailureException {
try {
- Byte expected = new Byte((byte) 1);
+ final Byte expected = (byte) 1;
Assert.assertNotNull("The Byte looked up is null", byyteField);
Assert.assertEquals(expected, byyteField);
@@ -453,9 +464,10 @@
}
}
+ @Override
public void lookupCharacterEntry() throws TestFailureException {
try {
- Character expected = new Character('D');
+ final Character expected = 'D';
Assert.assertNotNull("The Character looked up is null", chaaracterField);
Assert.assertEquals(expected, chaaracterField);
@@ -464,6 +476,7 @@
}
}
+ @Override
public void lookupResource() throws TestFailureException {
try {
Assert.assertNotNull("The DataSource is null", daataSourceField);
@@ -472,31 +485,33 @@
}
}
- public void lookupJMSConnectionFactory() throws TestFailureException{
- try{
- try{
+ @Override
+ public void lookupJMSConnectionFactory() throws TestFailureException {
+ try {
+ try {
testJmsConnection(coonnectionFactory.createConnection());
testJmsConnection(queueCoonnectionFactory.createConnection());
testJmsConnection(topicCoonnectionFactory.createConnection());
- } catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
- Assert.fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
+ Assert.fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
- } catch (AssertionFailedError afe){
+ } catch (AssertionFailedError afe) {
throw new TestFailureException(afe);
}
}
- private void testJmsConnection(javax.jms.Connection connection) throws JMSException {
- Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
- Topic topic = session.createTopic("test");
- MessageProducer producer = session.createProducer(topic);
+ private void testJmsConnection(final javax.jms.Connection connection) throws JMSException {
+ final Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
+ final Topic topic = session.createTopic("test");
+ final MessageProducer producer = session.createProducer(topic);
producer.send(session.createMessage());
producer.close();
session.close();
connection.close();
}
+ @Override
public void lookupPersistenceUnit() throws TestFailureException {
try {
Assert.assertNotNull("The EntityManagerFactory is null", emfField);
@@ -505,6 +520,7 @@
}
}
+ @Override
public void lookupPersistenceContext() throws TestFailureException {
try {
Assert.assertNotNull("The EntityManager is null", emField);
@@ -520,6 +536,7 @@
}
}
+ @Override
public void lookupMessageDrivenContext() throws TestFailureException {
try {
Assert.assertNotNull("The MessageDrivenContext is null", mdbContext);
@@ -529,6 +546,10 @@
}
+ @Override
public void ejbRemove() throws EJBException {
+ if (null != mdbInvoker) {
+ mdbInvoker.destroy();
+ }
}
}
diff --git a/itests/openejb-itests-client/pom.xml b/itests/openejb-itests-client/pom.xml
index 483938a..a2a28cf 100644
--- a/itests/openejb-itests-client/pom.xml
+++ b/itests/openejb-itests-client/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>itests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-itests-client</artifactId>
diff --git a/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/ActiveMqLocalTestJms.java b/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/ActiveMqLocalTestJms.java
index 4cac646..ce0e6fa 100644
--- a/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/ActiveMqLocalTestJms.java
+++ b/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/ActiveMqLocalTestJms.java
@@ -25,9 +25,12 @@
* @version $Rev: 637368 $ $Date: 2008-03-15 00:04:30 -0700 (Sat, 15 Mar 2008) $
*/
public class ActiveMqLocalTestJms implements TestJms {
- public void init(Properties props) {
+
+ @Override
+ public void init(final Properties props) {
}
+ @Override
public ConnectionFactory getConnectionFactory() {
return new ActiveMQConnectionFactory("vm://localhost?async=true");
}
diff --git a/itests/openejb-itests-interceptor-beans/pom.xml b/itests/openejb-itests-interceptor-beans/pom.xml
index 3271848..942f64e 100644
--- a/itests/openejb-itests-interceptor-beans/pom.xml
+++ b/itests/openejb-itests-interceptor-beans/pom.xml
@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.openejb</groupId>
<artifactId>itests</artifactId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<artifactId>openejb-itests-interceptor-beans</artifactId>
diff --git a/itests/openejb-itests-servlets/pom.xml b/itests/openejb-itests-servlets/pom.xml
index 8d4332d..39d48cb 100644
--- a/itests/openejb-itests-servlets/pom.xml
+++ b/itests/openejb-itests-servlets/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>itests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-itests-servlets</artifactId>
diff --git a/itests/openejb-itests-web/pom.xml b/itests/openejb-itests-web/pom.xml
index f030f36..a8ce85e 100644
--- a/itests/openejb-itests-web/pom.xml
+++ b/itests/openejb-itests-web/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>itests</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-itests-web</artifactId>
diff --git a/itests/pom.xml b/itests/pom.xml
index ae784e7..8c04c19 100644
--- a/itests/pom.xml
+++ b/itests/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>itests</artifactId>
diff --git a/maven/dd-maven-plugin/pom.xml b/maven/dd-maven-plugin/pom.xml
deleted file mode 100644
index dcdc5c3..0000000
--- a/maven/dd-maven-plugin/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>maven</artifactId>
- <groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>dd-maven-plugin</artifactId>
- <packaging>maven-plugin</packaging>
- <name>OpenEJB :: Maven Plugins :: DD Maven Plugin</name>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-plugin-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-project</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-core</artifactId>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>maven-util</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-
- <properties>
- <maven-plugin.prefix>dd</maven-plugin.prefix>
- </properties>
-</project>
diff --git a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java b/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java
deleted file mode 100644
index ef8d0f3..0000000
--- a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/MergeDDForWebappMojo.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * 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.maven.plugin.dd;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
-import org.apache.openejb.config.NewLoaderLogic;
-import org.apache.openejb.maven.util.MavenLogStreamFactory;
-import org.apache.xbean.finder.AbstractFinder;
-import org.apache.xbean.finder.ClassFinder;
-import org.apache.xbean.finder.ResourceFinder;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @goal merge
- * @phase compile
- * @requiresDependencyResolution runtime
- */
-public class MergeDDForWebappMojo extends AbstractMojo {
- private static final String[] MANAGED_DD = {
- "ejb-jar.xml", "openejb-jar.xml",
- "env-entries.properties",
- "validation.xml"
- };
-
- /**
- * @parameter expression="${project}"
- * @required
- * @readonly
- */
- private MavenProject project;
-
- /**
- * @parameter expression="${project.build.sourceDirectory}/main/webapp/WEB-INF"
- * @required
- * @readonly
- */
- private File webInfSrc;
-
- /**
- * @parameter expression="${project.build.directory}/${project.build.finalName}/WEB-INF"
- * @required
- * @readonly
- */
- private File webInf;
-
- /**
- * @parameter
- */
- private List<String> includes;
-
- /**
- * @parameter
- */
- private List<String> excludes;
-
- @Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- System.setProperty("openejb.log.factory", "org.apache.openejb.maven.util.MavenLogStreamFactory");
- MavenLogStreamFactory.setLogger(getLog());
-
- initIncludeExclude();
- final Map<String, Merger<?>> mergers;
- try {
- mergers = initMerger();
- } catch (Exception e) {
- getLog().error("can't find mergers", e);
- return;
- }
-
- getLog().info("looking for descriptors...");
- final List<Artifact> artifacts = getDependencies();
-
- final ResourceFinder webInfFinder;
- try {
- webInfFinder = new ResourceFinder(webInfSrc.toURI().toURL());
- } catch (MalformedURLException e) {
- throw new MojoFailureException("can't create a finder for webinf", e);
- }
-
- final Map<Artifact, ResourceFinder> finders = finders(artifacts);
- for (String dd : MANAGED_DD) {
- if (!mergers.containsKey(dd)) {
- getLog().warn("ignoring " + dd + " because no merger found");
- }
-
- int ddCount = 0;
- Object reference;
- final Merger<Object> merger = (Merger<Object>) mergers.get(dd);
- try {
- final URL ddUrl = webInfFinder.find(dd);
- if (ddUrl != null) {
- reference = merger.read(ddUrl);
- ddCount++;
- } else {
- reference = merger.createEmpty();
- }
- } catch (IOException e) {
- reference = merger.createEmpty();
- }
-
- for (Artifact artifact : artifacts) {
- try {
- final URL otherDD = finders.get(artifact).find("META-INF/" + dd);
- if (otherDD != null) {
- merger.merge(reference, merger.read(otherDD));
- ddCount++;
- }
- } catch (IOException e) {
- // ignore since it means the resource was not found
- }
- }
-
- if (ddCount > 0) {
- if (!webInf.exists() && !webInf.mkdirs()) {
- getLog().error("can't create " + webInf.getPath());
- }
- final File dump = new File(webInf, dd);
- try {
- merger.dump(dump, reference);
- getLog().info(dd + " merged on " + dump.getPath());
- } catch (Exception e) {
- getLog().error("can't save " + dd + " in " + dump.getPath());
- }
- } else {
- getLog().debug("no " + dd + " found, this descriptor will be ignored");
- }
- }
- }
-
- private Map<String, Merger<?>> initMerger() throws Exception {
- final Map<String, Merger<?>> mergers = new HashMap<String, Merger<?>>();
- final ClassLoader cl = new URLClassLoader(new URL[] { getClass().getProtectionDomain().getCodeSource().getLocation() }, ClassLoader.getSystemClassLoader());
- final AbstractFinder finder = new ClassFinder(cl, true).link();
- final List<Class> foundMergers = finder.findSubclasses((Class) cl.loadClass(Merger.class.getName()));
-
- for (Class<? extends Merger> m : foundMergers) {
- try {
- // reload the class with the current classloader to avoid to miss some dependencies
- // excluded to scan faster
- final Merger<?> instance = (Merger<?>) Thread.currentThread().getContextClassLoader().loadClass(m.getName())
- .getConstructor(Log.class).newInstance(getLog());
- mergers.put(instance.descriptorName(), instance);
- } catch (Exception e) {
- getLog().warn("can't instantiate " + m.getName() + ", does it provide a constructor with a maven logger?");
- }
- }
- return mergers;
- }
-
- private Map<Artifact, ResourceFinder> finders(List<Artifact> artifacts) {
- final Map<Artifact, ResourceFinder> map = new HashMap<Artifact, ResourceFinder>(artifacts.size());
- for (Artifact artifact : artifacts) {
- try {
- map.put(artifact, new ResourceFinder(artifact.getFile().toURI().toURL()));
- } catch (MalformedURLException e) {
- getLog().warn("can't manage " + artifact);
- }
- }
- return map; //To change body of created methods use File | Settings | File Templates.
- }
-
- public List<Artifact> getDependencies() {
- final List<Artifact> dependencies = new ArrayList<Artifact>(project.getArtifacts());
- final Iterator<Artifact> it = dependencies.iterator();
- while (it.hasNext()) {
- final Artifact artifact = it.next();
- if (!keep(artifact.getArtifactId())) {
- it.remove();
- }
- }
- return dependencies;
- }
-
- private boolean keep(final String str) {
- return matches(includes, str) && !matches(excludes, str);
- }
-
- private void initIncludeExclude() {
- if (includes == null) {
- includes = new ArrayList<String>();
- includes.add("");
- }
- if (excludes == null) {
- excludes = Arrays.asList(NewLoaderLogic.getExclusions());
- }
- }
-
- private static boolean matches(final List<String> includes, final String artifact) {
- for (String pattern : includes) {
- if (artifact.startsWith(pattern)) {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java b/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java
deleted file mode 100644
index 19d08c1..0000000
--- a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/Merger.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 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.maven.plugin.dd;
-
-import org.apache.maven.plugin.logging.Log;
-
-import java.io.File;
-import java.net.URL;
-
-public abstract class Merger<T> {
- protected final Log log;
-
- public Merger(final Log logger) {
- log = logger;
- }
-
- public abstract T merge(T reference, T toMerge);
- public abstract T createEmpty();
- public abstract T read(URL url);
- public abstract String descriptorName();
- public abstract void dump(File dump, T object) throws Exception ;
-}
diff --git a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java b/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java
deleted file mode 100644
index 5273174..0000000
--- a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EjbJarMerger.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * 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.maven.plugin.dd.merger;
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.openejb.jee.ApplicationException;
-import org.apache.openejb.jee.AssemblyDescriptor;
-import org.apache.openejb.jee.ContainerConcurrency;
-import org.apache.openejb.jee.ContainerTransaction;
-import org.apache.openejb.jee.EjbJar;
-import org.apache.openejb.jee.EnterpriseBean;
-import org.apache.openejb.jee.Interceptor;
-import org.apache.openejb.jee.InterceptorBinding;
-import org.apache.openejb.jee.JaxbJavaee;
-import org.apache.openejb.jee.MessageDestination;
-import org.apache.openejb.jee.MethodPermission;
-import org.apache.openejb.jee.SecurityRole;
-import org.apache.openejb.maven.plugin.dd.Merger;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.net.URL;
-
-public class EjbJarMerger extends Merger<EjbJar> {
- public EjbJarMerger(final Log logger) {
- super(logger);
- }
-
- @Override
- public EjbJar merge(final EjbJar reference, final EjbJar toMerge) {
- for (EnterpriseBean bean : toMerge.getEnterpriseBeans()) {
- if (reference.getEnterpriseBeansByEjbName().containsKey(bean.getEjbName())) {
- log.warn("bean " + bean.getEjbName() + " already defined");
- } else {
- reference.addEnterpriseBean(bean);
- }
- }
-
- for (Interceptor interceptor : toMerge.getInterceptors()) {
- if (reference.getInterceptor(interceptor.getInterceptorClass()) != null) {
- log.warn("interceptor " + interceptor.getInterceptorClass() + " already defined");
- } else {
- reference.addInterceptor(interceptor);
- }
- }
-
- final AssemblyDescriptor descriptor = toMerge.getAssemblyDescriptor();
- mergeAssemblyDescriptor(reference.getAssemblyDescriptor(), descriptor);
-
- return reference;
- }
-
- // TODO: merge it in a better way
- private void mergeAssemblyDescriptor(final AssemblyDescriptor reference, final AssemblyDescriptor descriptor) {
- for (SecurityRole role : descriptor.getSecurityRole()) {
- boolean found = false;
- for (SecurityRole refRole : reference.getSecurityRole()) {
- if (refRole.getRoleName().equals(role.getRoleName())) {
- found = true;
- break;
- }
- }
- if (found) {
- log.warn("role " + role.getRoleName() + " already defined");
- } else {
- reference.getSecurityRole().add(role);
- }
- }
-
- for (MethodPermission perm : descriptor.getMethodPermission()) {
- boolean found = false;
- for (MethodPermission refPerm : reference.getMethodPermission()) {
- if (refPerm.getRoleName().equals(perm.getRoleName())) {
- found = true;
- break;
- }
- }
- if (found) {
- log.warn("method permission " + perm.getId() + " already defined");
- } else {
- reference.getMethodPermission().add(perm);
- }
- }
-
- for (ContainerTransaction tx : descriptor.getContainerTransaction()) {
- reference.getContainerTransaction().add(tx);
- }
-
- for (ContainerConcurrency concurrency : descriptor.getContainerConcurrency()) {
- reference.getContainerConcurrency().add(concurrency);
- }
-
- for (InterceptorBinding interceptorBinding : descriptor.getInterceptorBinding()) {
- boolean found = false;
- for (InterceptorBinding refInterceptorBinding : reference.getInterceptorBinding()) {
- if (refInterceptorBinding.getEjbName().equals(interceptorBinding.getEjbName())) {
- for (String interceptor : interceptorBinding.getInterceptorClass()) {
- if (refInterceptorBinding.getInterceptorClass().contains(interceptor)) {
- found = true;
- break;
- }
- }
- }
- }
- if (found) {
- log.warn("interceptor binding " + interceptorBinding.getId() + " already defined");
- } else {
- reference.getInterceptorBinding().add(interceptorBinding);
- }
- }
-
- for (MessageDestination destination : descriptor.getMessageDestination()) {
- boolean found = false;
- for (MessageDestination refDestination : reference.getMessageDestination()) {
- if (refDestination.getMessageDestinationName().equals(destination.getMessageDestinationName())) { // is id the good test?
- found = true;
- break;
- }
- }
- if (found) {
- log.warn("message destination " + destination.getMessageDestinationName() + " already defined");
- } else {
- reference.getMessageDestination().add(destination);
- }
- }
-
- for (ApplicationException exception : descriptor.getApplicationException()) {
- if (reference.getApplicationExceptionMap().containsKey(exception.getKey())) {
- log.warn("application exception " + exception.getKey() + " already defined");
- } else {
- reference.getApplicationException().add(exception);
- }
- }
- }
-
- @Override
- public EjbJar createEmpty() {
- return new EjbJar();
- }
-
- @Override
- public EjbJar read(URL url) {
- try {
- return (EjbJar) JaxbJavaee.unmarshal(EjbJar.class, new BufferedInputStream(url.openStream()), false);
- } catch (Exception e) {
- return createEmpty();
- }
- }
-
- @Override
- public String descriptorName() {
- return "ejb-jar.xml";
- }
-
- @Override
- public void dump(final File dump, final EjbJar ejbJar) throws Exception {
- final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(dump));
- try {
- JaxbJavaee.marshal(EjbJar.class, ejbJar, stream);
- } finally {
- stream.close();
- }
- }
-}
diff --git a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java b/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java
deleted file mode 100644
index 99e9a58..0000000
--- a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/EnvEntriesMerger.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 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.maven.plugin.dd.merger;
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.openejb.maven.plugin.dd.Merger;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.net.URL;
-import java.util.Properties;
-
-public class EnvEntriesMerger extends Merger<Properties> {
- public EnvEntriesMerger(final Log logger) {
- super(logger);
- }
-
- @Override
- public Properties merge(final Properties reference, final Properties toMerge) {
- for (Object key : toMerge.keySet()) {
- if (reference.containsKey(key)) {
- log.warn("property " + key + " found in multiple env-entries.properties, will be overriden");
- }
- }
-
- reference.putAll(toMerge);
- return reference;
- }
-
- @Override
- public Properties createEmpty() {
- return new Properties();
- }
-
- @Override
- public Properties read(URL url) {
- final Properties read = new Properties();
- try {
- read.load(new BufferedInputStream(url.openStream()));
- } catch (IOException e) {
- // ignored
- }
- return read;
- }
-
- @Override
- public String descriptorName() {
- return "env-entries.properties";
- }
-
- @Override
- public void dump(final File dump, final Properties object) throws Exception {
- final Writer writer = new FileWriter(dump);
- try {
- object.store(writer, "merged env-entries.properties");
- } finally {
- writer.close();
- }
- }
-}
diff --git a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java b/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java
deleted file mode 100644
index b8d2456..0000000
--- a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/OpenEJBJarMerger.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * 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.maven.plugin.dd.merger;
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.openejb.jee.oejb3.EjbDeployment;
-import org.apache.openejb.jee.oejb3.JaxbOpenejbJar3;
-import org.apache.openejb.jee.oejb3.OpenejbJar;
-import org.apache.openejb.maven.plugin.dd.Merger;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.net.URL;
-
-public class OpenEJBJarMerger extends Merger<OpenejbJar> {
- public OpenEJBJarMerger(final Log logger) {
- super(logger);
- }
-
- @Override
- public OpenejbJar merge(OpenejbJar reference, OpenejbJar toMerge) {
- new EnvEntriesMerger(log).merge(reference.getProperties(), toMerge.getProperties());
-
- for (EjbDeployment deployment : toMerge.getEjbDeployment()) {
- if (reference.getDeploymentsByEjbName().containsKey(deployment.getEjbName())) {
- log.warn("ejb deployement " + deployment.getEjbName() + " already present");
- } else {
- reference.addEjbDeployment(deployment);
- }
- }
-
- return reference;
- }
-
- @Override
- public OpenejbJar createEmpty() {
- return new OpenejbJar();
- }
-
- @Override
- public OpenejbJar read(URL url) {
- try {
- return JaxbOpenejbJar3.unmarshal(OpenejbJar.class, new BufferedInputStream(url.openStream()));
- } catch (Exception e) {
- return createEmpty();
- }
- }
-
- @Override
- public String descriptorName() {
- return "openejb-jar.xml";
- }
-
- @Override
- public void dump(File dump, OpenejbJar object) throws Exception {
- final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(dump));
- try {
- JaxbOpenejbJar3.marshal(OpenejbJar.class, object, stream);
- } finally {
- stream.close();
- }
- }
-}
diff --git a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java b/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java
deleted file mode 100644
index 233e7c1..0000000
--- a/maven/dd-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/dd/merger/ValidationMerger.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * 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.maven.plugin.dd.merger;
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.openejb.config.sys.JaxbOpenejb;
-import org.apache.openejb.jee.bval.PropertyType;
-import org.apache.openejb.jee.bval.ValidationConfigType;
-import org.apache.openejb.maven.plugin.dd.Merger;
-
-import javax.xml.bind.JAXBElement;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.net.URL;
-
-public class ValidationMerger extends Merger<ValidationConfigType> {
- public ValidationMerger(final Log logger) {
- super(logger);
- }
-
- @Override
- public ValidationConfigType merge(final ValidationConfigType reference, final ValidationConfigType toMerge) {
- for (PropertyType property : toMerge.getProperty()) {
- boolean found = false;
- for (PropertyType refProperty : reference.getProperty()) {
- if (refProperty.getName().contains(property.getName())) {
- found = true;
- break;
- }
- }
- if (found) {
- log.warn("property " + property.getName() + " already present");
- } else {
- reference.getProperty().add(property);
- }
- }
-
- for (JAXBElement<String> elt : toMerge.getConstraintMapping()) {
- reference.getConstraintMapping().add(elt);
- }
-
- return reference;
- }
-
- @Override
- public ValidationConfigType createEmpty() {
- return new ValidationConfigType();
- }
-
- @Override
- public ValidationConfigType read(URL url) {
- try {
- return JaxbOpenejb.unmarshal(ValidationConfigType.class, new BufferedInputStream(url.openStream()));
- } catch (Exception e) {
- return createEmpty();
- }
- }
-
- @Override
- public String descriptorName() {
- return "validation.xml";
- }
-
- @Override
- public void dump(File dump, ValidationConfigType object) throws Exception {
- final BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(dump));
- try {
- JaxbOpenejb.marshal(ValidationConfigType.class, object, stream);
- } finally {
- stream.close();
- }
- }
-}
diff --git a/maven/maven-util/pom.xml b/maven/maven-util/pom.xml
index ff1e72c..35d1849 100644
--- a/maven/maven-util/pom.xml
+++ b/maven/maven-util/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>maven</artifactId>
<groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/maven/openejb-embedded-maven-plugin/pom.xml b/maven/openejb-embedded-maven-plugin/pom.xml
index 4c29976..ca28585 100644
--- a/maven/openejb-embedded-maven-plugin/pom.xml
+++ b/maven/openejb-embedded-maven-plugin/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>maven</artifactId>
<groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/maven/pom.xml b/maven/pom.xml
index dfc5aed..192c60e 100644
--- a/maven/pom.xml
+++ b/maven/pom.xml
@@ -15,7 +15,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -24,11 +23,11 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1</version>
<artifactId>maven</artifactId>
<packaging>pom</packaging>
<name>OpenEJB :: Maven Plugins</name>
@@ -36,11 +35,9 @@
<modules>
<module>tomee-maven-plugin</module>
<module>tomee-embedded-maven-plugin</module>
- <module>dd-maven-plugin</module>
<module>openejb-embedded-maven-plugin</module>
<module>maven-util</module>
- <module>spi-helper-maven-plugin</module>
- <module>spi-helper-jee6-profile</module>
+ <module>tomee-webapp-archetype</module>
</modules>
<dependencyManagement>
diff --git a/maven/spi-helper-jee6-profile/pom.xml b/maven/spi-helper-jee6-profile/pom.xml
deleted file mode 100644
index 51fb107..0000000
--- a/maven/spi-helper-jee6-profile/pom.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>maven</artifactId>
- <groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>spi-helper-jee6-profile</artifactId>
- <name>OpenEJB :: Maven Plugins :: JEE6 profile</name>
-</project>
diff --git a/maven/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties b/maven/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties
deleted file mode 100644
index f77669c..0000000
--- a/maven/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties
+++ /dev/null
@@ -1,71 +0,0 @@
-#
-# 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.
-#
-
-name = jee6
-
-annotations = javax.annotation.ManagedBean,\
- javax.annotation.PostConstruct,\
- javax.annotation.PreDestroy,\
- javax.annotation.Resource,\
- javax.annotation.Resources,\
- javax.annotation.security.DenyAll,\
- javax.annotation.security.PermitAll,\
- javax.annotation.security.RolesAllowed,\
- javax.annotation.sql.DataSourceDefinition,\
- javax.ejb.AfterBegin,\
- javax.ejb.AfterCompletion,\
- javax.ejb.ApplicationException,\
- javax.ejb.Asynchronous,\
- javax.ejb.BeforeCompletion,\
- javax.ejb.ConcurrencyManagement,\
- javax.ejb.DependsOn,\
- javax.ejb.EJB,\
- javax.ejb.EJBs,\
- javax.ejb.Init,\
- javax.ejb.LocalBean,\
- javax.ejb.LocalHome,\
- javax.ejb.MessageDriven,\
- javax.ejb.PostActivate,\
- javax.ejb.PrePassivate,\
- javax.ejb.RemoteHome,\
- javax.ejb.Remove,\
- javax.ejb.Schedule,\
- javax.ejb.Schedules,\
- javax.ejb.Singleton,\
- javax.ejb.Stateful,\
- javax.ejb.Stateless,\
- javax.ejb.Timeout,\
- javax.enterprise.inject.Specializes,\
- javax.inject.Inject,\
- javax.interceptor.AroundInvoke,\
- javax.interceptor.AroundTimeout,\
- javax.interceptor.ExcludeClassInterceptors,\
- javax.interceptor.ExcludeDefaultInterceptors,\
- javax.interceptor.Interceptors,\
- javax.jws.WebService,\
- javax.persistence.PersistenceContext,\
- javax.persistence.PersistenceContexts,\
- javax.persistence.PersistenceUnit,\
- javax.persistence.PersistenceUnits,\
- javax.ws.rs.Path,\
- javax.xml.ws.WebServiceProvider,\
- javax.xml.ws.WebServiceRef,\
- javax.xml.ws.WebServiceRefs
-
-subclasses = javax.ws.rs.core.Application
-
-implementations =
diff --git a/maven/spi-helper-maven-plugin/pom.xml b/maven/spi-helper-maven-plugin/pom.xml
deleted file mode 100644
index e4e2d00..0000000
--- a/maven/spi-helper-maven-plugin/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>maven</artifactId>
- <groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>spi-helper-maven-plugin</artifactId>
- <packaging>maven-plugin</packaging>
- <name>OpenEJB :: Maven Plugins :: SPI Maven Plugin</name>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-plugin-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-project</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.xbean</groupId>
- <artifactId>xbean-finder-shaded</artifactId>
- </dependency>
- </dependencies>
-
- <properties>
- <maven-plugin.prefix>spi-helper</maven-plugin.prefix>
- </properties>
-</project>
diff --git a/maven/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java b/maven/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java
deleted file mode 100644
index c5a47c4..0000000
--- a/maven/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/**
- * 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.maven.plugin.spi;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.DefaultArtifact;
-import org.apache.maven.artifact.handler.DefaultArtifactHandler;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-import org.apache.xbean.finder.Annotated;
-import org.apache.xbean.finder.AnnotationFinder;
-import org.apache.xbean.finder.archive.Archive;
-import org.apache.xbean.finder.archive.ClasspathArchive;
-import org.apache.xbean.finder.archive.FileArchive;
-
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamWriter;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileWriter;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeSet;
-
-/**
- * @goal generate
- * @requiresDependencyResolution compile+runtime
- * @phase compile
- */
-public class SpiMojo extends AbstractMojo {
- private static final String PROFILE_PATH = "org/apache/xbean/profile.properties";
-
- /**
- * @parameter default-value="${project.build.outputDirectory}"
- * @required
- */
- private File module;
-
- /**
- * @parameter default-value="${project}"
- * @required
- * @readonly
- */
- private MavenProject project;
-
- /**
- * @parameter
- */
- private List<String> annotations;
-
- /**
- * @parameter
- */
- private List<String> subclasses;
-
- /**
- * @parameter
- */
- private List<String> implementations;
-
- /**
- * @parameter
- */
- private List<String> profiles;
-
- /**
- * @parameter expression="${spi.output}" default-value="${project.build.outputDirectory}/META-INF/scan.xml"
- *
- * for webapp: ${project.build.directory}/${project.build.finalName}/WEB-INF/classes/META-INF/scan.xml
- */
- private String outputFilename;
-
- /**
- * @parameter expression="${spi.meta}" default-value="false"
- */
- private boolean useMeta;
-
- /**
- * @parameter expression="${spi.aggregated-archive}" default-value="true"
- */
- private boolean useAggregatedArchiveIfWar;
-
- /**
- * @parameter default-value="${project.packaging}"
- * @readonly
- */
- private String packaging;
-
- /**
- * @parameter expression="${project.pluginArtifactRepositories}"
- * @required
- * @readonly
- */
- private List remotePluginRepositories;
-
- /**
- * @parameter expression="${localRepository}"
- * @readonly
- * @required
- */
- private ArtifactRepository local;
-
- /**
- * @component
- */
- protected ArtifactResolver resolver;
-
- @Override
- public void execute() throws MojoExecutionException, MojoFailureException {
- final Map<String, Profile> loadedProfiles = loadProfiles();
-
- //
- // create profiles to use
- //
- final List<Profile> profileToUse = new ArrayList<Profile>();
- if (profiles != null) {
- for (String profile : profiles) {
- if (loadedProfiles.containsKey(profile)) {
- profileToUse.add(loadedProfiles.get(profile));
- } else {
- getLog().info("can't find profile " + profile + ", available ones are " + loadedProfiles.keySet());
- }
- }
- }
- if (annotations != null || subclasses != null || implementations != null) {
- profileToUse.add(new Profile(annotations, subclasses, implementations));
- }
-
- if (profileToUse.isEmpty() && loadedProfiles.size() > 0) {
- final Map.Entry<String, Profile> profile = loadedProfiles.entrySet().iterator().next();
- getLog().info("using profile " + profile.getKey());
- profileToUse.add(profile.getValue());
- }
-
- if (profileToUse.isEmpty()) {
- getLog().warn("no profile or configuration, nothing will be done");
- return;
- }
-
- //
- // creating the archive and its classloader
- //
-
- // war is different since it will contain a single descriptor for its lib too (not an ear)
- boolean war = "war".equals(packaging);
- final Archive archive;
- final URLClassLoader loader = createClassLoader(providedDependenciesClassLoader());
- if (war && useAggregatedArchiveIfWar) {
- archive = new ClasspathArchive(loader, loader.getURLs());
- getLog().info("using an aggregated archive");
- } else {
- archive = new FileArchive(loader, module);
- getLog().info("using a file archive");
- }
-
- // the result
- final Set<String> classes = new TreeSet<String>();
- try {
- final AnnotationFinder finder = new AnnotationFinder(archive);
- finder.link();
-
- //
- // find classes
- //
-
- for (Profile profile : profileToUse) {
- if (profile.getAnnotations() != null) {
- for (String annotation : profile.getAnnotations()) {
- final Class<? extends Annotation> annClazz;
- try {
- annClazz = (Class<? extends Annotation>) load(loader, annotation);
- } catch (MojoFailureException mfe) {
- getLog().warn("can't find " + annotation);
- continue;
- }
-
- if (!useMeta) {
- for (Class<?> clazz : finder.findAnnotatedClasses(annClazz)) {
- classes.add(clazz.getName());
- }
- } else {
- for (Annotated<Class<?>> clazz : finder.findMetaAnnotatedClasses(annClazz)) {
- classes.add(clazz.get().getName());
- }
- }
-
- if (!useMeta) {
- for (Field clazz : finder.findAnnotatedFields(annClazz)) {
- classes.add(clazz.getDeclaringClass().getName());
- }
- } else {
- for (Annotated<Field> clazz : finder.findMetaAnnotatedFields(annClazz)) {
- classes.add(clazz.get().getDeclaringClass().getName());
- }
- }
-
- if (!useMeta) {
- for (Method clazz : finder.findAnnotatedMethods(annClazz)) {
- classes.add(clazz.getDeclaringClass().getName());
- }
- } else {
- for (Annotated<Method> clazz : finder.findMetaAnnotatedMethods(annClazz)) {
- classes.add(clazz.get().getDeclaringClass().getName());
- }
- }
- }
- }
-
- if (profile.getSubclasses() != null) {
- for (String subclass : profile.getSubclasses()) {
- try {
- for (Class<?> clazz : finder.findSubclasses(load(loader, subclass))) {
- classes.add(clazz.getName());
- }
- } catch (MojoFailureException mfe) {
- getLog().warn("can't find " + subclass);
- }
- }
- }
-
- if (profile.getImplementations() != null) {
- for (String implementation : profile.getImplementations()) {
- try {
- for (Class<?> clazz : finder.findImplementations(load(loader, implementation))) {
- classes.add(clazz.getName());
- }
- } catch (MojoFailureException mfe) {
- getLog().warn("can't find " + implementation);
- }
- }
- }
- }
-
- //
- // dump found classes
- //
-
- final File output = new File(outputFilename);
- if (!output.getParentFile().exists() && !output.getParentFile().mkdirs()) {
- getLog().error("can't create " + output.getParent());
- return;
- }
-
- final XMLStreamWriter out = XMLOutputFactory.newInstance().createXMLStreamWriter(new FileWriter(outputFilename));
- try {
- out.writeStartDocument();
- out.writeStartElement("scan");
- out.writeCharacters("\n");
-
- out.writeCharacters(" ");
- out.writeStartElement("classes");
- out.writeCharacters("\n");
-
- for (String clazz : classes) {
- out.writeCharacters(" ");
- out.writeStartElement("class");
- out.writeCharacters(clazz);
- out.writeEndElement();
- out.writeCharacters("\n");
- }
-
- out.writeCharacters(" ");
- out.writeEndElement();
- out.writeCharacters("\n");
-
- out.writeCharacters(" ");
- out.writeStartElement("packages");
- out.writeCharacters("\n ");
- out.writeEndElement();
- out.writeCharacters("\n");
-
- out.writeEndElement();
- out.writeEndDocument();
- } finally {
- out.flush();
- out.close();
- }
-
- getLog().info("generated " + output.getPath());
- } catch (Exception e) {
- getLog().error(e);
- }
- }
-
- private Map<String, Profile> loadProfiles() {
- final Map<String, Profile> profiles = new HashMap<String, Profile>();
- try {
- final Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(PROFILE_PATH);
- while (urls.hasMoreElements()) {
- final URL url = urls.nextElement();
- final Properties properties = new Properties();
- properties.load(new BufferedInputStream(url.openStream()));
-
- final String name = properties.getProperty("name");
- if (name == null) {
- getLog().warn("ignoring " + url.toExternalForm() + " since it doesn't contain a name");
- }
-
-
- final List<String> profileAnnotations = list(properties.getProperty("annotations"));
- final List<String> profileSubclasses = list(properties.getProperty("subclasses"));
- final List<String> profileImplementations = list(properties.getProperty("implementations"));
-
- profiles.put(name, new Profile(profileAnnotations, profileSubclasses, profileImplementations));
- }
- } catch (Exception e) {
- getLog().warn("can't look for profiles");
- }
- return profiles;
- }
-
- private static List<String> list(final String commaSeparatedList) {
- final List<String> list = new ArrayList<String>();
- if (commaSeparatedList != null) {
- for (String value : commaSeparatedList.split(",")) {
- final String trimmed = value.trim();
- if (!trimmed.isEmpty()) {
- list.add(trimmed);
- }
- }
- }
- return list;
- }
-
- private ClassLoader providedDependenciesClassLoader() {
- final Set<URL> urls = new HashSet<URL>();
-
- // provided artifacts
- for (Artifact artifact : (Set<Artifact>) project.getDependencyArtifacts()) {
- if (!"provided".equals(artifact.getScope())) {
- continue;
- }
-
- try {
- urls.add(artifact.getFile().toURI().toURL());
- } catch (MalformedURLException e) {
- getLog().warn("can't use artifact " + artifact.toString());
- }
- }
-
- // plugin dependencies
- final Plugin thisPlugin = (Plugin) project.getBuild().getPluginsAsMap().get("org.apache.openejb.maven:spi-helper-maven-plugin");
- if (thisPlugin != null && thisPlugin.getDependencies() != null) {
- for (Dependency artifact : thisPlugin.getDependencies()) {
- final Artifact resolved = new DefaultArtifact(
- artifact.getGroupId(), artifact.getArtifactId(), VersionRange.createFromVersion(artifact.getVersion()),
- artifact.getScope(), artifact.getType(), artifact.getClassifier(), new DefaultArtifactHandler());
- try {
- resolver.resolve(resolved, remotePluginRepositories, local);
- urls.add(resolved.getFile().toURI().toURL());
- } catch (ArtifactResolutionException e) {
- getLog().warn("can't resolve " + artifact.getArtifactId());
- } catch (ArtifactNotFoundException e) {
- getLog().warn("can't find " + artifact.getArtifactId());
- } catch (MalformedURLException e) {
- getLog().warn("can't get url of " + resolved.getFile() + " for artifact " + resolved.getArtifactId());
- }
- }
- }
-
- return new URLClassLoader(urls.toArray(new URL[urls.size()]), ClassLoader.getSystemClassLoader());
- }
-
- private Class<?> load(final ClassLoader loader, final String name) throws MojoFailureException {
- try {
- return loader.loadClass(name);
- } catch (ClassNotFoundException e) {
- throw new MojoFailureException("can't load " + name, e);
- }
- }
-
- private URLClassLoader createClassLoader(final ClassLoader parent) {
- final List<URL> urls = new ArrayList<URL>();
- for (Artifact artifact : (Set<Artifact>) project.getArtifacts()) {
- try {
- urls.add(artifact.getFile().toURI().toURL());
- } catch (MalformedURLException e) {
- getLog().warn("can't use artifact " + artifact.toString());
- }
- }
- if (module.exists()) {
- try {
- urls.add(module.toURI().toURL());
- } catch (MalformedURLException e) {
- getLog().warn("can't use path " + module.getPath());
- }
- } else {
- getLog().warn("can't find " + module.getPath());
- }
- return new URLClassLoader(urls.toArray(new URL[urls.size()]), parent);
- }
-
- public static final class Profile {
- private List<String> annotations;
- private List<String> subclasses;
- private List<String> implementations;
-
- public Profile(final List<String> annotations, final List<String> subclasses, final List<String> implementations) {
- this.annotations = annotations;
- this.subclasses = subclasses;
- this.implementations = implementations;
- }
-
- public List<String> getAnnotations() {
- return annotations;
- }
-
- public List<String> getSubclasses() {
- return subclasses;
- }
-
- public List<String> getImplementations() {
- return implementations;
- }
- }
-}
diff --git a/maven/tomee-embedded-maven-plugin/pom.xml b/maven/tomee-embedded-maven-plugin/pom.xml
index 5e6a49f..d60de65 100644
--- a/maven/tomee-embedded-maven-plugin/pom.xml
+++ b/maven/tomee-embedded-maven-plugin/pom.xml
@@ -24,7 +24,7 @@
<parent>
<artifactId>maven</artifactId>
<groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1</version>
</parent>
<artifactId>tomee-embedded-maven-plugin</artifactId>
diff --git a/maven/tomee-maven-plugin/pom.xml b/maven/tomee-maven-plugin/pom.xml
index ef19fce..3347238 100644
--- a/maven/tomee-maven-plugin/pom.xml
+++ b/maven/tomee-maven-plugin/pom.xml
@@ -24,7 +24,7 @@
<parent>
<artifactId>maven</artifactId>
<groupId>org.apache.openejb.maven</groupId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1</version>
</parent>
<artifactId>tomee-maven-plugin</artifactId>
diff --git a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
index 0f492b0..3916644 100644
--- a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
+++ b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
@@ -89,7 +89,7 @@
@Parameter(property = "tomee-plugin.skipCurrentProject", defaultValue = "false")
protected boolean skipCurrentProject;
- @Parameter(property = "tomee-plugin.version", defaultValue = "1.5.1-SNAPSHOT")
+ @Parameter(property = "tomee-plugin.version", defaultValue = "1.5.1")
protected String tomeeVersion;
@Parameter(property = "tomee-plugin.groupId", defaultValue = "org.apache.openejb")
@@ -235,7 +235,8 @@
private void removeDefaultWebapps(final boolean removeTomee) {
final File webapps = new File(catalinaBase, webappDir);
if (webapps.isDirectory()) {
- for (File webapp : webapps.listFiles()) {
+ final File[] files = webapps.listFiles();
+ if (null != files) for (File webapp : files) {
final String name = webapp.getName();
if (webapp.isDirectory() && (removeTomee || !name.equals("tomee"))) {
try {
@@ -529,7 +530,8 @@
if (getNoShutdownHook()) {
Runtime.getRuntime().addShutdownHook(new Thread() {
- @Override public void run() {
+ @Override
+ public void run() {
server.stop();
}
});
@@ -558,7 +560,7 @@
// no-op
}
- protected int getConnectAttempts() {
+ protected int getConnectAttempts() {
return Integer.MAX_VALUE;
}
diff --git a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
index 54e0f5c..3a464c0 100644
--- a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
+++ b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/UpdatableTomEEMojo.java
@@ -89,7 +89,8 @@
protected void addShutdownHooks(final RemoteServer server) {
if (synchronization != null) {
Runtime.getRuntime().addShutdownHook(new Thread() {
- @Override public void run() {
+ @Override
+ public void run() {
timer.cancel();
}
});
diff --git a/maven/tomee-webapp-archetype/pom.xml b/maven/tomee-webapp-archetype/pom.xml
new file mode 100644
index 0000000..c173b3e
--- /dev/null
+++ b/maven/tomee-webapp-archetype/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>maven</artifactId>
+ <groupId>org.apache.openejb.maven</groupId>
+ <version>1.0.1</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>tomee-webapp-archetype</artifactId>
+ <name>OpenEJB :: Maven Plugins :: TomEE Webapp Archetype</name>
+</project>
diff --git a/maven/tomee-webapp-archetype/src/main/resources/META-INF/archetype.xml b/maven/tomee-webapp-archetype/src/main/resources/META-INF/archetype.xml
new file mode 100644
index 0000000..0339b82
--- /dev/null
+++ b/maven/tomee-webapp-archetype/src/main/resources/META-INF/archetype.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<archetype xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0
+ http://maven.apache.org/xsd/archetype-1.0.0.xsd">
+ <id>quickstart</id>
+ <sources>
+ <source>src/main/java/Index.java</source>
+ </sources>
+ <resources>
+ <resource>src/main/webapp/WEB-INF/beans.xml</resource>
+ </resources>
+ <testResources>
+ <resource>src/test/resources/arquillian.xml</resource>
+ </testResources>
+</archetype>
diff --git a/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/pom.xml b/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/pom.xml
new file mode 100644
index 0000000..a6402ce
--- /dev/null
+++ b/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/pom.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>${groupId}</groupId>
+ <artifactId>${artifactId}</artifactId>
+ <version>${version}</version>
+ <packaging>war</packaging>
+ <name>${artifactId} TomEE Webapp</name>
+ <url>http://tomee.apache.org</url>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>javaee-api</artifactId>
+ <version>6.0-4</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- to test with TomEE and Arquillian
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>arquillian-tomee-remote</artifactId>
+ <version>1.5.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.arquillian.junit</groupId>
+ <artifactId>arquillian-junit-container</artifactId>
+ <version>1.0.3.Final</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.11</version>
+ <scope>test</scope>
+ </dependency>
+ -->
+
+ <!-- to test with OpenEJB embedded and Arquillian
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>arquillian-openejb-embedded-4</artifactId>
+ <version>4.5.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.arquillian.junit</groupId>
+ <artifactId>arquillian-junit-container</artifactId>
+ <version>1.0.3.Final</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.11</version>
+ <scope>test</scope>
+ </dependency>
+ -->
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.5.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.12.4</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <failOnMissingWebXml>false</failOnMissingWebXml>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.openejb.maven</groupId>
+ <artifactId>tomee-maven-plugin</artifactId>
+ <version>1.0.1</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <repositories>
+ <repository>
+ <id>apache-snapshot</id>
+ <name>Apache Snapshot Repository</name>
+ <url>https://repository.apache.org/content/groups/snapshots/</url>
+ </repository>
+ </repositories>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+</project>
diff --git a/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/main/java/Index.java b/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/main/java/Index.java
new file mode 100644
index 0000000..5e97d3f
--- /dev/null
+++ b/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/main/java/Index.java
@@ -0,0 +1,33 @@
+/*
+ * 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 ${groupId};
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(urlPatterns = "/index")
+public class Index extends HttpServlet {
+ @Override
+ protected void service(final HttpServletRequest request, final HttpServletResponse response)
+ throws ServletException, IOException {
+ response.getWriter().write("Index");
+ }
+}
\ No newline at end of file
diff --git a/examples/cdi-query/src/main/resources/META-INF/beans.xml b/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/beans.xml
similarity index 100%
rename from examples/cdi-query/src/main/resources/META-INF/beans.xml
rename to maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/beans.xml
diff --git a/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/test/resources/arquillian.xml b/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/test/resources/arquillian.xml
new file mode 100644
index 0000000..3795244
--- /dev/null
+++ b/maven/tomee-webapp-archetype/src/main/resources/archetype-resources/src/test/resources/arquillian.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+
+ 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.
+-->
+<arquillian
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+ <!-- if you decided to use openejb embedded adapter in the pom
+ <container qualifier="openejb-embedded" default="true">
+ <configuration>
+ <property name="properties">
+ my-datasource = new://Resource?type=DataSource
+ my-datasource.JdbcUrl = jdbc:hsqldb:mem:my-datasource
+ my-datasource.UserName = sa
+ my-datasource.Password =
+ </property>
+ </configuration>
+ </container>
+ -->
+ <!-- if you decided to use tomee adapter in the pom
+ <container qualifier="tomee" default="true">
+ <configuration>
+ <property name="httpPort">-1</property>
+ <property name="stopPort">-1</property>
+ <property name="ajpPort">-1</property>
+ <property name="version">${tomee.version}</property>
+ <property name="dir">target/apache-tomee-remote</property>
+ <property name="appWorkingDir">target/arquillian-test-working-dir</property>
+ <property name="properties" />
+ </configuration>
+ </container>
+ -->
+</arquillian>
diff --git a/osgi/apache-karafee/pom.xml b/osgi/apache-karafee/pom.xml
index 819b9cf..265115c 100644
--- a/osgi/apache-karafee/pom.xml
+++ b/osgi/apache-karafee/pom.xml
@@ -21,13 +21,13 @@
<parent>
<artifactId>osgi</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-karafee</artifactId>
<name>OpenEJB :: OSGi :: Apache KarafEE</name>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<packaging>pom</packaging>
<!--
diff --git a/osgi/openejb-core-osgi/pom.xml b/osgi/openejb-core-osgi/pom.xml
index 2912bc3..40a8845 100755
--- a/osgi/openejb-core-osgi/pom.xml
+++ b/osgi/openejb-core-osgi/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>osgi</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-core-osgi</artifactId>
diff --git a/osgi/openejb-feature/pom.xml b/osgi/openejb-feature/pom.xml
index a0a0b28..ed91ba6 100644
--- a/osgi/openejb-feature/pom.xml
+++ b/osgi/openejb-feature/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>osgi</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -68,24 +68,6 @@
</resource>
</resources>
<plugins>
- <!--
- <plugin>
- <groupId>org.apache.karaf.tooling</groupId>
- <artifactId>karaf-maven-plugin</artifactId>
- <version>3.0.1-SNAPSHOT</version>
- <configuration>
- </configuration>
- <executions>
- <execution>
- <id>compile</id>
- <phase>compile</phase>
- <goals>
- <goal>features-generate-descriptor</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
diff --git a/osgi/openejb-karaf-commands/pom.xml b/osgi/openejb-karaf-commands/pom.xml
index 27f2a70..ce86078 100644
--- a/osgi/openejb-karaf-commands/pom.xml
+++ b/osgi/openejb-karaf-commands/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>osgi</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/osgi/openejb-karaf-rebranding/pom.xml b/osgi/openejb-karaf-rebranding/pom.xml
index d89775e..2b67718 100644
--- a/osgi/openejb-karaf-rebranding/pom.xml
+++ b/osgi/openejb-karaf-rebranding/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>osgi</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/osgi/openejb-osgi-tests/pom.xml b/osgi/openejb-osgi-tests/pom.xml
index b28db62..819482a 100644
--- a/osgi/openejb-osgi-tests/pom.xml
+++ b/osgi/openejb-osgi-tests/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>osgi</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/osgi/pom.xml b/osgi/pom.xml
index 8595b0c..c2ab9d7 100644
--- a/osgi/pom.xml
+++ b/osgi/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -41,7 +41,7 @@
<properties>
<karaf.version>2.3.0</karaf.version>
- <karafee.version>1.5.1-SNAPSHOT</karafee.version>
+ <karafee.version>1.5.1</karafee.version>
</properties>
<!-- for debugging pupose
diff --git a/pom.xml b/pom.xml
index edc00f0..1016bc1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,12 +33,10 @@
<artifactId>openejb</artifactId>
<packaging>pom</packaging>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
<name>Apache OpenEJB</name>
- <description>Apache OpenEJB is an open source, modular, configurable and extendable EJB Container System and EJB
- Server.
- </description>
+ <description>Apache OpenEJB is an open source, modular, configurable and extendable EJB Container System and EJB Server.</description>
<url>http://openejb.apache.org/</url>
<inceptionYear>1999</inceptionYear>
@@ -90,8 +88,8 @@
<properties>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
- <tomee.version>1.5.1-SNAPSHOT</tomee.version>
+ <openejb.version>4.5.1</openejb.version>
+ <tomee.version>1.5.1</tomee.version>
<!-- Maven module versions -->
<maven-bundle-plugin.version>2.3.7</maven-bundle-plugin.version>
@@ -119,11 +117,11 @@
<jaxb.version>2.2.6</jaxb.version>
<!-- Used mainly in assembly/openejb-tomcat* projects -->
- <tomcat.bundle.version>7.0.32-SNAPSHOT</tomcat.bundle.version> <!-- don't merge with tomcat.version since we can release it ourself -->
- <tomcat.version>7.0.32</tomcat.version>
+ <tomcat.bundle.version>7.0.34</tomcat.bundle.version> <!-- don't merge with tomcat.version since we can release it ourself -->
+ <tomcat.version>7.0.34</tomcat.version>
<!-- used mainly by jetty modules -->
- <cxf.version>2.7.0</cxf.version>
+ <cxf.version>2.6.3</cxf.version>
<ehcache.version>2.6.0</ehcache.version> <!-- used by cxf for security (replay attack) -->
<jetty.version>7.5.3.v20111011</jetty.version>
<pax-url.version>1.3.5</pax-url.version>
@@ -145,11 +143,11 @@
<junit.version>4.9</junit.version>
<org.apache.axis2.version>1.4.1</org.apache.axis2.version>
<scannotation.version>1.0.2</scannotation.version>
- <org.apache.openwebbeans.version>1.1.6</org.apache.openwebbeans.version>
+ <org.apache.openwebbeans.version>1.1.7</org.apache.openwebbeans.version>
<geronimo.connector.version>3.1.1</geronimo.connector.version>
<geronimo-osgi.version>1.1</geronimo-osgi.version>
<geronimo-javamail_1.4_spec.version>1.7.1</geronimo-javamail_1.4_spec.version>
- <myfaces.version>2.1.9</myfaces.version>
+ <myfaces.version>2.1.10</myfaces.version>
<slf4j.version>1.7.2</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<osgi.framework.version>4.2.0</osgi.framework.version>
@@ -353,6 +351,45 @@
</modules>
</profile>
<profile>
+ <id>style</id>
+ <modules>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>2.9.1</version>
+ <configuration>
+ <sourceDirectory>${project.build.directory}/../container/openejb-core/src/main/java/org/apache/openejb/config</sourceDirectory>
+ <configLocation>checkstyle.xml</configLocation>
+ <consoleOutput>true</consoleOutput>
+ <enableRulesSummary>false</enableRulesSummary>
+ <failsOnError>true</failsOnError>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <repositories>
+ <repository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <id>Codehaus Snapshots</id>
+ <url>http://snapshots.repository.codehaus.org/</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <id>Codehaus Snapshots</id>
+ <url>http://snapshots.repository.codehaus.org/</url>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ <profile>
<id>rat</id>
<modules>
<module>deps</module>
@@ -440,6 +477,14 @@
<!--</repository>-->
<!-- Apache snapshots -->
<repository>
+ <id>OWB-1.1.7</id>
+ <url>https://repository.apache.org/content/repositories/orgapacheopenwebbeans-117/</url>
+ </repository>
+ <repository>
+ <id>tomcat-7.0.34</id>
+ <url>https://repository.apache.org/content/repositories/orgapachetomcat-113/</url>
+ </repository>
+ <repository>
<id>apache-snapshots</id>
<name>Apache Snapshots Repository</name>
<url>http://repository.apache.org/content/groups/snapshots-group</url>
diff --git a/rat.xml b/rat.xml
index 7c5dc11..a6184af 100644
--- a/rat.xml
+++ b/rat.xml
@@ -74,13 +74,11 @@
<exclude name="tomee/tomee-myfaces/src/main/resources/META-INF/services/org.apache.myfaces.spi.FacesConfigResourceProviderFactory"/>
<exclude name="tomee/tomee-mojarra/src/main/resources/META-INF/services/com.sun.faces.spi.injectionprovider" />
<exclude name="tomee/tomee-jdbc/src/test/resources/META-INF/org.apache.openejb.resource.jdbc.cipher.PasswordCipher/Mock" />
- <exclude name="tomee/tomee-webapp/src/main/webapp/lib/jquery/jquery-1.7.2.min.js" /> <!-- minimize so ignored -->
- <exclude name="tomee/tomee-webapp/src/main/webapp/js/jquery/jquery-1.7.1.js"/>
- <exclude name="tomee/tomee-webapp/src/main/webapp/lib/bootstrap/**" />
- <exclude name="tomee/tomee-webapp/src/main/webapp/lib/codemirror/**" />
- <exclude name="tomee/tomee-webapp/src/main/webapp/lib/handlebars/**" />
- <exclude name="tomee/tomee-webapp/src/main/webapp/lib/jquery/**" />
- <exclude name="tomee/tomee-webapp/src/main/webapp/lib/less/**" />
+ <exclude name="tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/**" />
+ <exclude name="tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/**" />
+ <exclude name="tomee/tomee-webapp/src/main/webapp/app/lib/handlebars/**" />
+ <exclude name="tomee/tomee-webapp/src/main/webapp/app/lib/jquery/**" />
+ <exclude name="tomee/tomee-webapp/src/main/webapp/app/lib/less/**" />
<!-- TODO check if that's really excluded -->
<exclude name="tomee/tomee-webapp/src/main/webapp/app/js/templates/**" />
diff --git a/server/openejb-activemq/pom.xml b/server/openejb-activemq/pom.xml
index af22e5e..aa58c70 100644
--- a/server/openejb-activemq/pom.xml
+++ b/server/openejb-activemq/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-activemq</artifactId>
diff --git a/server/openejb-axis/pom.xml b/server/openejb-axis/pom.xml
index a308a84..01e7e5f 100644
--- a/server/openejb-axis/pom.xml
+++ b/server/openejb-axis/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-axis</artifactId>
diff --git a/server/openejb-bonecp/pom.xml b/server/openejb-bonecp/pom.xml
index 9c7fba8..8e3dae0 100644
--- a/server/openejb-bonecp/pom.xml
+++ b/server/openejb-bonecp/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/server/openejb-client/pom.xml b/server/openejb-client/pom.xml
index 8ea54ee..72f5224 100644
--- a/server/openejb-client/pom.xml
+++ b/server/openejb-client/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-client</artifactId>
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java b/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
index 3d7cd75..3916fb2 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
@@ -38,6 +38,8 @@
registerFactory("default", ejbdFactory);
registerFactory("ejbd", ejbdFactory);
registerFactory("ejbds", ejbdFactory);
+ registerFactory("zejbd", ejbdFactory);
+ registerFactory("zejbds", ejbdFactory);
final HttpConnectionFactory httpFactory = new HttpConnectionFactory();
registerFactory("http", httpFactory);
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/FlushableGZIPOutputStream.java b/server/openejb-client/src/main/java/org/apache/openejb/client/FlushableGZIPOutputStream.java
new file mode 100644
index 0000000..2012d19
--- /dev/null
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/FlushableGZIPOutputStream.java
@@ -0,0 +1,141 @@
+/*
+ * 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.client;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.zip.Deflater;
+import java.util.zip.GZIPOutputStream;
+
+/**
+ * Extension of {@link GZIPOutputStream} to workaround for a couple of long
+ * standing JDK bugs
+ * (<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4255743">Bug
+ * 4255743</a> and
+ * <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4813885">Bug
+ * 4813885</a>) so the GZIP'd output can be flushed.
+ */
+public class FlushableGZIPOutputStream extends GZIPOutputStream {
+ public FlushableGZIPOutputStream(OutputStream os) throws IOException {
+ super(os);
+ }
+
+ /**
+ * It is used to reserve one byte of real data so that it can be used when
+ * flushing the stream.
+ */
+ private byte[] lastByte = new byte[1];
+ private boolean hasLastByte = false;
+
+ @Override
+ public void write(byte[] bytes) throws IOException {
+ write(bytes, 0, bytes.length);
+ }
+
+ @Override
+ public synchronized void write(byte[] bytes, int offset, int length)
+ throws IOException {
+ if (length > 0) {
+ flushLastByte();
+ if (length > 1) {
+ super.write(bytes, offset, length - 1);
+ }
+ rememberLastByte(bytes[offset + length - 1]);
+ }
+ }
+
+ @Override
+ public synchronized void write(int i) throws IOException {
+ flushLastByte();
+ rememberLastByte((byte) i);
+ }
+
+ @Override
+ public synchronized void finish() throws IOException {
+ try {
+ flushLastByte();
+ } catch (IOException ignore) {
+ // If our write failed, then trailer write in finish() will fail
+ // with IOException as well, but it will leave Deflater in more
+ // consistent state.
+ }
+ super.finish();
+ }
+
+ @Override
+ public synchronized void close() throws IOException {
+ try {
+ flushLastByte();
+ } catch (IOException ignored) {
+ // Ignore. As OutputStream#close() says, the contract of close()
+ // is to close the stream. It does not matter much if the
+ // stream is not writable any more.
+ }
+ super.close();
+ }
+
+ private void rememberLastByte(byte b) {
+ lastByte[0] = b;
+ hasLastByte = true;
+ }
+
+ private void flushLastByte() throws IOException {
+ if (hasLastByte) {
+ // Clear the flag first, because write() may fail
+ hasLastByte = false;
+ super.write(lastByte, 0, 1);
+ }
+ }
+
+ @Override
+ public synchronized void flush() throws IOException {
+ if (hasLastByte) {
+ // - do not allow the gzip header to be flushed on its own
+ // - do not do anything if there is no data to send
+
+ // trick the deflater to flush
+ /**
+ * Now this is tricky: We force the Deflater to flush its data by
+ * switching compression level. As yet, a perplexingly simple workaround
+ * for
+ * http://developer.java.sun.com/developer/bugParade/bugs/4255743.html
+ */
+ if (!def.finished()) {
+ def.setLevel(Deflater.NO_COMPRESSION);
+ flushLastByte();
+ def.setLevel(Deflater.DEFAULT_COMPRESSION);
+ }
+ }
+ out.flush();
+ }
+
+ /*
+ * Keep on calling deflate until it runs dry. The default implementation
+ * only does it once and can therefore hold onto data when they need to be
+ * flushed out.
+ */
+ @Override
+ protected void deflate() throws IOException {
+ int len;
+ do {
+ len = def.deflate(buf, 0, buf.length);
+ if (len > 0) {
+ out.write(buf, 0, len);
+ }
+ } while (len > 0 || !def.needsInput());
+ }
+}
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/Registry.java b/server/openejb-client/src/main/java/org/apache/openejb/client/Registry.java
index 0cfc40e..7347104 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/Registry.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/Registry.java
@@ -34,7 +34,7 @@
public static <T> Registry<T> create(Class<T> type){
- return new Registry(type);
+ return new Registry<T>(type);
}
private Registry(Class<T> type) {
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java b/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java
index f4e2425..5de2f4c 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java
@@ -40,6 +40,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.zip.GZIPInputStream;
public class SocketConnectionFactory implements ConnectionFactory {
@@ -198,7 +199,8 @@
private final Pool pool;
private final Lock lock = new ReentrantLock();
private OutputStream out;
- private BufferedInputStream in;
+ private InputStream in;
+ private boolean gzip = false;
public SocketConnection(final URI uri, final Pool pool) {
this.uri = uri;
@@ -251,7 +253,8 @@
final InetSocketAddress address = new InetSocketAddress(uri.getHost(), uri.getPort());
try {
- if (uri.getScheme().equalsIgnoreCase("ejbds")) {
+ final String scheme = uri.getScheme();
+ if (scheme.equalsIgnoreCase("ejbds") || scheme.equalsIgnoreCase("zejbds")) {
final SSLSocket sslSocket = (SSLSocket) SSLSocketFactory.getDefault().createSocket();
sslSocket.setEnabledCipherSuites(enabledCipherSuites);
this.socket = sslSocket;
@@ -260,6 +263,10 @@
this.socket = new Socket();
}
+ if (scheme.startsWith("z")) {
+ gzip = true;
+ }
+
this.socket.setTcpNoDelay(true);
this.socket.setSoLinger(true, 10);
this.socket.connect(address, SocketConnectionFactory.this.timeoutSocket);
@@ -319,7 +326,11 @@
/*----------------------------------*/
try {
if (in == null) {
- in = new BufferedInputStream(socket.getInputStream());
+ if (!gzip) {
+ in = new BufferedInputStream(socket.getInputStream());
+ } else {
+ in = new GZIPInputStream(new BufferedInputStream(socket.getInputStream()));
+ }
}
return new Input(in);
@@ -341,7 +352,11 @@
try {
if (out == null) {
- out = new BufferedOutputStream(socket.getOutputStream());
+ if (!gzip) {
+ out = new BufferedOutputStream(socket.getOutputStream());
+ } else {
+ out = new BufferedOutputStream(new FlushableGZIPOutputStream(socket.getOutputStream()));
+ }
}
return new Output(out);
diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java b/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java
index 27c8d14..624b8e7 100644
--- a/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java
+++ b/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java
@@ -147,7 +147,8 @@
delegatingClassloaders = classLoaders;
}
- @Override public Class<?> loadClass(String name) throws ClassNotFoundException {
+ @Override
+ public Class<?> loadClass(String name) throws ClassNotFoundException {
ClassNotFoundException ex = null;
for (ClassLoader cl : delegatingClassloaders) {
try {
diff --git a/server/openejb-client/src/test/java/org/apache/openejb/client/StickyConnectionStrategyIteratorTest.java b/server/openejb-client/src/test/java/org/apache/openejb/client/StickyConnectionStrategyIteratorTest.java
index 09efb28..d3cbbe9 100644
--- a/server/openejb-client/src/test/java/org/apache/openejb/client/StickyConnectionStrategyIteratorTest.java
+++ b/server/openejb-client/src/test/java/org/apache/openejb/client/StickyConnectionStrategyIteratorTest.java
@@ -21,10 +21,6 @@
import java.net.URI;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
/**
* @version $Rev$ $Date$
@@ -64,28 +60,29 @@
Assert.assertEquals(uri, iterable.iterator().next());
}
-// assertIteration(uris, iterable);
+ assertIteration(uris, iterable);
}
private void assertIteration(URI[] uris, Iterable<URI> iterable) {
- List<URI> found = new ArrayList<URI>();
+ ArrayList<URI> found = new ArrayList<URI>();
for (URI uri : iterable) {
- found.add(uri);
+ if (!found.contains(uri)) found.add(uri);
}
Assert.assertEquals(uris.length, found.size());
+
for (URI uri : uris) {
Assert.assertTrue(found.contains(uri));
}
- Assert.assertFalse("Found: " + found + ", Expected: " + Arrays.asList(uris),
- found.get(0).equals(uris[0]) &&
- found.get(1).equals(uris[1]) &&
- found.get(2).equals(uris[2]) &&
- found.get(3).equals(uris[3])
- );
+// Assert.assertTrue("Found: " + found + ", Expected: " + Arrays.asList(uris),
+// found.get(0).equals(uris[0]) &&
+// found.get(1).equals(uris[1]) &&
+// found.get(2).equals(uris[2]) &&
+// found.get(3).equals(uris[3])
+// );
}
diff --git a/server/openejb-common-cli/pom.xml b/server/openejb-common-cli/pom.xml
index 221f65b..a5f8d84 100644
--- a/server/openejb-common-cli/pom.xml
+++ b/server/openejb-common-cli/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/server/openejb-cxf-rs/pom.xml b/server/openejb-cxf-rs/pom.xml
index 033b4cd..0485400 100644
--- a/server/openejb-cxf-rs/pom.xml
+++ b/server/openejb-cxf-rs/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -60,6 +60,10 @@
<artifactId>jsr311-api</artifactId>
</exclusion>
<exclusion>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>javax.ws.rs-api</artifactId>
+ </exclusion>
+ <exclusion>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
</exclusion>
diff --git a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomExceptionMapperTest.java b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomExceptionMapperTest.java
index 697fe8c..c7dbc59 100644
--- a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomExceptionMapperTest.java
+++ b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomExceptionMapperTest.java
@@ -38,7 +38,8 @@
public class CustomExceptionMapperTest {
private static EJBContainer container;
- @BeforeClass public static void start() throws Exception {
+ @BeforeClass
+ public static void start() throws Exception {
final Properties properties = new Properties();
properties.setProperty(DeploymentFilterable.CLASSPATH_INCLUDE, ".*openejb-cxf-rs.*");
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
@@ -46,13 +47,15 @@
container = EJBContainer.createEJBContainer(properties);
}
- @AfterClass public static void close() throws Exception {
+ @AfterClass
+ public static void close() throws Exception {
if (container != null) {
container.close();
}
}
- @Test public void exceptionMapper() {
+ @Test
+ public void exceptionMapper() {
final String response = WebClient.create("http://localhost:4204/openejb-cxf-rs")
.path("/exception-mapper/throw").get(String.class);
assertEquals(FooException.class.getName(), response);
diff --git a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java
index 789b8d1..6b79e35 100644
--- a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java
+++ b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CustomProviderTest.java
@@ -45,7 +45,8 @@
public class CustomProviderTest {
private static EJBContainer container;
- @BeforeClass public static void start() throws Exception {
+ @BeforeClass
+ public static void start() throws Exception {
final Properties properties = new Properties();
properties.setProperty(DeploymentFilterable.CLASSPATH_INCLUDE, ".*openejb-cxf-rs.*");
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
@@ -53,28 +54,34 @@
container = EJBContainer.createEJBContainer(properties);
}
- @AfterClass public static void close() throws Exception {
+ @AfterClass
+ public static void close() throws Exception {
if (container != null) {
container.close();
}
}
- @Test public void customProvider() {
+ @Test
+ public void customProvider() {
String response = WebClient.create("http://localhost:4204/openejb-cxf-rs").accept("openejb/reverse")
- .path("/custom1/reverse").get(String.class);
+ .path("/custom1/reverse").get(String.class);
assertEquals("provider", response);
}
- @Test public void customSpecificProvider() {
+ @Test
+ public void customSpecificProvider() {
String response = WebClient.create("http://localhost:4204/openejb-cxf-rs").accept("openejb/constant")
- .path("/custom2/constant").get(String.class);
+ .path("/custom2/constant").get(String.class);
assertEquals("it works!", response);
}
@Singleton
@Path("/custom1")
public static class CustomService {
- @GET @Path("/reverse") @Produces("openejb/reverse") public String go() {
+ @GET
+ @Path("/reverse")
+ @Produces("openejb/reverse")
+ public String go() {
return "redivorp";
}
}
@@ -82,7 +89,10 @@
@Singleton
@Path("/custom2")
public static class CustomSpecificService {
- @GET @Path("/constant") @Produces("openejb/constant") public String go() {
+ @GET
+ @Path("/constant")
+ @Produces("openejb/constant")
+ public String go() {
return "will be overriden";
}
}
diff --git a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/EjbDeploymentTest.java b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/EjbDeploymentTest.java
index 5b02790..69a5b4e 100644
--- a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/EjbDeploymentTest.java
+++ b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/EjbDeploymentTest.java
@@ -42,7 +42,8 @@
private static EJBContainer container;
private static RESTIsCool service;
- @BeforeClass public static void start() throws Exception {
+ @BeforeClass
+ public static void start() throws Exception {
Properties properties = new Properties();
properties.setProperty(DeploymentFilterable.CLASSPATH_INCLUDE, ".*openejb-cxf-rs.*");
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
@@ -50,23 +51,27 @@
service = (RESTIsCool) container.getContext().lookup("java:/global/openejb-cxf-rs/RESTIsCool");
}
- @AfterClass public static void close() throws Exception {
+ @AfterClass
+ public static void close() throws Exception {
if (container != null) {
container.close();
}
}
- @Test public void normal() {
+ @Test
+ public void normal() {
assertNotNull(service);
assertEquals("ok", service.normal());
}
- @Test public void rest() {
+ @Test
+ public void rest() {
String response = WebClient.create("http://localhost:4204/openejb-cxf-rs").path("/ejb/rest").get(String.class);
assertEquals("ok", response);
}
- @Test public void restParameterInjected() {
+ @Test
+ public void restParameterInjected() {
String response = WebClient.create("http://localhost:4204/openejb-cxf-rs").path("/ejb/param").get(String.class);
assertEquals("true", response);
@@ -74,7 +79,8 @@
assertEquals("foo", response);
}
- @Test public void restFieldInjected() {
+ @Test
+ public void restFieldInjected() {
Boolean response = WebClient.create("http://localhost:4204/openejb-cxf-rs").path("/ejb/field").get(Boolean.class);
assertEquals(true, response.booleanValue());
}
@@ -82,22 +88,32 @@
@Stateless
@Path("/ejb")
public static class RESTIsCool {
- @EJB private SimpleEJB simpleEJB;
- @javax.ws.rs.core.Context Request request;
+ @EJB
+ private SimpleEJB simpleEJB;
+ @javax.ws.rs.core.Context
+ Request request;
- @Path("/normal") @GET public String normal() {
+ @Path("/normal")
+ @GET
+ public String normal() {
return simpleEJB.ok();
}
- @Path("/rest") @GET public String rest() {
+ @Path("/rest")
+ @GET
+ public String rest() {
return simpleEJB.ok();
}
- @Path("/param") @GET public String param(@QueryParam("arg") @DefaultValue("true") String p) {
+ @Path("/param")
+ @GET
+ public String param(@QueryParam("arg") @DefaultValue("true") String p) {
return p;
}
- @Path("/field") @GET public boolean field() {
+ @Path("/field")
+ @GET
+ public boolean field() {
return "GET".equals(request.getMethod());
}
}
diff --git a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/PathParamAtClassLevelTest.java b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/PathParamAtClassLevelTest.java
index 6db924a..4486546 100644
--- a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/PathParamAtClassLevelTest.java
+++ b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/PathParamAtClassLevelTest.java
@@ -17,44 +17,42 @@
package org.apache.openejb.server.cxf.rs;
-import java.util.Properties;
-import javax.ejb.EJB;
-import javax.ejb.Stateless;
-import javax.ejb.embeddable.EJBContainer;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Request;
import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.openejb.OpenEjbContainer;
import org.apache.openejb.config.DeploymentFilterable;
-import org.apache.openejb.server.cxf.rs.beans.SimpleEJB;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
+import javax.ejb.Stateless;
+import javax.ejb.embeddable.EJBContainer;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import java.util.Properties;
+
import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
public class PathParamAtClassLevelTest {
private static EJBContainer container;
- @BeforeClass public static void start() throws Exception {
+ @BeforeClass
+ public static void start() throws Exception {
Properties properties = new Properties();
properties.setProperty(DeploymentFilterable.CLASSPATH_INCLUDE, ".*openejb-cxf-rs.*");
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
container = EJBContainer.createEJBContainer(properties);
}
- @AfterClass public static void close() throws Exception {
+ @AfterClass
+ public static void close() throws Exception {
if (container != null) {
container.close();
}
}
- @Test public void rest() {
+ @Test
+ public void rest() {
String response = WebClient.create("http://localhost:4204/openejb-cxf-rs").path("/match/openejb/test/normal").get(String.class);
assertEquals("openejb", response);
}
@@ -62,7 +60,9 @@
@Stateless
@Path("/match/{name}/test")
public static class DoesItMatchWithPathParamAtClassLevel {
- @Path("/normal") @GET public String normal(@PathParam("name") String name) {
+ @Path("/normal")
+ @GET
+ public String normal(@PathParam("name") String name) {
return name;
}
}
diff --git a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java
index fc2d34c..8cf82ed 100644
--- a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java
+++ b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java
@@ -78,7 +78,8 @@
private static ServiceDaemon daemon;
public static final String BASE_URL = "http://localhost:4204/my-web-app/my-app";
- @BeforeClass public static void start() throws Exception {
+ @BeforeClass
+ public static void start() throws Exception {
WebApp webApp = new WebApp();
webApp.setContextRoot("/my-web-app");
webApp.setId("web");
@@ -116,7 +117,8 @@
final AppContext application = assembler.createApplication(appInfo);
Context ctx = (Context) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class<?>[]{Context.class}, new InvocationHandler() {
- @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (args.length == 1 && args[0].equals("SimpleEJBLocalBean")) {
return new SimpleEJB();
}
@@ -154,7 +156,8 @@
service.start();
}
- @AfterClass public static void close() throws ServiceException {
+ @AfterClass
+ public static void close() throws ServiceException {
if (service != null) {
service.stop();
}
@@ -166,17 +169,20 @@
}
}
- @Test public void first() {
+ @Test
+ public void first() {
String hi = WebClient.create(BASE_URL).path("/first/hi").get(String.class);
assertEquals("Hi from REST World!", hi);
}
- @Test public void second() {
+ @Test
+ public void second() {
String hi = WebClient.create(BASE_URL).path("/second/hi2/2nd").get(String.class);
assertEquals("hi 2nd", hi);
}
- @Test public void expert() throws Exception {
+ @Test
+ public void expert() throws Exception {
Response response = WebClient.create(BASE_URL).path("/expert/still-hi").post("Pink Floyd");
assertEquals(HttpServletResponse.SC_OK, response.getStatus());
@@ -191,15 +197,18 @@
assertEquals("hi Pink Floyd", writer.toString());
}
- @Test public void nonListed() { // default handler from openejb-http
+ @Test
+ public void nonListed() { // default handler from openejb-http
assertEquals("", WebClient.create(BASE_URL).path("/non-listed/yata/foo").get(String.class));
}
- @Test public void hooked() {
+ @Test
+ public void hooked() {
assertEquals(true, WebClient.create(BASE_URL).path("/hooked/post").get(Boolean.class).booleanValue());
}
- @Test public void injectEjb() {
+ @Test
+ public void injectEjb() {
assertEquals(true, WebClient.create(BASE_URL).path("/inject/ejb").get(Boolean.class).booleanValue());
}
}
diff --git a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/RestWithInjections.java b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/RestWithInjections.java
index a531404..1b44b2a 100644
--- a/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/RestWithInjections.java
+++ b/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/RestWithInjections.java
@@ -24,10 +24,14 @@
@Path("/inject")
public class RestWithInjections {
- @EJB private SimpleEJB simple;
- @Context UriInfo uriInfo;
+ @EJB
+ private SimpleEJB simple;
+ @Context
+ UriInfo uriInfo;
- @Path("/ejb") @GET public boolean ejb() {
+ @Path("/ejb")
+ @GET
+ public boolean ejb() {
return simple != null && "ok".equals(simple.ok()) && uriInfo != null;
}
}
diff --git a/server/openejb-cxf-transport/pom.xml b/server/openejb-cxf-transport/pom.xml
index db8ab62..9c1085b 100644
--- a/server/openejb-cxf-transport/pom.xml
+++ b/server/openejb-cxf-transport/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java
index 701f26a..0337618 100644
--- a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java
+++ b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java
@@ -21,12 +21,7 @@
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.cxf.transport.http.DestinationRegistry;
-import org.apache.openejb.server.httpd.HttpRequest;
-import org.apache.openejb.server.httpd.HttpResponse;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.logging.Logger;
@@ -35,7 +30,8 @@
super(bus, registry, endpointInfo, path, true);
}
- @Override public Logger getLogger() {
+ @Override
+ public Logger getLogger() {
return Logger.getLogger(HttpDestination.class.getName());
}
}
diff --git a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java
index abe0df5..e731ec0 100644
--- a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java
+++ b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java
@@ -26,15 +26,16 @@
public class HttpTransportFactory extends HTTPTransportFactory {
public HttpTransportFactory() {
- // no-op
+ // no-op
}
-
+
public HttpTransportFactory(Bus bus) {
setBus(bus);
}
- @Override public Destination getDestination(EndpointInfo endpointInfo) throws IOException {
+ @Override
+ public Destination getDestination(EndpointInfo endpointInfo) throws IOException {
return new HttpDestination(getBus(), getRegistry(), endpointInfo, endpointInfo.getAddress());
}
}
diff --git a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
index 78d8e87..720bf26 100644
--- a/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
+++ b/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
@@ -147,14 +147,14 @@
}
}
- private static List<Feature> createFeatures(final Collection<ServiceInfo> availableServices, final String featuresIds) {
+ private static List<AbstractFeature> createFeatures(final Collection<ServiceInfo> availableServices, final String featuresIds) {
final List<?> features = ServiceInfos.resolve(availableServices, featuresIds.split(","));
for (Object instance : features) {
- if (!Feature.class.isInstance(instance)) {
+ if (!AbstractFeature.class.isInstance(instance)) {
throw new OpenEJBRuntimeException("feature should inherit from " + AbstractFeature.class.getName());
}
}
- return (List<Feature>) features;
+ return (List<AbstractFeature>) features;
}
private static List<Interceptor<? extends Message>> createInterceptors(final Collection<ServiceInfo> availableServices, final String ids) {
@@ -186,7 +186,7 @@
final String featuresIds = properties.getProperty(BUS_PREFIX + FEATURES);
if (featuresIds != null) {
- final List<Feature> features = createFeatures(serviceInfos, featuresIds);
+ final List<AbstractFeature> features = createFeatures(serviceInfos, featuresIds);
if (features != null) {
features.addAll(busImpl.getFeatures());
busImpl.setFeatures(features);
diff --git a/server/openejb-cxf/pom.xml b/server/openejb-cxf/pom.xml
index 15ad8b3..36a2bab 100644
--- a/server/openejb-cxf/pom.xml
+++ b/server/openejb-cxf/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-cxf</artifactId>
diff --git a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/OpenEJBLoginValidator.java b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/OpenEJBLoginValidator.java
index 21394b3..ee8207f 100644
--- a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/OpenEJBLoginValidator.java
+++ b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/OpenEJBLoginValidator.java
@@ -25,13 +25,12 @@
import org.apache.ws.security.validate.UsernameTokenValidator;
import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginException;
-import java.io.IOException;
public class OpenEJBLoginValidator extends UsernameTokenValidator {
- @Override protected void verifyDigestPassword(UsernameToken usernameToken,
- RequestData data) throws WSSecurityException {
+ @Override
+ protected void verifyDigestPassword(UsernameToken usernameToken,
+ RequestData data) throws WSSecurityException {
// check password
super.verifyDigestPassword(usernameToken, data);
diff --git a/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceWithAnUserInterceptorTest.java b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceWithAnUserInterceptorTest.java
index db7d5bc..a8fca38 100644
--- a/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceWithAnUserInterceptorTest.java
+++ b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceWithAnUserInterceptorTest.java
@@ -40,7 +40,8 @@
public class WebServiceWithAnUserInterceptorTest {
private static EJBContainer container;
- @BeforeClass public static void start() {
+ @BeforeClass
+ public static void start() {
final Properties properties = new Properties();
properties.setProperty(DeploymentFilterable.CLASSPATH_INCLUDE, ".*openejb-cxf.*");
properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
@@ -48,11 +49,13 @@
container = EJBContainer.createEJBContainer(properties);
}
- @AfterClass public static void close() {
+ @AfterClass
+ public static void close() {
container.close();
}
- @Test public void test() throws Exception {
+ @Test
+ public void test() throws Exception {
Foo foo = Service.create(
new URL("http://localhost:4204/openejb-cxf/FooImpl?wsdl"),
new QName("http://cxf.server.openejb.apache.org/", "FooImplService"))
@@ -63,7 +66,7 @@
@WebService
@Stateless
- @Interceptors({ BarInterceptor.class })
+ @Interceptors({BarInterceptor.class})
public static class FooImpl implements Foo {
public String hi() {
return "foo";
@@ -76,7 +79,8 @@
}
public static class BarInterceptor {
- @AroundInvoke public Object around(InvocationContext ic) throws Exception {
+ @AroundInvoke
+ public Object around(InvocationContext ic) throws Exception {
return "bar";
}
}
diff --git a/server/openejb-daemon/pom.xml b/server/openejb-daemon/pom.xml
index c867ec5..ddccac4 100644
--- a/server/openejb-daemon/pom.xml
+++ b/server/openejb-daemon/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-daemon</artifactId>
diff --git a/server/openejb-derbynet/pom.xml b/server/openejb-derbynet/pom.xml
index 9f76c48..340b95a 100644
--- a/server/openejb-derbynet/pom.xml
+++ b/server/openejb-derbynet/pom.xml
@@ -24,7 +24,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-derbynet</artifactId>
diff --git a/server/openejb-ejbd/pom.xml b/server/openejb-ejbd/pom.xml
index 26d2a8a..2eba799 100644
--- a/server/openejb-ejbd/pom.xml
+++ b/server/openejb-ejbd/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-ejbd</artifactId>
diff --git a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
index 8f9b4e2..2e8ae19 100644
--- a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
+++ b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbDaemon.java
@@ -20,6 +20,7 @@
import org.apache.openejb.ProxyInfo;
import org.apache.openejb.client.EJBRequest;
import org.apache.openejb.client.EjbObjectInputStream;
+import org.apache.openejb.client.FlushableGZIPOutputStream;
import org.apache.openejb.client.ProtocolMetaData;
import org.apache.openejb.client.RequestType;
import org.apache.openejb.client.ServerMetaData;
@@ -28,8 +29,9 @@
import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.Messages;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
@@ -38,12 +40,12 @@
import java.net.Socket;
import java.rmi.RemoteException;
import java.util.Properties;
+import java.util.zip.GZIPInputStream;
public class EjbDaemon implements org.apache.openejb.spi.ApplicationServer {
private static final ProtocolMetaData PROTOCOL_VERSION = new ProtocolMetaData("3.1");
- private static final Messages _messages = new Messages("org.apache.openejb.server.util.resources");
static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_SERVER_REMOTE, "org.apache.openejb.server.util.resources");
private ClientObjectFactory clientObjectFactory;
@@ -53,10 +55,10 @@
private AuthRequestHandler authHandler;
private ClusterRequestHandler clusterHandler;
- boolean stop = false;
-
static EjbDaemon instance;
+
private ContainerSystem containerSystem;
+ private boolean gzip;
private EjbDaemon() {
}
@@ -78,6 +80,7 @@
jndiHandler = new JndiRequestHandler(this);
authHandler = new AuthRequestHandler(this);
clusterHandler = new ClusterRequestHandler(this);
+ gzip = "true".equalsIgnoreCase(props.getProperty("gzip", "false"));
DiscoveryAgent discovery = SystemInstance.get().getComponent(DiscoveryAgent.class);
if (discovery != null) {
@@ -96,8 +99,12 @@
return;
}
- in = socket.getInputStream();
- out = socket.getOutputStream();
+ in = new BufferedInputStream(socket.getInputStream());
+ out = new BufferedOutputStream(socket.getOutputStream());
+ if (gzip) {
+ in = new GZIPInputStream(new BufferedInputStream(socket.getInputStream()));
+ out = new BufferedOutputStream(new FlushableGZIPOutputStream(socket.getOutputStream()));
+ }
service(in, out);
} finally {
@@ -292,5 +299,8 @@
return clientObjectFactory.getEJBHome(info);
}
+ public boolean isGzip() {
+ return gzip;
+ }
}
diff --git a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbServer.java b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbServer.java
index 8234fa7..3c0297e 100644
--- a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbServer.java
+++ b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/EjbServer.java
@@ -33,17 +33,18 @@
public class EjbServer implements org.apache.openejb.server.ServerService, org.apache.openejb.spi.ApplicationServer {
- private final KeepAliveServer keepAlive;
- private EjbDaemon server;
+ protected KeepAliveServer keepAlive;
+ protected EjbDaemon server;
public EjbServer() {
- keepAlive = new KeepAliveServer(this);
+
}
@Override
public void init(final Properties props) throws Exception {
server = EjbDaemon.getEjbDaemon();
server.init(props);
+ keepAlive = new KeepAliveServer(this, server.isGzip());
}
@Override
diff --git a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java
index d4631ff..8840a6b 100644
--- a/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java
+++ b/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/KeepAliveServer.java
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.server.ejbd;
+import org.apache.openejb.client.FlushableGZIPOutputStream;
import org.apache.openejb.client.KeepAliveStyle;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.server.ServerService;
@@ -43,6 +44,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.zip.GZIPInputStream;
/**
* @version $Rev$ $Date$
@@ -57,13 +59,20 @@
private final ConcurrentHashMap<Thread, Session> sessions = new ConcurrentHashMap<Thread, Session>();
private BlockingQueue<Runnable> threadQueue;
private Timer timer;
+ private final boolean gzip;
public KeepAliveServer() {
this(new EjbServer());
}
+ @Deprecated
public KeepAliveServer(final ServerService service) {
+ this(service, false);
+ }
+
+ public KeepAliveServer(final ServerService service, final boolean gzip) {
this.service = service;
+ this.gzip = gzip;
}
private void closeInactiveSessions() {
@@ -195,8 +204,15 @@
int i = -1;
try {
- final InputStream in = new BufferedInputStream(socket.getInputStream());
- final OutputStream out = new BufferedOutputStream(socket.getOutputStream());
+ final InputStream in;
+ final OutputStream out;
+ if (!gzip) {
+ in = new BufferedInputStream(socket.getInputStream());
+ out = new BufferedOutputStream(socket.getOutputStream());
+ } else {
+ in = new GZIPInputStream(new BufferedInputStream(socket.getInputStream()));
+ out = new BufferedOutputStream(new FlushableGZIPOutputStream(socket.getOutputStream()));
+ }
while (running.get()) {
try {
diff --git a/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbd b/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbd
index 6891a6c..bcb2030 100644
--- a/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbd
+++ b/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbd
@@ -5,3 +5,4 @@
threads = 200
backlog = 200
discovery = ejb:ejbd://{bind}:{port}
+gzip = false
diff --git a/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbds b/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbds
index 9e87e5a..c2a26d2 100644
--- a/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbds
+++ b/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/ejbds
@@ -6,3 +6,4 @@
backlog = 200
secure = true
discovery = ejb:ejbds://{bind}:{port}
+gzip = false
diff --git a/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/ZEjbdTest.java b/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/ZEjbdTest.java
new file mode 100644
index 0000000..06d11db
--- /dev/null
+++ b/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/ZEjbdTest.java
@@ -0,0 +1,75 @@
+/**
+ * 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.server.ejbd;
+
+import org.apache.openejb.client.ClientRuntimeException;
+import org.apache.openejb.client.RemoteInitialContextFactory;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Configuration;
+import org.apache.openejb.junit.EnableServices;
+import org.apache.openejb.junit.Module;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+@EnableServices("ejbd")
+@RunWith(ApplicationComposer.class)
+public class ZEjbdTest {
+ @Configuration
+ public Properties configuration() {
+ final Properties configuration = new Properties();
+ configuration.setProperty("ejbd.gzip", "true");
+ return configuration;
+ }
+
+ @Module
+ public EnterpriseBean bean() {
+ return new SingletonBean(AppClientTest.Orange.class).localBean();
+ }
+
+ @Test
+ public void checkZipIsOn() throws Exception {
+ assertTrue(EjbDaemon.getEjbDaemon().isGzip());
+ }
+
+ @Test
+ public void checkItWorks() throws Exception {
+ remoteCall("zejbd");
+ }
+
+ @Test(expected = ClientRuntimeException.class)
+ public void checkEjbdFailWithAGzipServer() throws Exception {
+ remoteCall("ejbd");
+ }
+
+ private void remoteCall(final String scheme) throws NamingException {
+ final Context ctx = new InitialContext(new Properties() {{
+ setProperty(Context.INITIAL_CONTEXT_FACTORY, RemoteInitialContextFactory.class.getName());
+ setProperty(Context.PROVIDER_URL, scheme + "://localhost:4201");
+ }});
+ assertEquals("hello", ((AppClientTest.OrangeBusinessRemote) ctx.lookup("OrangeRemote")).echo("olleh"));
+ }
+}
diff --git a/server/openejb-hsql/pom.xml b/server/openejb-hsql/pom.xml
index b8cce93..5f4f3fd 100644
--- a/server/openejb-hsql/pom.xml
+++ b/server/openejb-hsql/pom.xml
@@ -24,7 +24,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-hsql</artifactId>
diff --git a/server/openejb-http/pom.xml b/server/openejb-http/pom.xml
index 08e122f..fc6d357 100644
--- a/server/openejb-http/pom.xml
+++ b/server/openejb-http/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-http</artifactId>
diff --git a/server/openejb-multicast/pom.xml b/server/openejb-multicast/pom.xml
index 9d05cb5..65abee0 100644
--- a/server/openejb-multicast/pom.xml
+++ b/server/openejb-multicast/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-multicast</artifactId>
diff --git a/server/openejb-rest/pom.xml b/server/openejb-rest/pom.xml
index 19be96c..3df3a63 100644
--- a/server/openejb-rest/pom.xml
+++ b/server/openejb-rest/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
index 13efa5e..c7415c5 100644
--- a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
+++ b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
@@ -193,10 +193,10 @@
if (hasEjbAndIsNotAManagedBean(restEjbs, o.getClass().getName())) {
// no more a singleton if the ejb is not a singleton...but it is a weird case
- deployEJB(appPrefix, restEjbs.get(o.getClass().getName()).context, additionalProviders, appInfo.services);
+ deployEJB(webApp.contextRoot, appPrefix, restEjbs.get(o.getClass().getName()).context, additionalProviders, appInfo.services);
} else {
pojoConfigurations = PojoUtil.findPojoConfig(pojoConfigurations, appInfo, webApp);
- deploySingleton(appPrefix, o, appInstance, classLoader, additionalProviders,
+ deploySingleton(webApp.contextRoot, appPrefix, o, appInstance, classLoader, additionalProviders,
new ServiceConfiguration(PojoUtil.findConfiguration(pojoConfigurations, o.getClass().getName()), appInfo.services));
}
}
@@ -207,10 +207,10 @@
}
if (hasEjbAndIsNotAManagedBean(restEjbs, clazz.getName())) {
- deployEJB(appPrefix, restEjbs.get(clazz.getName()).context, additionalProviders, appInfo.services);
+ deployEJB(webApp.contextRoot, appPrefix, restEjbs.get(clazz.getName()).context, additionalProviders, appInfo.services);
} else {
pojoConfigurations = PojoUtil.findPojoConfig(pojoConfigurations, appInfo, webApp);
- deployPojo(appPrefix, clazz, appInstance, classLoader, injections, context, owbCtx, additionalProviders,
+ deployPojo(webApp.contextRoot, appPrefix, clazz, appInstance, classLoader, injections, context, owbCtx, additionalProviders,
new ServiceConfiguration(PojoUtil.findConfiguration(pojoConfigurations, clazz.getName()), appInfo.services));
}
}
@@ -220,6 +220,10 @@
}
if (!useApp) {
+ if (webApp.restApplications.isEmpty() || webApp.restApplications.size() > 1) {
+ appPrefix = webApp.contextRoot;
+ } // else keep application prefix
+
final Set<String> restClasses = new HashSet<String>(webApp.restClass);
restClasses.addAll(webApp.ejbRestServices);
@@ -227,16 +231,16 @@
if (restEjbs.containsKey(clazz)) {
final BeanContext ctx = restEjbs.get(clazz).context;
if (hasEjbAndIsNotAManagedBean(restEjbs, clazz)) {
- deployEJB(appPrefix, restEjbs.get(clazz).context, additionalProviders, appInfo.services);
+ deployEJB(webApp.contextRoot, appPrefix, restEjbs.get(clazz).context, additionalProviders, appInfo.services);
} else {
- deployPojo(appPrefix, ctx.getBeanClass(), null, ctx.getClassLoader(), ctx.getInjections(), context,
+ deployPojo(webApp.contextRoot, appPrefix, ctx.getBeanClass(), null, ctx.getClassLoader(), ctx.getInjections(), context,
owbCtx, additionalProviders, new ServiceConfiguration(ctx.getProperties(), appInfo.services));
}
} else {
try {
Class<?> loadedClazz = classLoader.loadClass(clazz);
pojoConfigurations = PojoUtil.findPojoConfig(pojoConfigurations, appInfo, webApp);
- deployPojo(appPrefix, loadedClazz, null, classLoader, injections, context, owbCtx,
+ deployPojo(webApp.contextRoot, appPrefix, loadedClazz, null, classLoader, injections, context, owbCtx,
additionalProviders,
new ServiceConfiguration(PojoUtil.findConfiguration(pojoConfigurations, loadedClazz.getName()), appInfo.services));
} catch (ClassNotFoundException e) {
@@ -293,12 +297,12 @@
for (Map.Entry<String, EJBRestServiceInfo> ejb : restEjbs.entrySet()) {
final BeanContext ctx = ejb.getValue().context;
if (BeanType.MANAGED.equals(ctx.getComponentType())) {
- deployPojo(ejb.getValue().path, ctx.getBeanClass(), null, ctx.getClassLoader(), ctx.getInjections(),
+ deployPojo("", ejb.getValue().path, ctx.getBeanClass(), null, ctx.getClassLoader(), ctx.getInjections(),
ctx.getJndiContext(),
containerSystem.getAppContext(appInfo.appId).getWebBeansContext(),
providers, new ServiceConfiguration(ctx.getProperties(), appInfo.services));
} else {
- deployEJB(ejb.getValue().path, ctx, providers, appInfo.services);
+ deployEJB("", ejb.getValue().path, ctx, providers, appInfo.services);
}
}
restEjbs.clear();
@@ -310,7 +314,7 @@
}
}
- protected Map<String,EJBRestServiceInfo> getRestEjbs(AppInfo appInfo) {
+ protected Map<String, EJBRestServiceInfo> getRestEjbs(AppInfo appInfo) {
Map<String, BeanContext> beanContexts = new HashMap<String, BeanContext>();
for (EjbJarInfo ejbJar : appInfo.ejbJars) {
for (EnterpriseBeanInfo bean : ejbJar.enterpriseBeans) {
@@ -351,19 +355,19 @@
return restEjbs;
}
- private void deploySingleton(String contextRoot, Object o, Application appInstance, ClassLoader classLoader,
+ private void deploySingleton(String web, String contextRoot, Object o, Application appInstance, ClassLoader classLoader,
Collection<Object> additionalProviders, ServiceConfiguration configuration) {
final String nopath = getAddress(contextRoot, o.getClass());
final RsHttpListener listener = createHttpListener();
- final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(contextRoot, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
+ final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(web, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
- services.add(new DeployedService(address.complete, contextRoot, o.getClass().getName()));
+ services.add(new DeployedService(address.complete, web, o.getClass().getName()));
listener.deploySingleton(getFullContext(address.base, contextRoot), o, appInstance, additionalProviders, configuration);
LOGGER.info("deployed REST singleton: " + o);
}
- private void deployPojo(String contextRoot, Class<?> loadedClazz, Application app, ClassLoader classLoader, Collection<Injection> injections,
+ private void deployPojo(String web, String contextRoot, Class<?> loadedClazz, Application app, ClassLoader classLoader, Collection<Injection> injections,
Context context, WebBeansContext owbCtx, Collection<Object> additionalProviders, ServiceConfiguration config) {
if (loadedClazz.isInterface()) {
return;
@@ -371,7 +375,7 @@
final String nopath = getAddress(contextRoot, loadedClazz);
final RsHttpListener listener = createHttpListener();
- final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(contextRoot, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
+ final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(web, listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
services.add(new DeployedService(address.complete, contextRoot, loadedClazz.getName()));
listener.deployPojo(getFullContext(address.base, contextRoot), loadedClazz, app, injections, context, owbCtx,
@@ -380,10 +384,10 @@
LOGGER.info("REST Service: " + address.complete + " -> Pojo " + loadedClazz.getName());
}
- private void deployEJB(String context, BeanContext beanContext, Collection<Object> additionalProviders, Collection<ServiceInfo> serviceInfos) {
+ private void deployEJB(String web, String context, BeanContext beanContext, Collection<Object> additionalProviders, Collection<ServiceInfo> serviceInfos) {
final String nopath = getAddress(context, beanContext.getBeanClass());
final RsHttpListener listener = createHttpListener();
- final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(context, listener, beanContext.getClassLoader(), nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
+ final RsRegistry.AddressInfo address = rsRegistry.createRsHttpListener(web, listener, beanContext.getClassLoader(), nopath.substring(NOPATH_PREFIX.length() - 1), virtualHost);
services.add(new DeployedService(address.complete, context, beanContext.getBeanClass().getName()));
listener.deployEJB(getFullContext(address.base, context), beanContext,
@@ -452,7 +456,7 @@
if (itfs != null) {
for (Class<?> c : itfs) {
usedClass = findPath(c);
- if (usedClass.getAnnotation(Path.class) != null ) {
+ if (usedClass.getAnnotation(Path.class) != null) {
break;
}
}
@@ -542,7 +546,8 @@
}
}
- @Override public void start() throws ServiceException {
+ @Override
+ public void start() throws ServiceException {
SystemInstance.get().setComponent(RESTService.class, this);
beforeStart();
@@ -564,7 +569,8 @@
}
}
- @Override public void stop() throws ServiceException {
+ @Override
+ public void stop() throws ServiceException {
if (assembler != null) {
SystemInstance.get().removeObserver(this);
for (AppInfo appInfo : new ArrayList<AppInfo>(deployedApplications)) {
@@ -577,23 +583,28 @@
}
}
- @Override public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
+ @Override
+ public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
throw new UnsupportedOperationException(getClass().getName() + " cannot be invoked directly");
}
- @Override public void service(Socket socket) throws ServiceException, IOException {
+ @Override
+ public void service(Socket socket) throws ServiceException, IOException {
throw new UnsupportedOperationException(getClass().getName() + " cannot be invoked directly");
}
- @Override public String getIP() {
+ @Override
+ public String getIP() {
return IP;
}
- @Override public int getPort() {
+ @Override
+ public int getPort() {
return PORT;
}
- @Override public void init(Properties props) throws Exception {
+ @Override
+ public void init(Properties props) throws Exception {
virtualHost = props.getProperty("virtualHost");
enabled = ServiceManager.isEnabled(props);
}
diff --git a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java
index 6c9f381..6914b1b 100644
--- a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java
+++ b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java
@@ -22,7 +22,7 @@
import java.util.List;
public interface RsRegistry {
- AddressInfo createRsHttpListener(String root, HttpListener listener, ClassLoader classLoader, String path, String virtualHost);
+ AddressInfo createRsHttpListener(String webContext, HttpListener listener, ClassLoader classLoader, String path, String virtualHost);
HttpListener removeListener(String context);
public static class AddressInfo {
diff --git a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java
index 96ce702..b568cd2 100644
--- a/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java
+++ b/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java
@@ -27,7 +27,7 @@
public class RsRegistryImpl extends OpenEJBHttpRegistry implements RsRegistry {
private Map<String, String> addresses = new HashMap<String, String>();
- @Override public AddressInfo createRsHttpListener(String root, HttpListener listener, ClassLoader classLoader, String path, String virtualHost) {
+ @Override public AddressInfo createRsHttpListener(String webContext, HttpListener listener, ClassLoader classLoader, String path, String virtualHost) {
String address = HttpUtil.selectSingleAddress(getResolvedAddresses(path));
addWrappedHttpListener(listener, classLoader, path);
addresses.put(address, path);
diff --git a/server/openejb-server/pom.xml b/server/openejb-server/pom.xml
index 4cbd1e8..f94d6bb 100644
--- a/server/openejb-server/pom.xml
+++ b/server/openejb-server/pom.xml
@@ -25,7 +25,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-server</artifactId>
diff --git a/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java b/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java
index cb4004b..6053f98 100644
--- a/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java
+++ b/server/openejb-server/src/main/java/org/apache/openejb/server/FilteredServiceManager.java
@@ -45,7 +45,7 @@
realServices.addAll(Arrays.asList("cxf-rs", "httpejbd"));
} else if (wsAliases.contains(service)) {
realServices.addAll(Arrays.asList("cxf", "httpejbd"));
- } else if ("ejbd".equals(service)) {
+ } else if ("http".equals(service)) {
realServices.add("httpejbd");
} else {
realServices.add(service);
diff --git a/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java b/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java
index 4da0a57..1a101a4 100644
--- a/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java
+++ b/server/openejb-server/src/test/java/org/apache/openejb/server/FilteredServiceManagerTest.java
@@ -37,7 +37,7 @@
@Test
public void checkEjbd() {
- final FilteredServiceManager fsm = new FilteredServiceManager(new String[] { "ejbd" });
+ final FilteredServiceManager fsm = new FilteredServiceManager(new String[] { "http" });
assertTrue(fsm.accept("httpejbd"));
}
diff --git a/server/openejb-ssh/pom.xml b/server/openejb-ssh/pom.xml
index 0b2f49a..536dd77 100644
--- a/server/openejb-ssh/pom.xml
+++ b/server/openejb-ssh/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/server/openejb-webservices/pom.xml b/server/openejb-webservices/pom.xml
index 1e37c46..82f9ac5 100644
--- a/server/openejb-webservices/pom.xml
+++ b/server/openejb-webservices/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>server</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>openejb-webservices</artifactId>
diff --git a/server/pom.xml b/server/pom.xml
index 0d0bdfc..960b672 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>server</artifactId>
diff --git a/tck/bval-embedded/pom.xml b/tck/bval-embedded/pom.xml
index 5ceb9b9..c0b1c66 100644
--- a/tck/bval-embedded/pom.xml
+++ b/tck/bval-embedded/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>tck</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tck/bval-tomee/pom.xml b/tck/bval-tomee/pom.xml
index 5857868..cc1b2b0 100644
--- a/tck/bval-tomee/pom.xml
+++ b/tck/bval-tomee/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>tck</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -66,7 +66,7 @@
<groupId>org.apache.openejb</groupId>
<artifactId>apache-tomee</artifactId>
<type>zip</type>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<classifier>webprofile</classifier>
</dependency>
<dependency>
diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml
index adbafcd..a7d6a17 100644
--- a/tck/cdi-embedded/pom.xml
+++ b/tck/cdi-embedded/pom.xml
@@ -19,13 +19,13 @@
<parent>
<artifactId>tck</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cdi-embedded</artifactId>
<packaging>jar</packaging>
<name>OpenEJB :: TCK :: CDI Embedded</name>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<dependencies>
<dependency>
diff --git a/tck/cdi-embedded/src/test/java/org/apache/openejb/tck/cdi/embedded/RequestScopeTestListener.java b/tck/cdi-embedded/src/test/java/org/apache/openejb/tck/cdi/embedded/RequestScopeTestListener.java
deleted file mode 100644
index 096c0e4..0000000
--- a/tck/cdi-embedded/src/test/java/org/apache/openejb/tck/cdi/embedded/RequestScopeTestListener.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.tck.cdi.embedded;
-
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.BeanType;
-import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.spi.ContextsService;
-import org.testng.ITestContext;
-import org.testng.ITestListener;
-import org.testng.ITestResult;
-
-import javax.enterprise.context.RequestScoped;
-
-public class RequestScopeTestListener implements ITestListener {
-
- private boolean entered = false;
- private ThreadContext oldContext;
- private ContextsService contextsService;
-
- @Override
- public void onTestStart(ITestResult iTestResult) {
- entered = true;
- final ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
-
- if (containerSystem == null) return;
-
- BeanContext context = null;
- for (BeanContext beanContext : containerSystem.deployments()) {
- BeanType beanType = BeanType.MANAGED;
- if (beanContext.getComponentType() == beanType) {
- context = beanContext;
- break;
- }
- }
-
- if (context == null) return;
-
- final WebBeansContext webBeansContext = context.getModuleContext().getAppContext().getWebBeansContext();
- contextsService = webBeansContext.getContextsService();
-
- contextsService.startContext(RequestScoped.class, null);
- }
-
- @Override
- public void onTestSuccess(ITestResult iTestResult) {
- exit();
- }
-
- private void exit() {
- try {
- contextsService.endContext(RequestScoped.class, null);
- } catch (Exception e) {
- }
- }
-
- @Override
- public void onTestFailure(ITestResult iTestResult) {
- exit();
- }
-
- @Override
- public void onTestSkipped(ITestResult iTestResult) {
- exit();
- }
-
- @Override
- public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) {
- }
-
- @Override
- public void onStart(ITestContext iTestContext) {
- }
-
- @Override
- public void onFinish(ITestContext iTestContext) {
- }
-}
diff --git a/tck/cdi-embedded/src/test/resources/passing.xml b/tck/cdi-embedded/src/test/resources/passing.xml
index ca58cd6..842079b 100644
--- a/tck/cdi-embedded/src/test/resources/passing.xml
+++ b/tck/cdi-embedded/src/test/resources/passing.xml
@@ -16,9 +16,6 @@
limitations under the License.
-->
<suite name="CDI TCK" verbose="0">
- <listeners>
- <listener class-name="org.apache.openejb.tck.cdi.embedded.RequestScopeTestListener" />
- </listeners>
<test name="CDI TCK">
<packages>
<package name="org.jboss.jsr299.tck.tests.*"/>
diff --git a/tck/cdi-tomee-embedded/pom.xml b/tck/cdi-tomee-embedded/pom.xml
index 234bda6..3be452a 100644
--- a/tck/cdi-tomee-embedded/pom.xml
+++ b/tck/cdi-tomee-embedded/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>tck</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cdi-tomee-embedded</artifactId>
@@ -29,7 +29,7 @@
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-embedded</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
diff --git a/tck/cdi-tomee/pom.xml b/tck/cdi-tomee/pom.xml
index 603a94c..e8e5b3f 100644
--- a/tck/cdi-tomee/pom.xml
+++ b/tck/cdi-tomee/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>tck</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cdi-tomee</artifactId>
@@ -58,7 +58,7 @@
<groupId>org.apache.openejb</groupId>
<artifactId>apache-tomee</artifactId>
<type>zip</type>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<classifier>webprofile</classifier>
</dependency>
<dependency>
diff --git a/tck/cdi-tomee/src/test/resources/passing.xml b/tck/cdi-tomee/src/test/resources/passing.xml
index fb6bc3c..e5dab48 100644
--- a/tck/cdi-tomee/src/test/resources/passing.xml
+++ b/tck/cdi-tomee/src/test/resources/passing.xml
@@ -17,43 +17,8 @@
-->
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
- <packages>
- <package name="org.jboss.jsr299.tck.tests.*"/>
- <package name="org.jboss.jsr299.tck.interceptors.tests.*"/>
- </packages>
<classes>
- <class name="org.jboss.jsr299.tck.tests.context.passivating.broken.dependentScopedProducerFieldReturnsNonSerializableObjectForInjectionIntoStatefulSessionBean.EnterpriseBeanWithIllegalDependencyTest">
- <methods>
- <exclude name="test"/>
- </methods>
- </class>
- <class name="org.jboss.jsr299.tck.tests.context.passivating.broken.dependentScopedProducerMethodReturnsNonSerializableObjectForInjectionIntoStatefulSessionBean.EnterpriseBeanWithIllegalDependencyTest">
- <methods>
- <exclude name="test"/>
- </methods>
- </class>
- <class name="org.jboss.jsr299.tck.tests.context.passivating.broken.enterpriseBeanWithNonPassivatingDecorator.EnterpriseBeanWithNonPassivatingDecoratorTest">
- <methods>
- <exclude name="testEnterpriseBeanWithNonPassivatingDecoratorFails"/>
- </methods>
- </class>
- <class name="org.jboss.jsr299.tck.tests.implementation.enterprise.lifecycle.EnterpriseBeanLifecycleTest">
- <methods>
- <exclude name="testCreateSFSB"/>
- </methods>
- </class>
- <class name="org.jboss.jsr299.tck.tests.lookup.injection.non.contextual.ws.InjectionIntoWebServiceEndPointTest">
- <methods>
- <exclude name="testInjectionIntoWebServiceEndpoint"/>
- </methods>
- </class>
- <!-- see CDI-140 -->
- <class
- name="org.jboss.jsr299.tck.tests.context.passivating.broken.passivatingProducerMethodWithNonPassivatingParameter.PassivatingProducerMethodWithNonPassivatingParameterTest">
- <methods>
- <exclude name="testSimpleDependentWebBeanWithNonSerializableImplementationInjectedIntoProducerMethodParameterWithPassivatingScopeFails"></exclude>
- </methods>
- </class>
+ <class name="org.jboss.jsr299.tck.tests.context.passivating.broken.decoratorWithNonPassivatingBeanConstructor.DecoratorWithNonPassivatingBeanConstructorTest" />
</classes>
</test>
</suite>
diff --git a/tck/pom.xml b/tck/pom.xml
index 2030ba2..36e5bf4 100644
--- a/tck/pom.xml
+++ b/tck/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tck</artifactId>
diff --git a/tck/tck-common/pom.xml b/tck/tck-common/pom.xml
index d075309..8d0aeab 100644
--- a/tck/tck-common/pom.xml
+++ b/tck/tck-common/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>tck</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tck-common</artifactId>
diff --git a/tomee/apache-tomcat/pom.xml b/tomee/apache-tomcat/pom.xml
index 1545e72..2d48313 100644
--- a/tomee/apache-tomcat/pom.xml
+++ b/tomee/apache-tomcat/pom.xml
@@ -24,13 +24,13 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-tomcat</artifactId>
<name>OpenEJB :: TomEE :: Apache Tomcat</name>
- <version>7.0.32-SNAPSHOT</version>
+ <version>7.0.34</version>
<packaging>pom</packaging>
<build>
@@ -106,7 +106,9 @@
<properties>
<!-- using a proxy is generally better -->
- <tomcat.url>http://www.apache.org/dist/tomcat/tomcat-7/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.zip</tomcat.url>
+ <tomcat.url>https://dist.apache.org/repos/dist/dev/tomcat/tomcat-7/v7.0.34/bin/apache-tomcat-7.0.34.zip</tomcat.url>
+<!--
+<tomcat.url>http://www.apache.org/dist/tomcat/tomcat-7/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.zip</tomcat.url>-->
<tomcat.tmp>${project.build.directory}/apache-tomcat-${tomcat.bundle.version}.zip</tomcat.tmp>
<artifact.path>${settings.localRepository}/org/apache/openejb/${project.artifactId}/${project.version}/${project.artifactId}-${project.version}.zip</artifact.path>
</properties>
diff --git a/tomee/apache-tomee-deb-package/pom.xml b/tomee/apache-tomee-deb-package/pom.xml
index 647c194..092844a 100644
--- a/tomee/apache-tomee-deb-package/pom.xml
+++ b/tomee/apache-tomee-deb-package/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/apache-tomee-deb-package/src/main/java/org/apache/tomee/debian/PackageBuilder.java b/tomee/apache-tomee-deb-package/src/main/java/org/apache/tomee/debian/PackageBuilder.java
index 60521ef..17968c0 100644
--- a/tomee/apache-tomee-deb-package/src/main/java/org/apache/tomee/debian/PackageBuilder.java
+++ b/tomee/apache-tomee-deb-package/src/main/java/org/apache/tomee/debian/PackageBuilder.java
@@ -146,7 +146,7 @@
if (file.isDirectory()) {
final File[] children = file.listFiles();
- for (File child : children) {
+ if (null != children) for (File child : children) {
tar(baseDir, checksumWriter, child, os, modeMappings);
}
}
@@ -231,7 +231,7 @@
final int baseDirLength = baseDir.getAbsolutePath().length();
final File[] files = baseDir.listFiles();
- for (File entry : files) {
+ if (null != files) for (File entry : files) {
final String basePath = entry.getAbsolutePath().substring(baseDirLength).replaceAll("\\\\", "/");
final String dest = dirMappings.get(basePath);
@@ -314,7 +314,9 @@
) {
final File expandedTarGz = expandTarGz(sourceTarGz);
- final File dataTarGzFolder = buildDataTarGzFolder(expandedTarGz.listFiles()[0], dirMapping);
+ final File[] files = expandedTarGz.listFiles();
+ final File root = (null != files ? files[0] : expandedTarGz);
+ final File dataTarGzFolder = buildDataTarGzFolder(files[0], dirMapping);
final File md5sums = new File(sourceTarGz.getParent(), "md5sums");
final File data = compressTarGz(
diff --git a/tomee/apache-tomee-deb/pom.xml b/tomee/apache-tomee-deb/pom.xml
index 8661386..d2ef18e 100644
--- a/tomee/apache-tomee-deb/pom.xml
+++ b/tomee/apache-tomee-deb/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-tomee-deb</artifactId>
@@ -34,13 +34,13 @@
<dependency> <!-- to be sure to have it -->
<groupId>org.apache.openejb</groupId>
<artifactId>apache-tomee</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<type>pom</type>
</dependency>
<dependency> <!-- to be sure to have it -->
<groupId>org.apache.openejb</groupId>
<artifactId>apache-tomee-deb-package</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</dependency>
</dependencies>
diff --git a/tomee/apache-tomee/pom.xml b/tomee/apache-tomee/pom.xml
index 33684a2..f106b66 100644
--- a/tomee/apache-tomee/pom.xml
+++ b/tomee/apache-tomee/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>apache-tomee</artifactId>
diff --git a/tomee/build.xml b/tomee/build.xml
index fdccce5..86a6309 100644
--- a/tomee/build.xml
+++ b/tomee/build.xml
@@ -19,7 +19,7 @@
<project name="dev-helper" default="web">
<target name="web">
- <copy verbose="true" todir="apache-tomee/target/apache-tomee-webprofile-1.1.0-SNAPSHOT/webapps/tomee">
+ <copy verbose="true" todir="apache-tomee/target/apache-tomee-webprofile-1.5.1/webapps/tomee">
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.js"/>
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.css"/>
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.html"/>
@@ -27,7 +27,7 @@
</target>
<target name="rs">
- <copy verbose="true" todir="apache-tomee/target/apache-tomee-jaxrs-1.1.0-SNAPSHOT/webapps/tomee">
+ <copy verbose="true" todir="apache-tomee/target/apache-tomee-jaxrs-1.5.1/webapps/tomee">
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.js"/>
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.css"/>
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.html"/>
@@ -35,7 +35,7 @@
</target>
<target name="plus">
- <copy verbose="true" todir="apache-tomee/target/apache-tomee-plus-1.1.0-SNAPSHOT/webapps/tomee">
+ <copy verbose="true" todir="apache-tomee/target/apache-tomee-plus-1.5.1/webapps/tomee">
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.js"/>
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.css"/>
<fileset dir="tomee-webapp/src/main/webapp" includes="**/*.html"/>
diff --git a/tomee/pom.xml b/tomee/pom.xml
index a40c396..4dc6ba5 100644
--- a/tomee/pom.xml
+++ b/tomee/pom.xml
@@ -22,11 +22,11 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tomee</artifactId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<packaging>pom</packaging>
<name>OpenEJB :: TomEE</name>
@@ -183,7 +183,7 @@
</profiles>
<properties>
- <openejb.version>4.5.1-SNAPSHOT</openejb.version>
+ <openejb.version>4.5.1</openejb.version>
</properties>
</project>
diff --git a/tomee/tomee-catalina/pom.xml b/tomee/tomee-catalina/pom.xml
index 04c2b3e..ad12d44 100644
--- a/tomee/tomee-catalina/pom.xml
+++ b/tomee/tomee-catalina/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tomee-catalina</artifactId>
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
index cdef2d7..68e433f 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/GlobalListenerSupport.java
@@ -27,9 +27,6 @@
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardServer;
-import org.apache.catalina.deploy.ContextResource;
-import org.apache.catalina.deploy.NamingResources;
-import org.apache.openejb.loader.SystemInstance;
import org.apache.tomee.catalina.cluster.TomEEClusterListener;
import org.apache.tomee.loader.TomcatHelper;
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
index c4b0cbd..22d7008 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
@@ -20,6 +20,7 @@
import org.apache.catalina.LifecycleException;
import org.apache.catalina.loader.WebappClassLoader;
import org.apache.openejb.ClassLoaderUtil;
+import org.apache.openejb.OpenEJB;
import org.apache.openejb.classloader.ClassLoaderConfigurer;
import org.apache.openejb.classloader.WebAppEnricher;
import org.apache.openejb.loader.SystemInstance;
@@ -83,12 +84,29 @@
}
}
}
+
+ // avoid to redefine classes from server in this classloader is it not already loaded
+ if (URLClassLoaderFirst.shouldSkip(name)) {
+ try {
+ return OpenEJB.class.getClassLoader().loadClass(name);
+ } catch (ClassNotFoundException e) {
+ return super.loadClass(name);
+ }
+ }
return super.loadClass(name);
}
public void internalStop() throws LifecycleException {
if (isStarted()) {
- super.stop();
+ // reset classloader because of tomcat classloaderlogmanager
+ // to be sure we reset the right loggers
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(this);
+ try {
+ super.stop();
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
+ }
}
}
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
index 55f9eaf..ee08ccf 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
@@ -35,6 +35,7 @@
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.URLs;
+import org.apache.tomcat.util.digester.Digester;
import org.apache.tomee.common.NamingUtil;
import org.apache.tomee.common.ResourceFactory;
@@ -60,7 +61,6 @@
private static final String ADJUST_DATASOURCE_JNDI_NAMES = SystemInstance.get().getProperty("tomee.resources.adjust-web-xml-jndi-name", "true");
private TomcatWebAppBuilder.StandardContextInfo info;
- private boolean configureStartOk = false;
// processAnnotationXXX is called for each folder of WEB-INF
// since we store all classes in WEB-INF we will do it only once so use this boolean to avoid multiple processing
@@ -73,14 +73,26 @@
@Override
public void configureStart() {
- if (configureStartOk) {
- return;
- }
super.configureStart();
-
adjustDataSourceNameIfNecessary(); // doing it here to potentially factorize resource id resolution
+ }
- configureStartOk = true;
+ @Override
+ protected void contextConfig(final Digester digester) {
+ final NamingResources resources;
+ if (context != null) {
+ resources = context.getNamingResources();
+ } else {
+ resources = null;
+ }
+
+ if (resources instanceof OpenEJBNamingResource) {
+ ((OpenEJBNamingResource) resources).setTomcatResource(true);
+ }
+ super.contextConfig(digester);
+ if (resources instanceof OpenEJBNamingResource) {
+ ((OpenEJBNamingResource) resources).setTomcatResource(false);
+ }
}
private void adjustDataSourceNameIfNecessary() {
@@ -226,7 +238,6 @@
super.processAnnotations(fragments, handlesTypesOnly);
}
-
@Override
protected void processAnnotationsFile(File file, WebXml fragment, boolean handlesTypesOnly) {
final WebAppInfo webAppInfo = info.get();
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBNamingResource.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBNamingResource.java
index 783b5f9..37d6ff8 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBNamingResource.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBNamingResource.java
@@ -27,9 +27,15 @@
import org.apache.catalina.deploy.NamingResources;
import org.apache.catalina.deploy.ResourceBase;
+import java.util.ArrayList;
+import java.util.Collection;
+
public class OpenEJBNamingResource extends NamingResources {
private static final String JAVA_PREFIX = "java:";
+ private boolean isTomcatResource = false;
+ private final Collection<ResourceBase> tomcatResources = new ArrayList<ResourceBase>();
+
@Override
public void addEnvironment(ContextEnvironment environment) {
normalize(environment);
@@ -58,6 +64,9 @@
public void addResource(ContextResource ref) {
normalize(ref);
super.addResource(ref);
+ if (isTomcatResource) {
+ pushResourceToAddInOpenEJB(ref);
+ }
}
@Override
@@ -94,4 +103,16 @@
ref.setType("");
}
}
+
+ public void setTomcatResource(final boolean tomcatResource) {
+ isTomcatResource = tomcatResource;
+ }
+
+ private void pushResourceToAddInOpenEJB(final ContextResource ref) {
+ tomcatResources.add(ref);
+ }
+
+ public Collection<ResourceBase> getTomcatResources() {
+ return tomcatResources;
+ }
}
\ No newline at end of file
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBSecurityListener.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBSecurityListener.java
index b4b5388..6c0a95d 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBSecurityListener.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBSecurityListener.java
@@ -33,19 +33,23 @@
request = req;
}
- @Override public void onComplete(AsyncEvent asyncEvent) throws IOException {
+ @Override
+ public void onComplete(AsyncEvent asyncEvent) throws IOException {
exit();
}
- @Override public void onError(AsyncEvent asyncEvent) throws IOException {
+ @Override
+ public void onError(AsyncEvent asyncEvent) throws IOException {
exit();
}
- @Override public void onStartAsync(AsyncEvent asyncEvent) throws IOException {
+ @Override
+ public void onStartAsync(AsyncEvent asyncEvent) throws IOException {
enter();
}
- @Override public void onTimeout(AsyncEvent asyncEvent) throws IOException {
+ @Override
+ public void onTimeout(AsyncEvent asyncEvent) throws IOException {
exit();
}
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/SimpleTomEETcpCluster.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/SimpleTomEETcpCluster.java
new file mode 100644
index 0000000..699b90d
--- /dev/null
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/SimpleTomEETcpCluster.java
@@ -0,0 +1,65 @@
+/*
+ * 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.tomee.catalina;
+
+import org.apache.catalina.Valve;
+import org.apache.catalina.ha.ClusterListener;
+import org.apache.catalina.ha.tcp.SimpleTcpCluster;
+import org.apache.tomee.catalina.cluster.TomEEClusterListener;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+public class SimpleTomEETcpCluster extends SimpleTcpCluster {
+ public SimpleTomEETcpCluster(final SimpleTcpCluster from) {
+ clusterListeners = new ArrayList<ClusterListener>(Arrays.asList(from.findClusterListeners()));
+
+ setClusterName(from.getClusterName());
+ setContainer(from.getContainer());
+ setNotifyLifecycleListenerOnFailure(from.isNotifyLifecycleListenerOnFailure());
+
+ setChannelSendOptions(from.getChannelSendOptions());
+ setChannelStartOptions(from.getChannelStartOptions());
+ setHeartbeatBackgroundEnabled(from.isHeartbeatBackgroundEnabled());
+ setChannel(from.getChannel());
+ getManagers().putAll(from.getManagers());
+ setManagerTemplate(from.getManagerTemplate());
+ setClusterDeployer(from.getClusterDeployer());
+
+ for (Valve valve : from.getValves()) {
+ addValve(valve);
+ }
+
+ final Iterator<String> propertyNames = from.getPropertyNames();
+ while (propertyNames.hasNext()) {
+ String next = propertyNames.next();
+ setProperty(next, from.getProperty(next));
+ }
+ }
+
+ @Override
+ protected void checkDefaults() {
+ final List<ClusterListener> currentListeners = clusterListeners;
+ if (currentListeners.size() == 1 && currentListeners.iterator().next() == TomEEClusterListener.INSTANCE) {
+ currentListeners.clear();
+ }
+ super.checkDefaults();
+ addClusterListener(TomEEClusterListener.INSTANCE);
+ }
+}
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEServiceManager.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEServiceManager.java
index d7f345a..747a50e 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEServiceManager.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEServiceManager.java
@@ -26,9 +26,9 @@
@Override
protected boolean accept(final String serviceName) {
// managed manually or done in a different way in TomEE
- return !"httpejbd".equals(serviceName)
- && !"ejbd".equals(serviceName)
- && !"ejbds".equals(serviceName)
- && !"admin".equals(serviceName);
+ return !"httpejbd".equalsIgnoreCase(serviceName)
+ && !"ejbd".equalsIgnoreCase(serviceName)
+ && !"ejbds".equalsIgnoreCase(serviceName)
+ && !"admin".equalsIgnoreCase(serviceName);
}
}
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java
index 8dc484a..33ee1d8 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java
@@ -22,7 +22,8 @@
import org.apache.catalina.core.StandardContext;
public class TomcatJavaJndiBinder implements LifecycleListener {
- @Override public void lifecycleEvent(LifecycleEvent event) {
+ @Override
+ public void lifecycleEvent(LifecycleEvent event) {
Object source = event.getSource();
if (source instanceof StandardContext) {
final StandardContext context = (StandardContext) source;
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
index ca732ef..566d559 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
@@ -70,6 +70,7 @@
import javax.naming.Binding;
import javax.naming.Context;
import javax.naming.LinkRef;
+import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
import javax.naming.RefAddr;
import javax.persistence.EntityManager;
@@ -132,7 +133,7 @@
this.useCrossClassLoaderRef = useCrossClassLoaderRef;
}
- public void mergeJndi(final Collection<String> tomcatResources) throws OpenEJBException {
+ public void mergeJndi() throws OpenEJBException {
NamingResources naming = standardContext.getNamingResources();
@@ -159,17 +160,6 @@
mergeRef(naming, ref, moduleUri);
}
for (ResourceReferenceInfo ref : webAppInfo.jndiEnc.resourceRefs) {
- String id = ref.referenceName;
- if (id == null) {
- id = ref.resourceID;
- }
- if (id != null && id.startsWith("comp/env/")) {
- id = id.substring("comp/env/".length());
- }
- if (id != null && tomcatResources != null && tomcatResources.contains(id)) {
- continue;
- }
-
mergeRef(naming, ref);
}
for (ResourceEnvReferenceInfo ref : webAppInfo.jndiEnc.resourceEnvRefs) {
@@ -217,6 +207,16 @@
TomcatWebAppBuilder.ContextInfo contextInfo = null;
if (builder != null) {
contextInfo = builder.getContextInfo(standardContext);
+ if (webContext == null && contextInfo.appInfo != null) { // can happen if deployed from apps/
+ for (WebAppInfo webAppInfo : contextInfo.appInfo.webApps) {
+ if (webAppInfo.path != null && webAppInfo.path.equals(standardContext.getDocBase())) {
+ webContext = cs.getWebContext(webAppInfo.moduleId);
+ if (webContext != null) {
+ break;
+ }
+ }
+ }
+ }
}
Collection<String> ignoreNames = null;
if (contextInfo != null) {
@@ -232,8 +232,16 @@
}
Object value = normalize(entry.getValue());
- if (ignoreNames.contains(removeCompEnv(key))) {
- continue;
+ if (ignoreNames.contains(removeCompEnv(key))) { // keep tomcat resources
+ try {
+ // tomcat can get the reference but the bound value
+ // can come from OpenEJB (ejb-jar.xml for instance)
+ // so check the lookup can be resolved before skipping it
+ root.lookup(key);
+ continue;
+ } catch (NameNotFoundException nnfe) {
+ // no-op: let it be rebound or bound
+ }
}
Contexts.createSubcontexts(root, key);
@@ -346,6 +354,7 @@
}
} catch (Exception e) {
+ // no-op
}
return value;
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java
new file mode 100644
index 0000000..e1aeb08
--- /dev/null
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java
@@ -0,0 +1,74 @@
+/*
+ * 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.tomee.catalina;
+
+import org.apache.openejb.assembler.classic.WebAppBuilder;
+import org.apache.openejb.loader.SystemInstance;
+
+import javax.naming.CompositeName;
+import javax.naming.NamingException;
+import javax.naming.spi.ObjectFactory;
+
+public class TomcatResourceFactory {
+ private String jndiName;
+ private String appName;
+ private String factory;
+
+ public void setJndiName(final String jndiName) {
+ this.jndiName = jndiName;
+ }
+
+ public void setAppName(final String appName) {
+ this.appName = appName;
+ }
+
+ public void setFactory(final String factory) {
+ this.factory = factory;
+ }
+
+ public Object create() throws NamingException {
+ final TomcatWebAppBuilder.ContextInfo info = ((TomcatWebAppBuilder) SystemInstance.get().getComponent(WebAppBuilder.class))
+ .getContextInfo(appName);
+ if (info == null || info.standardContext == null) {
+ return null;
+ }
+
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ final ClassLoader tccl = info.standardContext.getLoader().getClassLoader();
+ Thread.currentThread().setContextClassLoader(tccl);
+ try {
+ // lookup can't work because of the lifecycle
+ // return new InitialContext().lookup(jndiName);
+
+ if (factory != null) {
+ final Class<?> clazz = tccl.loadClass(factory);
+ final Object instance = clazz.newInstance();
+ if (instance instanceof ObjectFactory) {
+ // not really used as expected but it matches a bit more than before
+ // context is null since it can't be used at this moment (see TomcatWebAppBuilder lifecycle)
+ return ((ObjectFactory) instance).getObjectInstance(null, new CompositeName(jndiName), null, null);
+ }
+ }
+ } catch (Exception e) {
+ // no-op
+ } finally {
+ Thread.currentThread().setContextClassLoader(loader);
+ }
+
+ return null;
+ }
+}
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index f6eaef2..8d4080c 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -39,18 +39,17 @@
import org.apache.catalina.deploy.ApplicationParameter;
import org.apache.catalina.deploy.ContextEnvironment;
import org.apache.catalina.deploy.ContextResource;
-import org.apache.catalina.deploy.ContextResourceEnvRef;
import org.apache.catalina.deploy.ContextResourceLink;
-import org.apache.catalina.deploy.ContextService;
import org.apache.catalina.deploy.ContextTransaction;
import org.apache.catalina.deploy.NamingResources;
+import org.apache.catalina.deploy.ResourceBase;
import org.apache.catalina.ha.CatalinaCluster;
+import org.apache.catalina.ha.tcp.SimpleTcpCluster;
import org.apache.catalina.loader.WebappClassLoader;
import org.apache.catalina.loader.WebappLoader;
import org.apache.catalina.session.StandardManager;
import org.apache.catalina.startup.Constants;
import org.apache.catalina.startup.ContextConfig;
-import org.apache.catalina.startup.ContextRuleSet;
import org.apache.catalina.startup.HostConfig;
import org.apache.catalina.startup.RealmRuleSet;
import org.apache.catalina.startup.SetAllPropertiesRule;
@@ -72,16 +71,18 @@
import org.apache.openejb.assembler.classic.EjbJarInfo;
import org.apache.openejb.assembler.classic.InjectionBuilder;
import org.apache.openejb.assembler.classic.JndiEncBuilder;
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.assembler.classic.ResourceInfo;
import org.apache.openejb.assembler.classic.ServletInfo;
import org.apache.openejb.assembler.classic.WebAppBuilder;
import org.apache.openejb.assembler.classic.WebAppInfo;
import org.apache.openejb.cdi.CdiBuilder;
import org.apache.openejb.config.AppModule;
-import org.apache.openejb.config.AutoConfig;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.config.DeploymentLoader;
import org.apache.openejb.config.WebModule;
import org.apache.openejb.config.event.BeforeDeploymentEvent;
+import org.apache.openejb.config.sys.Resource;
import org.apache.openejb.core.CoreContainerSystem;
import org.apache.openejb.core.ParentClassLoaderFinder;
import org.apache.openejb.core.WebContext;
@@ -90,12 +91,10 @@
import org.apache.openejb.jee.WebApp;
import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.util.LinkResolver;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.tomcat.InstanceManager;
import org.apache.tomcat.util.digester.Digester;
-import org.apache.tomcat.util.digester.RuleSet;
import org.apache.tomee.catalina.cluster.ClusterObserver;
import org.apache.tomee.catalina.cluster.TomEEClusterListener;
import org.apache.tomee.catalina.event.AfterApplicationCreated;
@@ -114,7 +113,6 @@
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
-import javax.persistence.EntityManagerFactory;
import javax.servlet.ServletContext;
import javax.servlet.SessionTrackingMode;
import javax.servlet.jsp.JspApplicationContext;
@@ -274,9 +272,16 @@
return;
}
- if (cluster instanceof CatalinaCluster) {
- final CatalinaCluster haCluster = (CatalinaCluster) cluster;
- haCluster.addClusterListener(new TomEEClusterListener());
+ Cluster current = cluster;
+ if (cluster instanceof SimpleTcpCluster) {
+ final Container container = cluster.getContainer();
+ current = new SimpleTomEETcpCluster((SimpleTcpCluster) cluster);
+ container.setCluster(current);
+ }
+
+ if (current instanceof CatalinaCluster) {
+ final CatalinaCluster haCluster = (CatalinaCluster) current;
+ haCluster.addClusterListener(TomEEClusterListener.INSTANCE); // better to be a singleton
clusters.add(haCluster);
}
}
@@ -364,7 +369,7 @@
digester.addSetNext("Context/Manager/Store", "setStore", "org.apache.catalina.Store");
digester.addRuleSet(new RealmRuleSet("Context/"));
digester.addCallMethod("Context/WatchedResource", "addWatchedResource", 0);
- digester.addObjectCreate("Context/Resource","org.apache.catalina.deploy.ContextResource");
+ digester.addObjectCreate("Context/Resource", "org.apache.catalina.deploy.ContextResource");
digester.addRule("Context/Resource", new SetAllPropertiesRule());
digester.addRule("Context/Resource", new SetNextNamingRule("addResource", "org.apache.catalina.deploy.ContextResource"));
@@ -384,16 +389,19 @@
// look for context.xml
final File war = new File(webApp.path);
InputStream contextXml = null;
+ URL contextXmlUrl = null;
if (war.isDirectory()) {
- final File cXml = new File(war, Constants.ApplicationContextXml);
+ final File cXml = new File(war, Constants.ApplicationContextXml).getAbsoluteFile();
if (cXml.exists()) {
contextXml = IO.read(cXml);
+ contextXmlUrl = cXml.toURI().toURL();
logger.info("using context file " + cXml.getAbsolutePath());
}
} else { // war
final JarFile warAsJar = new JarFile(war);
final JarEntry entry = warAsJar.getJarEntry(Constants.ApplicationContextXml);
if (entry != null) {
+ contextXmlUrl = new URL("jar:" + war.getAbsoluteFile().toURI().toURL().toExternalForm() + "!/" + Constants.ApplicationContextXml);
contextXml = warAsJar.getInputStream(entry);
}
}
@@ -403,6 +411,7 @@
synchronized (CONTEXT_DIGESTER) {
try {
standardContext = (StandardContext) CONTEXT_DIGESTER.parse(contextXml);
+ standardContext.setConfigFile(contextXmlUrl);
} catch (Exception e) {
logger.error("can't parse context xml for webapp " + webApp.path, e);
standardContext = new StandardContext();
@@ -788,6 +797,21 @@
return new File(new File(System.getProperty("catalina.base"), base), doc); // shouldn't occur
}
+ public ContextInfo getContextInfo(final String appName) {
+ ContextInfo info = null;
+ for (Map.Entry<String, ContextInfo> current : infos.entrySet()) {
+ final String key = current.getKey();
+ if (key.equals(appName)) {
+ info = current.getValue();
+ break;
+ }
+ if (key.endsWith(appName)) {
+ info = current.getValue();
+ }
+ }
+ return info;
+ }
+
public class StandardContextInfo {
private final StandardContext standardContext;
@@ -913,21 +937,35 @@
ContextInfo contextInfo = getContextInfo(standardContext);
ClassLoader classLoader = standardContext.getLoader().getClassLoader();
- final LifecycleListener[] listeners = standardContext.findLifecycleListeners();
- if (listeners != null) { // force init of tomcat resources
- for (LifecycleListener listener : listeners) {
- if (OpenEJBContextConfig.class.isInstance(listener)) {
- ((OpenEJBContextConfig) listener).configureStart();
- }
- }
- }
-
- final Collection<String> tomcatResources = getResourcesNames(standardContext.getNamingResources());
- AutoConfig.PROVIDED_RESOURCES.set(tomcatResources);
- AutoConfig.PROVIDED_RESOURCES_PREFIX.set("java:/comp/env/");
-
if (contextInfo == null) {
final AppModule appModule = loadApplication(standardContext);
+
+ if (standardContext.getNamingResources() instanceof OpenEJBNamingResource) {
+ // add them to the app as resource
+ final OpenEJBNamingResource nr = (OpenEJBNamingResource) standardContext.getNamingResources();
+ for (ResourceBase resource : nr.getTomcatResources()) {
+ final String name = resource.getName();
+
+ boolean found = false;
+ for (ResourceInfo r : SystemInstance.get().getComponent(OpenEjbConfiguration.class).facilities.resources) {
+ if (r.id.equals(name)) {
+ nr.removeResource(name);
+ found = true;
+ logger.warning(name + " resource was defined in both tomcat and tomee so removing tomcat one");
+ break;
+ }
+ }
+
+ if (!found) {
+ final Resource newResource = new Resource(name, resource.getType(), "org.apache.tomee:ProvidedByTomcat");
+ newResource.getProperties().setProperty("jndiName", newResource.getId());
+ newResource.getProperties().setProperty("appName", getId(standardContext));
+ newResource.getProperties().setProperty("factory", (String) resource.getProperty("factory"));
+ appModule.getResources().add(newResource);
+ }
+ }
+ }
+
if (appModule != null) {
try {
contextInfo = addContextInfo(standardContext.getHostname(), standardContext);
@@ -959,8 +997,6 @@
} else {
contextInfo.standardContext = standardContext;
}
- contextInfo.resourceNames = tomcatResources;
-
final String id = getId(standardContext);
WebAppInfo webAppInfo = null;
@@ -1019,7 +1055,7 @@
final TomcatJndiBuilder jndiBuilder = new TomcatJndiBuilder(standardContext, webAppInfo, injections);
NamingUtil.setCurrentContext(standardContext);
try {
- jndiBuilder.mergeJndi(tomcatResources);
+ jndiBuilder.mergeJndi();
} finally {
NamingUtil.setCurrentContext(null);
}
@@ -1069,41 +1105,6 @@
}
}
- private Collection<String> getResourcesNames(final NamingResources namingResources) {
- final Collection<String> names = new ArrayList<String>();
- for (ContextResource resource : namingResources.findResources()) {
- final String name = resource.getName();
- if (name != null) {
- names.add(resource.getName());
- }
- }
- for (ContextEnvironment resource : namingResources.findEnvironments()) {
- final String name = resource.getName();
- if (name != null) {
- names.add(resource.getName());
- }
- }
- for (ContextResourceLink resource : namingResources.findResourceLinks()) {
- final String name = resource.getName();
- if (name != null) {
- names.add(resource.getName());
- }
- }
- for (ContextService resource : namingResources.findServices()) {
- final String name = resource.getName();
- if (name != null) {
- names.add(resource.getName());
- }
- }
- for (ContextResourceEnvRef resource : namingResources.findResourceEnvRefs()) {
- final String name = resource.getName();
- if (name != null) {
- names.add(resource.getName());
- }
- }
- return names;
- }
-
private static void updateInjections(final Collection<Injection> injections, final ClassLoader classLoader, final boolean keepInjection) {
final Iterator<Injection> it = injections.iterator();
final List<Injection> newOnes = new ArrayList<Injection>();
@@ -1144,10 +1145,7 @@
}
container = container.getParent();
}
- if (container != null) {
- return undeploy(standardContext, container);
- }
- return false;
+ return container != null && undeploy(standardContext, container);
}
}
@@ -1315,6 +1313,7 @@
}
}
} catch (NamingException e) {
+ // no-op
}
}
@@ -1657,8 +1656,6 @@
* @return a openejb application module
*/
private AppModule loadApplication(final StandardContext standardContext) {
- final ServletContext servletContext = standardContext.getServletContext();
-
// don't use getId since the app id shouldnt get the host (jndi)
// final TomcatDeploymentLoader tomcatDeploymentLoader = new TomcatDeploymentLoader(standardContext, getId(standardContext));
@@ -1896,7 +1893,6 @@
public StandardContext standardContext;
public HostConfig deployer;
public Host host;
- public LinkResolver<EntityManagerFactory> emfLinkResolver;
public Collection<String> resourceNames = Collections.emptyList();
@Override
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/TomEEClusterListener.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/TomEEClusterListener.java
index f550c0f..221a263 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/TomEEClusterListener.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cluster/TomEEClusterListener.java
@@ -40,6 +40,8 @@
import java.util.concurrent.TimeUnit;
public class TomEEClusterListener extends ClusterListener {
+ public static final TomEEClusterListener INSTANCE = new TomEEClusterListener();
+
private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, TomEEClusterListener.class);
private static final Properties IC_PROPS = new Properties();
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
index e24d444..70c7381 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
@@ -79,7 +79,9 @@
if (info == null || info.standardContext == null) { // error
LOGGER.warning("Can't find " + path);
} else {
- info.standardContext.reload();
+ if (info.standardContext.getReloadable()) {
+ info.standardContext.reload();
+ }
}
}
diff --git a/tomee/tomee-common/pom.xml b/tomee/tomee-common/pom.xml
index fc12c61..da23c22 100644
--- a/tomee/tomee-common/pom.xml
+++ b/tomee/tomee-common/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tomee-common</artifactId>
diff --git a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
index 9f38058..2606603 100644
--- a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
+++ b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
@@ -174,11 +174,24 @@
addTomEELinkToTomcatHome();
+ commentDeploymentDir();
+
if (!alerts.hasErrors()) {
status = Status.REBOOT_REQUIRED;
}
}
+ private void commentDeploymentDir() {
+ final File tomeeXml = new File(paths.getCatalinaConfDir(), "tomee.xml");
+ if (!tomeeXml.exists()) {
+ Installers.writeAll(tomeeXml,
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<tomee>\n" +
+ " <!-- see http://tomee.apache.org/containers-and-resources.html -->\n" +
+ "</tomee\n", alerts);
+ }
+ }
+
private void addTomEELinkToTomcatHome() {
final File home = paths.getHome();
final String indeJsp = Installers.readAll(home, alerts);
@@ -615,6 +628,7 @@
systemPropertiesWriter.write("# tomee.jaxws.oldsubcontext = false\n");
systemPropertiesWriter.write("\n");
+ systemPropertiesWriter.write("# openejb.system.apps = true\n");
systemPropertiesWriter.write("# openejb.servicemanager.enabled = true\n");
systemPropertiesWriter.write("# openejb.jmx.active = false\n");
systemPropertiesWriter.write("# openejb.descriptors.output = false\n");
@@ -645,6 +659,8 @@
systemPropertiesWriter.write("# openejb.jsessionid-support = \n");
systemPropertiesWriter.write("# openejb.myfaces.disable-default-values = true\n");
systemPropertiesWriter.write("# openejb.web.xml.major = \n");
+ systemPropertiesWriter.write("# openjpa.Log = \n");
+ systemPropertiesWriter.write("# openejb.jdbc.log = false\n");
systemPropertiesWriter.write("# javax.persistence.provider = org.apache.openjpa.persistence.PersistenceProviderImpl\n");
systemPropertiesWriter.write("# javax.persistence.transactionType = \n");
systemPropertiesWriter.write("# javax.persistence.jtaDataSource = \n");
diff --git a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java b/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java
deleted file mode 100644
index c67545d..0000000
--- a/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- *
- * 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.tomee.installer;
-
-import static org.apache.tomee.installer.Installer.Status.NONE;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.File;
-import java.io.Writer;
-
-/**
- * Installs OpenEJB into Tomcat.
- * <p/>
- * NOTE: This servlet can not use any classes from OpenEJB since it is installing OpenEJB itself.
- */
-public class InstallerServlet extends HttpServlet {
- protected Paths paths;
- protected Installer installer;
- protected int attempts;
- private ServletConfig servletConfig;
-
- public void init(ServletConfig servletConfig) throws ServletException {
- this.servletConfig = servletConfig;
-
- String path = servletConfig.getServletContext().getRealPath("/");
-
- File openejbWarDir = null;
- if (path != null) {
- openejbWarDir = new File(path);
- }
-
- paths = new Paths(openejbWarDir);
- installer = new Installer(paths);
- }
-
- protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
- doIt(httpServletRequest, httpServletResponse);
- }
-
- protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
- doIt(httpServletRequest, httpServletResponse);
- }
-
- protected void doIt(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- // if they clicked the install button...
- if ("install".equalsIgnoreCase(req.getParameter("action"))) {
- // If not already installed, try to install
- if (installer.getStatus() == NONE) {
- attempts++;
-
- paths.reset();
- installer.reset();
-
- if ("true".equalsIgnoreCase(req.getParameter("auto"))) {
- paths.setCatalinaHomeDir(System.getProperty("catalina.home"));
- paths.setCatalinaBaseDir(System.getProperty("catalina.base"));
- paths.setServerXmlFile(System.getProperty("catalina.base") + "/conf/server.xml");
-
- } else {
- paths.setCatalinaHomeDir(req.getParameter("catalinaHome"));
- paths.setCatalinaBaseDir(req.getParameter("catalinaBase"));
- paths.setServerXmlFile(req.getParameter("serverXml"));
-
- }
-
- if (paths.verify()) {
- installer.installAll();
- }
- }
-
- // send redirect to avoid double post lameness
- res.sendRedirect(req.getRequestURI());
- } else {
-
- req.setAttribute("installer", installer);
- req.setAttribute("paths", paths);
- RequestDispatcher rd = servletConfig.getServletContext().getRequestDispatcher("/installer-view.jsp");
- try {
- rd.forward(req,res);
-
- } catch (Exception e) {
- res.setContentType("text/plain");
- Writer writer = res.getWriter();
- for (String s : installer.getAlerts().getErrors()) {
- writer.write("[ERROR] " + s);
- }
- for (String s : installer.getAlerts().getWarnings()) {
- writer.write("[WARN] " + s);
- }
- for (String s : installer.getAlerts().getInfos()) {
- writer.write("[INFO] " + s);
- }
- }
- }
- }
-
- public void dump(ServletOutputStream out) throws IOException {
- printFile(out, "Catalina home: ", paths.getCatalinaHomeDir());
- printFile(out, "Catalina base: ", paths.getCatalinaBaseDir());
- printFile(out, "Catalina server.xml: ", paths.getServerXmlFile());
- printFile(out, "Catalina conf: ", paths.getCatalinaConfDir());
- printFile(out, "Catalina lib: ", paths.getCatalinaLibDir());
- printFile(out, "Catalina bin: ", paths.getCatalinaBinDir());
- printFile(out, "Catalina catalina.sh: ", paths.getCatalinaShFile());
- printFile(out, "Catalina catalina.bat: ", paths.getCatalinaBatFile());
- printFile(out, "OpenEJB lib: ", paths.getOpenEJBLibDir());
- printFile(out, "OpenEJB loader jar: ", paths.getOpenEJBTomcatLoaderJar());
- printFile(out, "OpenEJB javaagent jar: ", paths.getOpenEJBJavaagentJar());
- }
-
- private void printFile(ServletOutputStream out, String description, File file) throws IOException {
- out.println(description + ":");
- out.println(" " + file);
- }
-}
diff --git a/tomee/tomee-embedded/pom.xml b/tomee/tomee-embedded/pom.xml
index 068dea6..b27e8e7 100644
--- a/tomee/tomee-embedded/pom.xml
+++ b/tomee/tomee-embedded/pom.xml
@@ -23,13 +23,13 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tomee-embedded</artifactId>
<packaging>jar</packaging>
<name>OpenEJB :: TomEE :: TomEE Embedded</name>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
<build>
<plugins>
<plugin>
diff --git a/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml b/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml
index de6ae9b..8e6d948 100644
--- a/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml
+++ b/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml
@@ -40,4 +40,9 @@
<ServiceProvider id="Default ORB" parent="org.apache.openejb.embedded:Default ORB"/>
<ServiceProvider id="Default Mail Session" parent="org.apache.openejb.embedded:Default Mail Session"/>
<ServiceProvider id="Default Remote Jndi Provider" parent="org.apache.openejb.embedded:Default Remote Jndi Provider"/>
+ <ServiceProvider id="ProvidedByTomcat" service="Resource" class-name="org.apache.tomee.catalina.TomcatResourceFactory" factory-name="create">
+ jndiName =
+ appName =
+ factory =
+ </ServiceProvider>
</ServiceJar>
\ No newline at end of file
diff --git a/tomee/tomee-jaxrs-webapp/pom.xml b/tomee/tomee-jaxrs-webapp/pom.xml
index fd66918..4be3da7 100644
--- a/tomee/tomee-jaxrs-webapp/pom.xml
+++ b/tomee/tomee-jaxrs-webapp/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/tomee-jaxrs/pom.xml b/tomee/tomee-jaxrs/pom.xml
index 4679b64..449bf65 100644
--- a/tomee/tomee-jaxrs/pom.xml
+++ b/tomee/tomee-jaxrs/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java b/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java
index dabb20d..9f465ad 100644
--- a/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java
+++ b/tomee/tomee-jaxrs/src/main/java/org/apache/tomee/webservices/TomcatRsRegistry.java
@@ -57,8 +57,8 @@
}
@Override
- public AddressInfo createRsHttpListener(String root, HttpListener listener, ClassLoader classLoader, String completePath, String virtualHost) {
- String path = completePath;
+ public AddressInfo createRsHttpListener(String webContext, HttpListener listener, ClassLoader classLoader, String completePath, String virtualHost) {
+ String path = webContext;
if (path == null) {
throw new NullPointerException("contextRoot is null");
}
@@ -66,27 +66,6 @@
throw new NullPointerException("listener is null");
}
- // parsing could be optimized a bit...
- String realRoot = root;
- if (!root.startsWith("/")) {
- realRoot = "/" + root;
- }
- if (realRoot.length() > 1) {
- int idx = realRoot.substring(1).indexOf('/');
- if (idx > 0) {
- realRoot = realRoot.substring(0, idx + 1);
- }
- }
- if (!path.startsWith("/")) {
- path = "/" + path;
- }
- if (!"/".equals(realRoot)) {
- path = path.substring(realRoot.length(), path.length());
- }
- if (!path.startsWith("/")) {
- path = "/" + path;
- }
-
// find the existing host (we do not auto-create hosts)
if (virtualHost == null) virtualHost = engine.getDefaultHost();
Container host = engine.findChild(virtualHost);
@@ -95,14 +74,14 @@
}
// get the webapp context
- Context context = (Context) host.findChild(realRoot);
+ Context context = (Context) host.findChild(webContext);
- if (context == null && "/".equals(realRoot)) { // ROOT
+ if (context == null && "/".equals(webContext)) { // ROOT
context = (Context) host.findChild("");
}
if (context == null) {
- throw new IllegalStateException("Invalid context '" + realRoot + "'. Cannot find context in host " + host.getName());
+ throw new IllegalStateException("Invalid context '" + webContext + "'. Cannot find context in host " + host.getName());
}
Wrapper wrapper = context.createWrapper();
@@ -110,22 +89,28 @@
wrapper.setName(name);
wrapper.setServletClass(RsServlet.class.getName());
- final String mapping = path.replace("/.*", "/*");
context.addChild(wrapper);
- wrapper.addMapping(mapping);
- context.addServletMapping(mapping, name);
+ wrapper.addMapping(removeWebContext(webContext, completePath));
+ context.addServletMapping(completePath, name);
final String listenerId = wrapper.getName() + RsServlet.class.getName() + listener.hashCode();
wrapper.addInitParameter(HttpListener.class.getName(), listenerId);
context.getServletContext().setAttribute(listenerId, listener);
- path = address(connectors, host.getName(), realRoot);
+ path = address(connectors, host.getName(), webContext);
final String key = address(connectors, host.getName(), completePath);
listeners.put(key, listener);
return new AddressInfo(path, key);
}
+ private static String removeWebContext(final String webContext, final String completePath) {
+ if (webContext == null) {
+ return completePath;
+ }
+ return completePath.substring(webContext.length());
+ }
+
private static String address(final Collection<Connector> connectors, final String host, final String path) {
List<String> addresses = new ArrayList<String>();
for (Connector connector : connectors) {
diff --git a/tomee/tomee-jdbc/pom.xml b/tomee/tomee-jdbc/pom.xml
index 8cde6da..04d05d3 100644
--- a/tomee/tomee-jdbc/pom.xml
+++ b/tomee/tomee-jdbc/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/tomee-loader/pom.xml b/tomee/tomee-loader/pom.xml
index c7f8e01..b0e6788 100644
--- a/tomee/tomee-loader/pom.xml
+++ b/tomee/tomee-loader/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tomee-loader</artifactId>
diff --git a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java
index 9068d75..71b2291 100644
--- a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java
+++ b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java
@@ -19,6 +19,7 @@
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.openejb.config.NewLoaderLogic;
+import org.apache.openejb.util.URLs;
import org.apache.tomcat.JarScanner;
import org.apache.tomcat.JarScannerCallback;
import org.apache.tomcat.util.res.StringManager;
@@ -69,6 +70,10 @@
// scan = scan.exclude(".*/WEB-INF/lib/.*"); // doing it simply prevent ServletContainerInitializer to de discovered
for (URL url : scan) {
+ if (isWebInfClasses(url)) {
+ continue;
+ }
+
// Need to scan this JAR
if (log.isDebugEnabled()) {
log.debug(sm.getString("jarScan.webinflibJarScan", url.toExternalForm()));
@@ -85,6 +90,16 @@
}
}
+ private static boolean isWebInfClasses(final URL url) {
+ final File file = URLs.toFile(url);
+ if (file == null || !file.exists() || ! "classes".equals(file.getName())) {
+ return false;
+ }
+
+ final File webInf = file.getParentFile();
+ return webInf != null && !(!webInf.exists() || !"WEB-INF".equals(webInf.getName()));
+ }
+
/*
* Scan a URL for JARs with the optional extensions to look at all files
* and all directories.
diff --git a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java
index c1ec03e..74cbdc9 100644
--- a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java
+++ b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/OpenEJBListener.java
@@ -41,16 +41,16 @@
/**
* The sole purpose of this class is to call the {@link TomcatEmbedder#embed} method
- *
+ * <p/>
* This is an alternate way to load the Tomcat integration
* This approach is mutually exclussive to the {@link LoaderServlet}
- *
+ * <p/>
* This class does nothing more than scrape around in
* Tomcat and look for the tomee.war so it can call the embedder
- *
+ * <p/>
* This class can be installed in the Tomcat server.xml as an alternate
* way to bootstrap OpenEJB into Tomcat. The benefit of this is that
- * OpenEJB is guaranteed to start before all webapps.
+ * OpenEJB is guaranteed to start before all webapps.
*/
public class OpenEJBListener implements LifecycleListener {
private static final Logger LOGGER = Logger.getLogger(OpenEJBListener.class.getName());
@@ -62,18 +62,19 @@
return listenerInstalled;
}
- public void lifecycleEvent(LifecycleEvent event) {
+ @Override
+ public void lifecycleEvent(final LifecycleEvent event) {
// only install once
if (listenerInstalled || !Lifecycle.AFTER_INIT_EVENT.equals(event.getType())) return;
-
+
try {
- File webappDir = findOpenEjbWar();
+ File webappDir = findOpenEjbWar();
if (webappDir == null && event.getSource() instanceof StandardServer) {
final StandardServer server = (StandardServer) event.getSource();
webappDir = tryToFindAndExtractWar(server);
if (webappDir != null) { // we are using webapp startup
final File exploded = extractDirectory(webappDir);
- if (webappDir != null) {
+ if (exploded != null) {
extract(webappDir, exploded);
}
webappDir = exploded;
@@ -84,7 +85,7 @@
LOGGER.info("found the tomee webapp on " + webappDir.getPath());
final Properties properties = new Properties();
properties.setProperty("tomee.war", webappDir.getAbsolutePath());
- properties.setProperty("openejb.embedder.source", getClass().getSimpleName());
+ properties.setProperty("openejb.embedder.source", OpenEJBListener.class.getSimpleName());
TomcatEmbedder.embed(properties, StandardServer.class.getClassLoader());
listenerInstalled = true;
} else if (logWebappNotFound) {
@@ -111,18 +112,18 @@
return new File(System.getProperty("openejb.war"));
}
- for (Service service : source.findServices()) {
+ for (final Service service : source.findServices()) {
final Container container = service.getContainer();
if (container instanceof StandardEngine) {
final StandardEngine engine = (StandardEngine) container;
- for (Container child : engine.findChildren()) {
+ for (final Container child : engine.findChildren()) {
if (child instanceof StandardHost) {
final StandardHost host = (StandardHost) child;
final File base = hostDir(System.getProperty("catalina.base"), host.getAppBase());
final File[] files = base.listFiles();
if (files != null) {
- for (File file : files) {
+ for (final File file : files) {
if (isTomEEWar(file)) {
return file;
}
@@ -150,39 +151,40 @@
private static File findOpenEjbWar() {
// in Tomcat 5.5 the OpenEjb war is in the server/webapps director
- String catalinaBase = System.getProperty("catalina.base");
- File serverWebapps = new File(catalinaBase, "server/webapps");
+ final String catalinaBase = System.getProperty("catalina.base");
+ final File serverWebapps = new File(catalinaBase, "server/webapps");
File openEjbWar = findOpenEjbWar(serverWebapps);
if (openEjbWar != null) {
return openEjbWar;
}
-
- try {
- // in Tomcat 6 the OpenEjb war is normally in webapps, but we just
- // scan all hosts directories
- for (Service service : TomcatHelper.getServer().findServices()) {
- Container container = service.getContainer();
- if (container instanceof StandardEngine) {
- StandardEngine engine = (StandardEngine) container;
- for (Container child : engine.findChildren()) {
- if (child instanceof StandardHost) {
- StandardHost host = (StandardHost) child;
- final File hostDir = hostDir(catalinaBase, host.getAppBase());
- openEjbWar = findOpenEjbWar(hostDir);
- if (openEjbWar != null) {
- return openEjbWar;
- } else {
- return findOpenEjbWar(host);
- }
- }
- }
- }
- }
- } catch (Exception e) {
- }
-
- return null;
+ try {
+ // in Tomcat 6 the OpenEjb war is normally in webapps, but we just
+ // scan all hosts directories
+ for (final Service service : TomcatHelper.getServer().findServices()) {
+ final Container container = service.getContainer();
+ if (container instanceof StandardEngine) {
+ final StandardEngine engine = (StandardEngine) container;
+ for (final Container child : engine.findChildren()) {
+ if (child instanceof StandardHost) {
+ final StandardHost host = (StandardHost) child;
+ final File hostDir = hostDir(catalinaBase, host.getAppBase());
+
+ openEjbWar = findOpenEjbWar(hostDir);
+ if (openEjbWar != null) {
+ return openEjbWar;
+ } else {
+ return findOpenEjbWar(host);
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ LOGGER.log(Level.WARNING, "OpenEJBListener.findOpenEjbWar: " + e.getMessage());
+ }
+
+ return null;
}
private static File hostDir(final String catalinaBase, final String appBase) {
@@ -193,42 +195,43 @@
return hostDir;
}
- private static File findOpenEjbWar(StandardHost standardHost) {
- //look for openejb war in a Tomcat context
- for(Container container : standardHost.findChildren()) {
- if(container instanceof StandardContext) {
- StandardContext standardContext = (StandardContext)container;
- File contextDocBase = new File(standardContext.getDocBase());
+ private static File findOpenEjbWar(final StandardHost standardHost) {
+ //look for openejb war in a Tomcat context
+ for (final Container container : standardHost.findChildren()) {
+ if (container instanceof StandardContext) {
+ final StandardContext standardContext = (StandardContext) container;
+ File contextDocBase = new File(standardContext.getDocBase());
if (!contextDocBase.isDirectory() && standardContext.getOriginalDocBase() != null) {
contextDocBase = new File(standardContext.getOriginalDocBase());
}
- if(contextDocBase.isDirectory()) {
- File openEjbWar = findOpenEjbWarInContext(contextDocBase);
- if (openEjbWar != null) {
- return openEjbWar;
- }
- }
- }
- }
- return null;
+ if (contextDocBase.isDirectory()) {
+ final File openEjbWar = findOpenEjbWarInContext(contextDocBase);
+ if (openEjbWar != null) {
+ return openEjbWar;
+ }
+ }
+ }
+ }
+ return null;
}
- private static File findOpenEjbWar(File hostDir) {
+ private static File findOpenEjbWar(final File hostDir) {
if (!hostDir.isDirectory()) {
return null;
}
// iterate over the contexts
- for (File contextDir : hostDir.listFiles()) {
- File foundContextDir = findOpenEjbWarInContext(contextDir);
- if(foundContextDir != null) {
- return foundContextDir;
- }
+ final File[] files = hostDir.listFiles();
+ if (null != files) for (final File contextDir : files) {
+ final File foundContextDir = findOpenEjbWarInContext(contextDir);
+ if (foundContextDir != null) {
+ return foundContextDir;
+ }
}
return null;
}
-
- private static File findOpenEjbWarInContext(File contextDir) {
+
+ private static File findOpenEjbWarInContext(final File contextDir) {
// this should be a webapp
if (!new File(contextDir, "WEB-INF").exists()) {
return null;
@@ -236,14 +239,14 @@
// this should be the openejb war...
// make sure it has a lib directory
- File webInfLib = new File(contextDir, "lib");
+ final File webInfLib = new File(contextDir, "lib");
if (!webInfLib.isDirectory()) {
- return null;
+ return null;
}
// iterate over the libs looking for the openejb-loader-*.jar
final File[] files = webInfLib.listFiles();
if (files != null) {
- for (File file : files) {
+ for (final File file : files) {
if (file.getName().startsWith("tomee-catalina-") && file.getName().endsWith(".jar")) {
return contextDir;
}
@@ -260,20 +263,24 @@
LOGGER.info("Extracting openejb webapp from " + src.getAbsolutePath() + " to " + dest.getAbsolutePath());
- dest.mkdirs();
+ if (!dest.mkdirs()) {
+ throw new IOException("Failed to create: " + dest);
+ }
JarFile jarFile = null;
InputStream input = null;
try {
jarFile = new JarFile(src);
- Enumeration jarEntries = jarFile.entries();
+ final Enumeration jarEntries = jarFile.entries();
while (jarEntries.hasMoreElements()) {
- JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
- String name = jarEntry.getName();
- int last = name.lastIndexOf('/');
+ final JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
+ final String name = jarEntry.getName();
+ final int last = name.lastIndexOf('/');
if (last >= 0) {
- File parent = new File(dest, name.substring(0, last));
- parent.mkdirs();
+ final File parent = new File(dest, name.substring(0, last));
+ if (!parent.mkdirs()) {
+ throw new IOException("Failed to create: " + parent);
+ }
}
if (name.endsWith("/")) {
continue;
@@ -284,9 +291,9 @@
BufferedOutputStream output = null;
try {
output = new BufferedOutputStream(new FileOutputStream(file));
- byte buffer[] = new byte[2048];
+ final byte[] buffer = new byte[2048];
while (true) {
- int n = input.read(buffer);
+ final int n = input.read(buffer);
if (n <= 0)
break;
output.write(buffer, 0, n);
@@ -301,9 +308,11 @@
}
}
- long lastModified = jarEntry.getTime();
+ final long lastModified = jarEntry.getTime();
if (lastModified != -1 && lastModified != 0 && file != null) {
- file.setLastModified(lastModified);
+ if (!file.setLastModified(lastModified)) {
+ LOGGER.log(Level.WARNING, "Failed to set last modified time on: " + file.getAbsolutePath());
+ }
}
input.close();
diff --git a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
index 4b28251..5936972 100644
--- a/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
+++ b/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
@@ -39,7 +39,6 @@
import java.net.URL;
import java.net.URLConnection;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
@@ -56,34 +55,32 @@
static {
final Set<String> defaultJarsToSkip = new HashSet<String>();
- String jarList = System.getProperty(Constants.SKIP_JARS_PROPERTY);
+ final String jarList = System.getProperty(Constants.SKIP_JARS_PROPERTY);
if (jarList != null) {
- StringTokenizer tokenizer = new StringTokenizer(jarList, ",");
+ final StringTokenizer tokenizer = new StringTokenizer(jarList, ",");
while (tokenizer.hasMoreElements()) {
defaultJarsToSkip.add(tokenizer.nextToken());
}
}
final Set<String[]> ignoredJarsTokens = new HashSet<String[]>();
- for (String pattern : defaultJarsToSkip) {
+ for (final String pattern : defaultJarsToSkip) {
ignoredJarsTokens.add(Matcher.tokenizePathAsArray(pattern));
}
DEFAULT_JARS_TO_SKIP = ignoredJarsTokens;
}
@Override
- public void scan(ServletContext context, ClassLoader classLoader, JarScannerCallback callback, Set<String> jarsToIgnore) {
+ public void scan(final ServletContext context, final ClassLoader classLoader, final JarScannerCallback callback, final Set<String> jarsToIgnore) {
if ("FragmentJarScannerCallback".equals(callback.getClass().getSimpleName())) {
- EmbeddedJarScanner embeddedJarScanner = new EmbeddedJarScanner();
+ final EmbeddedJarScanner embeddedJarScanner = new EmbeddedJarScanner();
embeddedJarScanner.scan(context, classLoader, callback, jarsToIgnore);
} else if ("TldJarScannerCallback".equals(callback.getClass().getSimpleName())) {
// Scan WEB-INF/lib
- Set<String> dirList = context.getResourcePaths(Constants.WEB_INF_LIB);
+ final Set<String> dirList = context.getResourcePaths(Constants.WEB_INF_LIB);
if (dirList != null) {
- Iterator<String> it = dirList.iterator();
- while (it.hasNext()) {
- String path = it.next();
+ for (final String path : dirList) {
if (path.endsWith(Constants.JAR_EXT) &&
!Matcher.matchPath(DEFAULT_JARS_TO_SKIP,
path.substring(path.lastIndexOf('/') + 1))) {
@@ -92,13 +89,13 @@
try {
// File URLs are always faster to work with so use them
// if available.
- String realPath = context.getRealPath(path);
+ final String realPath = context.getRealPath(path);
if (realPath == null) {
url = context.getResource(path);
} else {
url = (new File(realPath)).toURI().toURL();
}
- process(callback, url);
+ this.process(callback, url);
} catch (IOException e) {
log.warn(sm.getString("jarScan.webinflibFail", url), e);
}
@@ -111,7 +108,7 @@
}
// Scan the classpath
- if (isScanClassPath()) {
+ if (this.isScanClassPath()) {
if (log.isTraceEnabled()) {
log.trace(sm.getString("jarScan.classloaderStart"));
}
@@ -121,10 +118,10 @@
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
final Set<URL> tldFileUrls = TldScanner.scan(loader);
- final Set<URL> jarUlrs = discardFilePaths(tldFileUrls);
+ final Set<URL> jarUlrs = this.discardFilePaths(tldFileUrls);
- for (URL url : jarUlrs) {
- String jarName = getJarName(url);
+ for (final URL url : jarUlrs) {
+ final String jarName = this.getJarName(url);
// Skip JARs known not to be interesting and JARs
// in WEB-INF/lib we have already scanned
@@ -134,7 +131,7 @@
log.debug(sm.getString("jarScan.classloaderJarScan", url));
}
try {
- process(callback, url);
+ this.process(callback, url);
} catch (IOException ioe) {
log.warn(sm.getString(
"jarScan.classloaderFail", url), ioe);
@@ -181,15 +178,15 @@
// super.scan(context, classLoader, callback, newIgnores);
}
- private Set<URL> discardFilePaths(Set<URL> tldFileUrls) {
+ private Set<URL> discardFilePaths(final Set<URL> tldFileUrls) {
final Set<String> jarPaths = new HashSet<String>();
- for (URL tldFileUrl : tldFileUrls) {
+ for (final URL tldFileUrl : tldFileUrls) {
jarPaths.add(URLs.toFilePath(tldFileUrl));
}
final Set<URL> jars = new HashSet<URL>();
- for (String jarPath : jarPaths) {
+ for (final String jarPath : jarPaths) {
try {
final URL url = new File(jarPath).toURI().toURL();
jars.add(url);
@@ -204,7 +201,7 @@
* Scan a URL for JARs with the optional extensions to look at all files
* and all directories.
*/
- private void process(JarScannerCallback callback, URL url) throws IOException {
+ private void process(final JarScannerCallback callback, final URL url) throws IOException {
if (log.isTraceEnabled()) {
log.trace(sm.getString("jarScan.jarUrlStart", url));
@@ -231,13 +228,13 @@
final File f = new File(url.toURI());
- if (f.isFile() && isScanAllFiles()) {
+ if (f.isFile() && this.isScanAllFiles()) {
// Treat this file as a JAR
final URL jarURL = new URL("jar:" + urlStr + "!/");
callback.scan((JarURLConnection) jarURL.openConnection());
- } else if (f.isDirectory() && isScanAllDirectories()) {
+ } else if (f.isDirectory() && this.isScanAllDirectories()) {
final File metainf = new File(f.getAbsoluteFile() + File.separator + "META-INF");
@@ -247,7 +244,7 @@
}
} catch (URISyntaxException e) {
// Wrap the exception and re-throw
- IOException ioe = new IOException();
+ final IOException ioe = new IOException();
ioe.initCause(e);
throw ioe;
}
@@ -260,17 +257,17 @@
/*
* Extract the JAR name, if present, from a URL
*/
- private String getJarName(URL url) {
+ private String getJarName(final URL url) {
String name = null;
- String path = url.getPath();
- int end = path.indexOf(Constants.JAR_EXT);
+ final String path = url.getPath();
+ final int end = path.indexOf(Constants.JAR_EXT);
if (end != -1) {
- int start = path.lastIndexOf('/', end);
+ final int start = path.lastIndexOf('/', end);
name = path.substring(start + 1, end + 4);
- } else if (isScanAllDirectories()) {
- int start = path.lastIndexOf('/');
+ } else if (this.isScanAllDirectories()) {
+ final int start = path.lastIndexOf('/');
name = path.substring(start + 1);
}
diff --git a/tomee/tomee-mojarra/pom.xml b/tomee/tomee-mojarra/pom.xml
index e80b0a9..e9e9ab2 100644
--- a/tomee/tomee-mojarra/pom.xml
+++ b/tomee/tomee-mojarra/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/tomee-myfaces/pom.xml b/tomee/tomee-myfaces/pom.xml
index f19de8f..87cd0e0 100644
--- a/tomee/tomee-myfaces/pom.xml
+++ b/tomee/tomee-myfaces/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/tomee-plus-webapp/pom.xml b/tomee/tomee-plus-webapp/pom.xml
index 5da7498..ae49daf 100644
--- a/tomee/tomee-plus-webapp/pom.xml
+++ b/tomee/tomee-plus-webapp/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/tomee-util/pom.xml b/tomee/tomee-util/pom.xml
index 11ff73d..3237dce 100644
--- a/tomee/tomee-util/pom.xml
+++ b/tomee/tomee-util/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/tomee/tomee-webapp/pom.xml b/tomee/tomee-webapp/pom.xml
index 58c7884..0237467 100644
--- a/tomee/tomee-webapp/pom.xml
+++ b/tomee/tomee-webapp/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tomee-webapp</artifactId>
@@ -31,9 +31,20 @@
<name>OpenEJB :: TomEE :: Webapp</name>
<build>
<plugins>
+ <plugin> <!-- the jar is only for resources and other classes are for the gui -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.4</version>
+ <configuration>
+ <includes>
+ <include>META-INF/**/*</include>
+ <include>juli.properties</include>
+ </includes>
+ </configuration>
+ </plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
- <version>2.2.2</version>
+ <version>2.2.2</version>
<executions>
<execution>
<id>war</id>
@@ -212,7 +223,7 @@
<groupId>org.apache.openejb</groupId>
<artifactId>tomee-common</artifactId>
<version>${tomee.version}</version>
- <scope>runtime</scope>
+ <scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.apache.openejb</groupId>
diff --git a/tomee/tomee-webapp/src/main/assembly/war.xml b/tomee/tomee-webapp/src/main/assembly/war.xml
index c712e74..079a3cb 100644
--- a/tomee/tomee-webapp/src/main/assembly/war.xml
+++ b/tomee/tomee-webapp/src/main/assembly/war.xml
@@ -40,13 +40,14 @@
</includes>
</fileSet>
<fileSet>
- <directory>${basedir}/src/main/webapp</directory>
+ <directory>${project.basedir}/src/main/webapp</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
- <directory>${basedir}/target/classes</directory>
+ <directory>${project.basedir}/target/classes</directory>
<outputDirectory>/</outputDirectory>
<excludes>
+ <exclude>META-INF/org.apache.tomee/**</exclude>
<exclude>org/**</exclude>
<exclude>**/LICENSE</exclude>
<exclude>**/NOTICE</exclude>
@@ -58,6 +59,7 @@
<directory>${basedir}/target/classes</directory>
<outputDirectory>WEB-INF/classes</outputDirectory>
<excludes>
+ <exclude>**/META-INF/org.apache.tomee/service-jar.xml</exclude>
<exclude>**/LICENSE</exclude>
<exclude>**/NOTICE</exclude>
<exclude>**/LICENSE.txt</exclude>
diff --git a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java
index 12ac31f..5bdcd37 100644
--- a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java
+++ b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java
@@ -23,6 +23,7 @@
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
+import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -30,6 +31,7 @@
public class Application {
private static final Application INSTANCE = new Application();
+ private String rootPath;
private final Map<String, Session> sessions = new HashMap<String, Session>();
private Application() {
@@ -40,6 +42,14 @@
return INSTANCE;
}
+ public String getRootPath() {
+ return rootPath;
+ }
+
+ public void setRootPath(String rootPath) {
+ this.rootPath = rootPath;
+ }
+
public Session getExistingSession(String id) {
Session session;
synchronized (this.sessions) {
@@ -53,7 +63,7 @@
synchronized (this.sessions) {
session = this.sessions.get(id);
if (session == null) {
- session = new Session();
+ session = new Session(new File(rootPath));
this.sessions.put(id, session);
}
}
@@ -68,15 +78,21 @@
public class Session {
private Context context;
+ private final File rootFolder;
+
+ public Session(File rootFolder) {
+ this.rootFolder = rootFolder;
+ }
public Context getContext() {
return context;
}
- public Context login(String user, String pass) {
+ public Context login(String user, String pass, String protocol, String port) {
+ final String addr = protocol + "://127.0.0.1:" + port + "/" + this.rootFolder.getName() + "/ejb";
final Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
- props.put("java.naming.provider.url", "http://127.0.0.1:8080/tomee/ejb");
+ props.put("java.naming.provider.url", addr);
props.setProperty(Context.SECURITY_PRINCIPAL, user);
props.setProperty(Context.SECURITY_CREDENTIALS, pass);
try {
diff --git a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java
new file mode 100644
index 0000000..decc453
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java
@@ -0,0 +1,77 @@
+/*
+ * 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.tomee.webapp.command.impl;
+
+import org.apache.tomee.installer.Installer;
+import org.apache.tomee.installer.Paths;
+import org.apache.tomee.webapp.Application;
+import org.apache.tomee.webapp.command.Command;
+import org.apache.tomee.webapp.command.IsProtected;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+@IsProtected
+public class GetStatus implements Command {
+
+ @Override
+ public Object execute(final Map<String, Object> params) throws Exception {
+ final String path = Application.getInstance().getRootPath();
+ File openejbWarDir = null;
+ if (path != null) {
+ openejbWarDir = new File(path);
+ }
+ final Paths paths = new Paths(openejbWarDir);
+
+ final Map<String, Object> json = new HashMap<String, Object>();
+ json.put("isListenerInstalled", Installer.isListenerInstalled());
+ json.put("isAgentInstalled", Installer.isAgentInstalled());
+
+
+ final Map<String, String> strPaths = new HashMap<String, String>();
+ strPaths.put("catalina-conf", getSafePath(paths.getCatalinaConfDir()));
+ strPaths.put("catalina-lib", getSafePath(paths.getCatalinaLibDir()));
+ strPaths.put("catalina-bin", getSafePath(paths.getCatalinaBinDir()));
+ strPaths.put("catalina-catalina-sh", getSafePath(paths.getCatalinaShFile()));
+ strPaths.put("catalina-catalina-bat", getSafePath(paths.getCatalinaBatFile()));
+ strPaths.put("openEJB-lib", getSafePath(paths.getOpenEJBLibDir()));
+ strPaths.put("openEJB-loader-jar", getSafePath(paths.getOpenEJBTomcatLoaderJar()));
+ strPaths.put("openEJB-javaagent-jar", getSafePath(paths.getOpenEJBJavaagentJar()));
+
+
+ final Map<String, String> strMainPaths = new HashMap<String, String>();
+ strMainPaths.put("catalina-home", getSafePath(paths.getCatalinaHomeDir()));
+ strMainPaths.put("catalina-base", getSafePath(paths.getCatalinaBaseDir()));
+ strMainPaths.put("catalina-server-xml", getSafePath(paths.getServerXmlFile()));
+
+ json.put("paths", strPaths);
+ json.put("mainPaths", strMainPaths);
+
+ final Installer installer = new Installer(paths);
+ json.put("installerStatus", installer.getStatus());
+ return json;
+ }
+
+ private String getSafePath(File file) {
+ if (file == null) {
+ return "";
+ }
+ return file.getPath();
+ }
+}
diff --git a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java
index 221b634..1883318 100644
--- a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java
+++ b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/Login.java
@@ -31,10 +31,12 @@
final Application.Session session = Application.getInstance().getSession(sessionId);
final String user = (String) params.get("user");
final String pass = (String) params.get("pass");
+ final String port = (String) params.get("port");
+ final String protocol = (String) params.get("protocol");
final Map<String, Object> result = new HashMap<String, Object>();
- if (session.login(user, pass) == null) {
+ if (session.login(user, pass, protocol, port) == null) {
result.put("loginSuccess", Boolean.FALSE);
} else {
result.put("loginSuccess", Boolean.TRUE);
diff --git a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java
new file mode 100644
index 0000000..9377705
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java
@@ -0,0 +1,141 @@
+/*
+ * 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.tomee.webapp.command.impl;
+
+import org.apache.tomee.installer.Installer;
+import org.apache.tomee.installer.Paths;
+import org.apache.tomee.webapp.Application;
+import org.apache.tomee.webapp.command.Command;
+import org.apache.tomee.webapp.command.IsProtected;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+@IsProtected
+public class RunInstaller implements Command {
+
+ @Override
+ public Object execute(final Map<String, Object> params) throws Exception {
+ final String path = Application.getInstance().getRootPath();
+ File openejbWarDir = null;
+ if (path != null) {
+ openejbWarDir = new File(path);
+ }
+ final Paths paths = new Paths(openejbWarDir);
+ final Installer installer = new Installer(paths);
+
+ final Map<String, Object> json = new HashMap<String, Object>();
+
+ if (Installer.Status.NONE.equals(installer.getStatus())) {
+ paths.reset();
+ installer.reset();
+
+ if (Boolean.valueOf(String.valueOf(params.get("auto")))) {
+ paths.setCatalinaHomeDir(System.getProperty("catalina.home"));
+ paths.setCatalinaBaseDir(System.getProperty("catalina.base"));
+ paths.setServerXmlFile(System.getProperty("catalina.base") + "/conf/server.xml");
+ } else {
+ paths.setCatalinaHomeDir((String) params.get("catalina-home"));
+ paths.setCatalinaBaseDir((String) params.get("catalina-base"));
+ paths.setServerXmlFile((String) params.get("catalina-server-xml"));
+ }
+
+ if (paths.verify()) {
+ installer.installAll();
+ }
+ }
+ json.put("status", installer.getStatus());
+ json.put("errors", installer.getAlerts().getErrors());
+ json.put("warnings", installer.getAlerts().getWarnings());
+ json.put("infos", installer.getAlerts().getInfos());
+
+ final Map<String, Object> test = new HashMap<String, Object>();
+ json.put("tests", test);
+
+ {
+ test.put("hasHome", false);
+ test.put("doesHomeExist", false);
+ test.put("isHomeDirectory", false);
+ test.put("hasLibDirectory", false);
+
+ final String homePath = System.getProperty("openejb.home");
+ if (homePath != null) {
+ test.put("hasHome", true);
+ final File homeDir = new File(homePath);
+ test.put("doesHomeExist", homeDir.exists());
+ if (homeDir.exists()) {
+ test.put("isHomeDirectory", homeDir.isDirectory());
+ final File libDir = new File(homeDir, "lib");
+ test.put("hasLibDirectory", libDir.exists());
+ }
+ }
+ }
+
+ {
+ test.put("wereTheOpenEJBClassesInstalled", false);
+ test.put("wereTheEjbClassesInstalled", false);
+ test.put("wasOpenEJBStarted", false);
+ test.put("canILookupAnything", false);
+
+ try {
+ final ClassLoader myLoader = this.getClass().getClassLoader();
+ Class.forName("org.apache.openejb.OpenEJB", true, myLoader);
+ test.put("wereTheOpenEJBClassesInstalled", true);
+ } catch (Exception e) {
+ // noop
+ }
+
+ try {
+ Class.forName("javax.ejb.EJBHome", true, this.getClass().getClassLoader());
+ test.put("wereTheEjbClassesInstalled", true);
+ } catch (Exception e) {
+ // noop
+ }
+
+ try {
+ final Class openejb = Class.forName("org.apache.openejb.OpenEJB", true, this.getClass().getClassLoader());
+ final Method isInitialized = openejb.getDeclaredMethod("isInitialized");
+ final Boolean running = (Boolean) isInitialized.invoke(openejb);
+ test.put("wasOpenEJBStarted", running);
+ } catch (Exception e) {
+ // noop
+ }
+
+ try {
+ final Properties p = new Properties();
+ p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
+ p.put("openejb.loader", "embed");
+
+ final InitialContext ctx = new InitialContext(p);
+ final Object obj = ctx.lookup("");
+
+ if (obj.getClass().getName().equals("org.apache.openejb.core.ivm.naming.IvmContext")) {
+ test.put("canILookupAnything", true);
+ }
+ } catch (Exception e) {
+ // noop
+ }
+ }
+ return json;
+ }
+}
diff --git a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java
similarity index 63%
rename from tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java
rename to tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java
index 0fe4e28..e4b9101 100644
--- a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java
+++ b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java
@@ -19,21 +19,18 @@
import org.apache.tomee.webapp.Application;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
-import java.util.HashMap;
-import java.util.Map;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
-public class SessionListener implements HttpSessionListener {
-
+public class ApplicationListener implements ServletContextListener {
@Override
- public void sessionCreated(HttpSessionEvent httpSessionEvent) {
- Map<String, Object> objects = new HashMap<String, Object >();
- httpSessionEvent.getSession().setAttribute("objects", objects);
+ public void contextInitialized(ServletContextEvent ev) {
+ final String rootPath = ev.getServletContext().getRealPath("/");
+ Application.getInstance().setRootPath(rootPath);
}
@Override
- public void sessionDestroyed(HttpSessionEvent event) {
- Application.getInstance().removeSession(event.getSession().getId());
+ public void contextDestroyed(ServletContextEvent servletContextEvent) {
+ //no-op
}
}
diff --git a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java
new file mode 100644
index 0000000..394be15
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java
@@ -0,0 +1,55 @@
+/*
+ * 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.tomee.webapp.servlet;
+
+import org.apache.tomee.webapp.JsonExecutor;
+import org.apache.tomee.webapp.command.impl.RunInstaller;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class AutoInstallerServlet extends HttpServlet {
+
+ @Override
+ protected void doPost(HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+ writeJson(req, resp);
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ writeJson(req, resp);
+ }
+
+ private void writeJson(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
+ JsonExecutor.execute(req, resp, new JsonExecutor.Executor() {
+ @Override
+ public void call(Map<String, Object> json) throws Exception {
+ final RunInstaller runInstaller = new RunInstaller();
+ final Map<String, Object> params = new HashMap<String, Object>();
+ params.put("auto", "true");
+ json.put("result", runInstaller.execute(params));
+ }
+ });
+ }
+}
diff --git a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java
index b00ada8..5920608 100644
--- a/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java
+++ b/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java
@@ -31,6 +31,15 @@
@Override
protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+ execute(req, resp);
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ execute(req, resp);
+ }
+
+ private void execute(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
JsonExecutor.execute(req, resp, new JsonExecutor.Executor() {
@Override
public void call(Map<String, Object> json) throws Exception {
@@ -40,4 +49,5 @@
}
});
}
+
}
diff --git a/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml b/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml
index f41fac1..f07fff1 100644
--- a/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml
+++ b/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml
@@ -45,4 +45,9 @@
<ServiceProvider id="Default Mail Session" parent="org.apache.openejb:Default Mail Session"/>
<ServiceProvider id="Default Remote Jndi Provider" parent="org.apache.openejb:Default Remote Jndi Provider"/>
<ServiceProvider id="RoutedDataSource" parent="org.apache.openejb:RoutedDataSource"/>
+ <ServiceProvider id="ProvidedByTomcat" service="Resource" class-name="org.apache.tomee.catalina.TomcatResourceFactory" factory-name="create">
+ jndiName =
+ appName =
+ factory =
+ </ServiceProvider>
</ServiceJar>
diff --git a/tomee/tomee-webapp/src/main/webapp/README.txt b/tomee/tomee-webapp/src/main/webapp/README.txt
index e15a29f..f4507ad 100644
--- a/tomee/tomee-webapp/src/main/webapp/README.txt
+++ b/tomee/tomee-webapp/src/main/webapp/README.txt
@@ -6,24 +6,13 @@
___________________
Installation
===================
-
- The OpenEJB Plugin for Tomcat installation process is fairly simple, so if
- you are comfortable with the command line and Tomcat, the following
- instructions will get you going ASAP; otherwise, please visit the OpenEJB
- Tomcat site for detailed instructions with examples.
- http://openejb.apache.org/tomcat.html
-
-
- Assuming you have a normal working Tomcat 5.5 or 6.x installation:
+ Assuming you have a normal working Tomcat 7.x installation:
1. Copy tomee.war to ${catalina.base}/webapps/tomee.war
(Note: the file must be named tomee.war)
2. Start Tomcat if it is not already running
- 3. (optional) Visit http://localhost:8080/openejb/installer and click the 'install' button
-___________________
-___________________
Support
===================
@@ -32,9 +21,6 @@
Follow this link for other subscription and list information:
http://openejb.apache.org/mailing-lists.html
-
-
-
=========================================================================
== Cryptographic Software Notice ==
=========================================================================
diff --git a/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml b/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
index 474c8c2..4935ed2 100644
--- a/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
+++ b/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
@@ -24,7 +24,7 @@
<display-name>Tomee Application</display-name>
<listener>
- <listener-class>org.apache.tomee.webapp.listeners.SessionListener</listener-class>
+ <listener-class>org.apache.tomee.webapp.listeners.ApplicationListener</listener-class>
</listener>
<servlet>
@@ -50,7 +50,7 @@
</servlet>
<servlet>
<servlet-name>InstallerServlet</servlet-name>
- <servlet-class>org.apache.tomee.installer.InstallerServlet</servlet-class>
+ <servlet-class>org.apache.tomee.webapp.servlet.AutoInstallerServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>FileUploadServlet</servlet-name>
@@ -98,7 +98,7 @@
<!-- ************************************************************************************** -->
<welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
+ <welcome-file>index.html</welcome-file>
</welcome-file-list>
<error-page>
@@ -109,38 +109,4 @@
/error
</location>
</error-page>
- <!-- basic security to replace context.xml and allow remote accesses -->
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Application</web-resource-name>
- <url-pattern>/*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>tomee-admin</role-name>
- </auth-constraint>
- </security-constraint>
-
- <!-- /ejb/* has no auth-constraint. It is has public access. -->
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Server EJB</web-resource-name>
- <url-pattern>/ejb/*</url-pattern>
- </web-resource-collection>
- </security-constraint>
-
- <!-- /socket has no auth-constraint. It is has public access. -->
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Socket</web-resource-name>
- <url-pattern>/socket</url-pattern>
- </web-resource-collection>
- </security-constraint>
-
- <login-config>
- <auth-method>BASIC</auth-method>
- <realm-name>TomEE Webapp</realm-name>
- </login-config>
- <security-role>
- <role-name>tomee-admin</role-name>
- </security-role>
</web-app>
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js b/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js
index fdab536..45d2553 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js
@@ -23,9 +23,10 @@
TOMEE.ApplicationController = function () {
"use strict";
- var channel = TOMEE.ApplicationChannel,
- model = TOMEE.ApplicationModel(),
- view = TOMEE.ApplicationView();
+ var channel = TOMEE.ApplicationChannel;
+ var model = TOMEE.ApplicationModel();
+ var view = TOMEE.ApplicationView();
+ var growl = TOMEE.GrowlNotification();
view.render();
@@ -46,7 +47,13 @@
model.sendMessage({
cmdName:'Login',
user:data.user,
- pass:data.pass
+ pass:data.pass,
+ port:window.location.port,
+ protocol: (function() {
+ var protocol = window.location.protocol;
+ protocol = protocol.replace(':', '');
+ return protocol;
+ })()
});
});
@@ -56,6 +63,12 @@
});
});
+ channel.bind('ui-actions', 'load-status', function () {
+ model.sendMessage({
+ cmdName:'GetStatus'
+ });
+ });
+
channel.bind('ui-actions', 'log-file-selected', function (param) {
model.sendMessage({
cmdName:'GetLog',
@@ -75,8 +88,17 @@
});
});
- channel.bind('server-command-callback', 'RunScript', function (data) {
- //TODO: add growl notification
+ channel.bind('ui-actions', 'openejb-installer-clicked', function (data) {
+ data.cmdName = 'RunInstaller';
+ model.sendMessage(data);
+ });
+
+ channel.bind('server-command-callback-error', 'RunScript', function (data) {
+ growl.showNotification(TOMEE.I18N.get('application.console.run.error'), 'error');
+ });
+
+ channel.bind('ui-actions', 'show-notification', function (data) {
+ growl.showNotification(data.message, data.messageType);
});
channel.bind('server-command-callback', 'Logout', function (data) {
@@ -87,6 +109,20 @@
model.connectSocket();
});
+ channel.bind('server-command-callback-success', 'Login', function (params) {
+ if (params.output.loginSuccess) {
+ growl.showNotification(TOMEE.I18N.get('application.log.hello', {
+ userName:params.params.user
+ }), 'success');
+ } else {
+ growl.showNotification(TOMEE.I18N.get('application.log.bad'), 'error');
+ }
+ });
+
+ channel.bind('server-command-callback-error', 'Login', function (params) {
+ growl.showNotification(TOMEE.I18N.get('application.log.error'), 'error');
+ });
+
return {
};
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js b/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js
index bde48ef..c62bf28 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js
@@ -24,10 +24,15 @@
TOMEE.ApplicationModel = function () {
"use strict";
- var channel = TOMEE.ApplicationChannel,
- appSocket = null,
- reconnectTask = TOMEE.DelayedTask(),
- reconnectDelay = 5000;
+ var channel = TOMEE.ApplicationChannel;
+ var appSocket = null;
+ var reconnectTask = TOMEE.DelayedTask();
+ var reconnectDelay = 5000;
+ var urlBase = window.document.URL;
+
+ urlBase = urlBase.replace(new RegExp('^' + window.location.protocol + '//'), '');
+ urlBase = urlBase.replace(new RegExp('^' + window.document.location.host), '');
+ urlBase = urlBase.replace('#', '');
channel.bind('server-callback', 'socket-connection-message-received', function (data) {
var bean = $.parseJSON(data);
@@ -66,16 +71,16 @@
}
function createSocket() {
- var isFake = false,
- socket = null,
- host = (function () {
- var suffix = '/tomee/socket';
- var path = window.document.location.host + suffix;
- if (window.location.protocol == 'http:') {
- return 'ws://' + path;
- }
- return 'wss://' + path;
- })();
+ var isFake = false;
+ var socket = null;
+ var host = (function () {
+ var suffix = urlBase + 'socket';
+ var path = window.document.location.host + suffix;
+ if (window.location.protocol == 'http:') {
+ return 'ws://' + path;
+ }
+ return 'wss://' + path;
+ })();
if ('WebSocket' in window) {
socket = new WebSocket(host);
@@ -91,7 +96,7 @@
function send(str) {
$.ajax({
- url:'/tomee/command',
+ url:urlBase + 'command',
type:'POST',
dataType:'text',
data:{
@@ -175,7 +180,7 @@
function sendRequest(bean) {
$.ajax({
- url:'/tomee/' + bean.servlet,
+ url:urlBase + bean.servlet,
method:'POST',
dataType:'json',
data:bean.params,
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js b/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js
index 09f7bf5..df8e69a 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js
@@ -45,6 +45,8 @@
};
})([
'application',
+ 'application-growl',
+ 'application-growl-message',
'application-disabled',
'application-toolbar',
'application-toolbar-logout-btn',
@@ -55,6 +57,8 @@
'application-tab-log',
'application-tab-log-file',
'application-tab-log-lines',
+ 'application-tab-status',
+ 'application-tab-status-lines',
'application-disconnected-popup',
'application-tab-webservices',
'application-tab-webservices-table',
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars
new file mode 100644
index 0000000..016cf96
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars
@@ -0,0 +1,4 @@
+<div id="{{alertId}}" class="growl alert alert-block {{messageType}}">
+ <button type="button" class="close" data-dismiss="alert">×</button>
+ <div class="message"></div>
+</div>
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars
new file mode 100644
index 0000000..8537cf6
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars
@@ -0,0 +1 @@
+<div class="growl-container"></div>
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-console-sample.handlebars b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-console-sample.handlebars
index d3865a5..081dd21 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-console-sample.handlebars
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-console-sample.handlebars
@@ -7,9 +7,9 @@
with (myImports) {
var p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
- p.put("java.naming.provider.url", "http://localhost:8080/tomee/ejb");
- p.put("java.naming.security.principal", "tomee");
- p.put("java.naming.security.credentials", "tomee");
+ p.put("java.naming.provider.url", "{{protocol}}://localhost:{{port}}/tomee/ejb");
+ p.put("java.naming.security.principal", "{{name}}");
+ p.put("java.naming.security.credentials", "{{password}}");
var ctx = new InitialContext(p);
var myBean = ctx.lookup("openejb/UserBusinessRemote");
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars
new file mode 100644
index 0000000..ed349ab
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars
@@ -0,0 +1,10 @@
+<form class="form-horizontal status-lines">
+ {{#properties}}
+ <div class="control-group">
+ <label class="control-label" for="{{uniqueId}}-{{this.key}}">{{this.key}}</label>
+ <div class="controls">
+ <input type="text" id="{{uniqueId}}-{{this.key}}" class="path" param-key="{{this.key}}" value="{{this.value}}">
+ </div>
+ </div>
+ {{/properties}}
+</form>
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars
new file mode 100644
index 0000000..a435122
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars
@@ -0,0 +1,12 @@
+<div class="tomee-status">
+ <div class="tomee-status-output"></div>
+ <div class="navbar navbar-inverse bbar">
+ <div class="navbar-inner">
+ <div class="buttons">
+ <button class="btn btn-primary install" disabled>
+ <span>{{i18n "application.status.install"}}</span>
+ </button>
+ </div>
+ </div>
+ </div>
+</div>
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars
index d928b67..f28ca37 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars
@@ -4,8 +4,9 @@
<a class="brand" href="#">{{i18n "application.name"}}</a>
<ul class="nav">
<li class="toolbar-item active" tab-key="home"><a href="#">{{i18n "application.home"}}</a></li>
- <li class="toolbar-item" tab-key="console"><a href="#">{{i18n "application.console"}}</a></li>
- <li class="toolbar-item" tab-key="log"><a href="#">{{i18n "application.log"}}</a></li>
+ <li class="toolbar-item hidden" tab-key="console"><a href="#">{{i18n "application.console"}}</a></li>
+ <li class="toolbar-item hidden" tab-key="log"><a href="#">{{i18n "application.log"}}</a></li>
+ <li class="toolbar-item hidden" tab-key="status"><a href="#">{{i18n "application.status"}}</a></li>
</ul>
<div class="pull-right">
<ul class="nav">
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js b/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js
index b71f44a..4215014 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js
@@ -19,6 +19,7 @@
TOMEE.I18N = (function () {
+ var missing = Handlebars.compile('[!{{key}}!]');
var messages = {
'application.name':'Apache TomEE',
@@ -29,13 +30,21 @@
'application.home':'Home',
+ 'application.status':'Status',
+ 'application.status.install':'install',
+ 'application.status.reinstall':'re-install',
+ 'application.status.isAgentInstalled':'Is the agent installed? {{message}}',
+ 'application.status.isListenerInstalled':'Is the listener installed? {{message}}',
+
'application.jndi':'JNDI',
'application.jndi.path':'Path',
'application.console':'Console',
'application.console.run':'Execute',
+ 'application.console.run.error':'Script error.',
'application.console.clear.output':'Clear output',
'application.console.done':'Script executed.',
+ 'application.console.password':'[Your password goes here]',
'application.console.run.time':'Time',
'application.console.run.output.empty':'Empty',
@@ -51,18 +60,30 @@
'application.sign.in':'Sign In',
'application.sign.out':'Sign Out',
'application.log.in':'Login',
+ 'application.log.error':'Login error. Please try again.',
+ 'application.log.bad':'Bad user or password. Please try again.',
+ 'application.log.hello':'Hello {{userName}}!',
'application.password':'Password',
'dummy':'dummy'
};
- var get = function (key) {
- var result = messages[key];
- if (!result) {
- result = '[!' + key + '!]';
+ TOMEE.utils.forEachKey(messages, function (key, value) {
+ var template = Handlebars.compile(value);
+ messages[key] = template;
+ });
+
+ var get = function (key, values) {
+ var template = messages[key];
+ var cfg = values;
+ if (!template) {
+ template = missing;
+ cfg = {
+ key:key
+ };
console.error('Missing i18n message.', key);
}
- return result;
+ return template(cfg);
};
Handlebars.registerHelper('i18n', function (key) {
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js b/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js
index c58b017..431cf49 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js
@@ -14,50 +14,22 @@
* 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.
- "use strict";
*/
+"use strict";
+
(function () {
- var winConsole = window.console,
+ var noOp = function() {};
- // These are the available methods. Add more to this list if necessary.
- consoleEmpty = {
- error:function () {},
- log:function () {}
- },
+ if(!window.console) {
+ window.console = {};
+ }
- consoleProxy = (function () {
- // This object wraps the "window.console"
- var consoleWrapper = {};
+ if(!window.console.error) {
+ window.console.error = noOp;
+ }
- function buildMethodProxy(key) {
- if (winConsole[key] && typeof winConsole[key] === 'function') {
- consoleWrapper[key] = function () {
- var cFunc = winConsole[key];
- cFunc.call(winConsole, arguments);
- };
- } else {
- consoleWrapper[key] = function () {
- consoleEmpty[key]();
- };
- }
- }
-
- // Checking if the browser has the "console" object
- if (winConsole) {
- // Only the methods defined by the consoleMock
- // are available for use.
- for (var key in consoleEmpty) {
- if (consoleEmpty.hasOwnProperty(key)) {
- buildMethodProxy(key);
- }
- }
- } else {
- consoleWrapper = consoleEmpty;
- }
-
- return consoleWrapper;
- })();
-
- window.console = consoleProxy;
+ if(!window.console.log) {
+ window.console.log = noOp;
+ }
})();
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js b/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js
index b85ecaa..f45ce04 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js
@@ -134,6 +134,17 @@
}
}
+ function forEachKey(obj, callback) {
+ if(!obj) {
+ return;
+ }
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ callback(key, obj[key]);
+ }
+ }
+ }
+
return {
keyCodeToString: keyCodeToString,
isPrimitive:isPrimitive,
@@ -142,6 +153,7 @@
getArray:getArray,
getObject:getObject,
stringFormat:stringFormat,
- forEach:forEach
+ forEach:forEach,
+ forEachKey:forEachKey
}
})();
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js
index 4f04546..a23cac4 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js
@@ -19,9 +19,13 @@
TOMEE.ApplicationToolbarView = function () {
"use strict";
- var channel = TOMEE.ApplicationChannel,
- el = $(TOMEE.ApplicationTemplates.getValue('application-toolbar', {})),
- logoutBtn = $(TOMEE.ApplicationTemplates.getValue('application-toolbar-logout-btn', {}));
+ var channel = TOMEE.ApplicationChannel;
+ var el = $(TOMEE.ApplicationTemplates.getValue('application-toolbar', {}));
+
+ var userNameMenu = el.find('.tomee-user-name');
+ var loginMenu = el.find('.user-login-dropdown');
+ var loginBtn = el.find('.tomee-login-btn');
+ var logoutBtn = $(TOMEE.ApplicationTemplates.getValue('application-toolbar-logout-btn', {}));
el.find('.toolbar-item').on('click', function (ev) {
var tabEl = $(ev.currentTarget),
@@ -32,6 +36,29 @@
});
});
+ userNameMenu.on('click', function() {
+ TOMEE.DelayedTask().delay(function() {
+ var user = el.find('.tomee-login');
+
+ if(loginMenu.hasClass('open') && user) {
+ user.focus();
+ }
+ }, 500);
+ });
+
+ channel.bind('ui-actions', 'locked-change', function (data) {
+ el.find('.toolbar-item').each(function (index, htmlElement) {
+ var element = $(htmlElement);
+ if (data.panel === element.attr('tab-key')) {
+ if (data.locked) {
+ element.addClass('hidden');
+ } else {
+ element.removeClass('hidden');
+ }
+ }
+ });
+ });
+
channel.bind('ui-actions', 'panel-switch', function (data) {
el.find('.toolbar-item').removeClass('active');
el.find('.toolbar-item').each(function (index, htmlEl) {
@@ -44,16 +71,15 @@
});
});
- el.find('.tomee-login-btn').on('click', function () {
- var user = el.find('.tomee-login').val(),
- pass = el.find('.tomee-password').val(),
- btn = el.find('.tomee-login-btn');
+ loginBtn.on('click', function () {
+ var user = el.find('.tomee-login').val();
+ var pass = el.find('.tomee-password').val();
channel.send('ui-actions', 'login-btn-click', {
user:user,
pass:pass
});
- btn.prop('disabled', true);
+ loginBtn.prop('disabled', true);
});
logoutBtn.on('click', function () {
@@ -61,43 +87,37 @@
});
channel.bind('server-command-callback-success', 'Login', function (params) {
- var btn = el.find('.tomee-login-btn'),
- btnsArea = el.find('.login-buttons'),
- menu = el.find('.user-login-dropdown'),
- userNameMenu = el.find('.tomee-user-name'),
- user = el.find('.tomee-login'),
- pass = el.find('.tomee-password');
+ var btnsArea = el.find('.login-buttons');
+ var user = el.find('.tomee-login');
+ var pass = el.find('.tomee-password');
if (!params.output.loginSuccess) {
- btn.prop('disabled', false);
+ loginBtn.prop('disabled', false);
return;
}
- btn.remove();
+ loginBtn.remove();
user.remove();
pass.remove();
btnsArea.append(logoutBtn);
- menu.removeClass('open');
+ loginMenu.removeClass('open');
userNameMenu.html(user.val());
el.find('.login-menu').addClass('logout');
});
channel.bind('server-command-callback-success', 'session', function (params) {
- var btn = el.find('.tomee-login-btn'),
- btnsArea = el.find('.login-buttons'),
- menu = el.find('.user-login-dropdown'),
- userNameMenu = el.find('.tomee-user-name'),
- user = el.find('.tomee-login'),
- pass = el.find('.tomee-password');
+ var btnsArea = el.find('.login-buttons');
+ var user = el.find('.tomee-login');
+ var pass = el.find('.tomee-password');
if (!params.data.userName) {
return;
}
- btn.remove();
+ loginBtn.remove();
user.remove();
pass.remove();
btnsArea.append(logoutBtn);
@@ -109,8 +129,7 @@
});
channel.bind('server-command-callback-error', 'Login', function (params) {
- var btn = el.find('.tomee-login-btn');
- btn.prop('disabled', false);
+ loginBtn.prop('disabled', false);
});
return {
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js
index 7c94bdd..6d6e426 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js
@@ -23,7 +23,8 @@
panelMap = {
'home':TOMEE.ApplicationTabHome(),
'console':TOMEE.ApplicationTabConsole(),
- 'log':TOMEE.ApplicationTabLog()
+ 'log':TOMEE.ApplicationTabLog(),
+ 'status': TOMEE.ApplicationTabStatus()
},
selected = null,
container = $(TOMEE.ApplicationTemplates.getValue('application', {})),
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js
new file mode 100644
index 0000000..5545f3b
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js
@@ -0,0 +1,61 @@
+/**
+ *
+ * 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.
+ */
+
+TOMEE.GrowlNotification = function () {
+ "use strict";
+
+ var channel = TOMEE.ApplicationChannel;
+ var container = $(TOMEE.ApplicationTemplates.getValue('application-growl', {}));
+ var myBody = $('body');
+ var active = false;
+ var timeout = {};
+
+ function showNotification(message, messageType) {
+ if (!active) {
+ active = true;
+ myBody.append(container);
+ }
+ var alertId = TOMEE.Sequence.next('alert');
+ var alert = $(TOMEE.ApplicationTemplates.getValue('application-growl-message', {
+ alertId:alertId,
+ messageType:'alert-' + messageType
+ }));
+ var messageEl = alert.find('.message');
+ messageEl.append(message);
+ container.append(alert);
+ alert.fadeIn();
+
+ timeout[alertId] = TOMEE.DelayedTask();
+ timeout[alertId].delay(function() {
+ try {
+ alert.fadeOut(null, function () {
+ try {
+ alert.remove();
+ } catch (e) { /* noop */ }
+ });
+ } catch (e) { /* noop */ }
+ delete timeout[alertId];
+ }, 5000);
+
+
+ }
+
+ return {
+ showNotification:showNotification
+ };
+};
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js
index a813a85..df98bd6 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js
@@ -19,30 +19,46 @@
TOMEE.ApplicationTabConsole = function () {
"use strict";
- var channel = TOMEE.ApplicationChannel,
- container = $(TOMEE.ApplicationTemplates.getValue('application-tab-console', {})),
- innerPanels = {
- webservices:TOMEE.ApplicationTabWebservices(),
- jndi:TOMEE.ApplicationTabJndi()
- },
+ var channel = TOMEE.ApplicationChannel;
+ var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-console', {}));
+ var innerPanels = {
+ webservices:TOMEE.ApplicationTabWebservices(),
+ jndi:TOMEE.ApplicationTabJndi()
+ };
- codeArea = null,
- active = false,
- locked = true,
- delayedContainerResize = TOMEE.DelayedTask();
+ var codeArea = null;
+ var active = false;
+ var locked = true;
+ var delayedContainerResize = TOMEE.DelayedTask();
+ var userName = null;
+
+ channel.bind('server-command-callback-success', 'Login', function (params) {
+ userName = params.params.user;
+ });
+ channel.bind('server-command-callback-success', 'session', function (params) {
+ userName = params.data.userName;
+ });
+
+ function setLocked(value) {
+ locked = value;
+ channel.send('ui-actions', 'locked-change', {
+ locked: value,
+ panel:'console'
+ });
+ }
container.find('.webservices-div').append(innerPanels.webservices.getEl());
container.find('.jndi-div').append(innerPanels.jndi.getEl());
container.find('.dropdown-toggle').on('click', function (ev) {
- var button = $(ev.currentTarget),
- customAttr = 'tab-name',
- group = button.parent('.btn-group'),
- tab = group.attr(customAttr);
+ var button = $(ev.currentTarget);
+ var customAttr = 'tab-name';
+ var group = button.parent('.btn-group');
+ var tab = group.attr(customAttr);
container.find('.btn-group').each(function (index, grpHtmlEl) {
- var grpEl = $(grpHtmlEl),
- grpTabName = grpEl.attr(customAttr);
+ var grpEl = $(grpHtmlEl);
+ var grpTabName = grpEl.attr(customAttr);
if (tab === grpTabName) {
return;
}
@@ -110,17 +126,17 @@
channel.bind('server-command-callback-success', 'Login', function (params) {
if (params.output.loginSuccess) {
- locked = false;
+ setLocked(false);
} else {
- locked = true;
+ setLocked(true);
}
});
channel.bind('server-command-callback-success', 'session', function (params) {
if (params.data.userName) {
- locked = false;
+ setLocked(false);
} else {
- locked = true;
+ setLocked(true);
}
});
@@ -155,7 +171,16 @@
if (!codeArea) {
codeArea = CodeMirror(container.children('.tomee-code').get(0), {
lineNumbers:true,
- value:TOMEE.ApplicationTemplates.getValue('application-tab-console-sample', {})
+ value:TOMEE.ApplicationTemplates.getValue('application-tab-console-sample', {
+ port:window.location.port,
+ protocol: (function() {
+ var protocol = window.location.protocol;
+ protocol = protocol.replace(':', '');
+ return protocol;
+ })(),
+ name: userName,
+ password:TOMEE.I18N.get('application.console.password')
+ })
});
}
codeArea.focus();
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js
index 342842c..a522772 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js
@@ -19,9 +19,9 @@
TOMEE.ApplicationTabJndi = function () {
"use strict";
- var channel = TOMEE.ApplicationChannel,
- container = $(TOMEE.ApplicationTemplates.getValue('application-tab-jndi', {})),
- active = false;
+ var channel = TOMEE.ApplicationChannel;
+ var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-jndi', {}));
+ var active = false;
channel.bind('ui-actions', 'window-F5-pressed', function () {
triggerRefresh();
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js
index c3b2611..b476205 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js
@@ -19,11 +19,19 @@
TOMEE.ApplicationTabLog = function () {
"use strict";
- var channel = TOMEE.ApplicationChannel,
- container = $(TOMEE.ApplicationTemplates.getValue('application-tab-log', {})),
- selectedFile = null,
- active = false,
- locked = true;
+ var channel = TOMEE.ApplicationChannel;
+ var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-log', {}));
+ var selectedFile = null;
+ var active = false;
+ var locked = true;
+
+ function setLocked(value) {
+ locked = value;
+ channel.send('ui-actions', 'locked-change', {
+ locked: value,
+ panel:'log'
+ });
+ }
channel.bind('ui-actions', 'container-resized', function (data) {
var consoleOutput = container.find('.tomee-log-output'),
@@ -77,17 +85,17 @@
channel.bind('server-command-callback-success', 'Login', function (params) {
if (params.output.loginSuccess) {
- locked = false;
+ setLocked(false);
} else {
- locked = true;
+ setLocked(true);
}
});
channel.bind('server-command-callback-success', 'session', function (params) {
if (params.data.userName) {
- locked = false;
+ setLocked(false);
} else {
- locked = true;
+ setLocked(true);
}
});
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js
new file mode 100644
index 0000000..5cbd0a9
--- /dev/null
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js
@@ -0,0 +1,148 @@
+/**
+ *
+ * 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.
+ */
+
+TOMEE.ApplicationTabStatus = function () {
+ "use strict";
+
+ var channel = TOMEE.ApplicationChannel;
+ var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-status', {}));
+ var active = false;
+ var locked = true;
+ var loaded = false;
+
+ function setLocked(value) {
+ locked = value;
+ channel.send('ui-actions', 'locked-change', {
+ locked:value,
+ panel:'status'
+ });
+ }
+
+ function getPaths() {
+ var result = {};
+ container.find('.path').each(function (index, el) {
+ var field = $(el);
+ result[field.attr('param-key')] = field.val();
+ });
+ return result;
+ }
+
+ container.find('.buttons').on('click', function () {
+ channel.send('ui-actions', 'openejb-installer-clicked', getPaths());
+ });
+
+ channel.bind('ui-actions', 'container-resized', function (data) {
+ var consoleOutput = container.find('.tomee-status-output');
+ var bbar = container.find('.bbar');
+ var outputHeight = data.containerHeight - bbar.height() - 3;
+
+ consoleOutput.height(outputHeight);
+ });
+
+ channel.bind('server-command-callback-success', 'Login', function (params) {
+ if (params.output.loginSuccess) {
+ setLocked(false);
+ } else {
+ setLocked(true);
+ }
+ });
+
+ channel.bind('server-command-callback-success', 'session', function (params) {
+ if (params.data.userName) {
+ setLocked(false);
+ } else {
+ setLocked(true);
+ }
+ });
+
+ function showAlert(outMessages, messageType) {
+ var messages = TOMEE.utils.getArray(outMessages);
+ if (messages.length < 1) {
+ return;
+ }
+ channel.send('ui-actions', 'show-notification', {
+ message:messages.join('<BR>'),
+ messageType:'alert-' + messageType
+ });
+ }
+
+ channel.bind('server-command-callback-success', 'RunInstaller', function (params) {
+ showAlert(params.output.infos, 'success');
+ showAlert(params.output.warnings, 'warning');
+ showAlert(params.output.errors, 'error');
+ });
+
+ channel.bind('server-command-callback-success', 'GetStatus', function (data) {
+ var output = container.find('.tomee-status-output');
+ var buttons = container.find('.buttons');
+
+ var properties = [];
+
+ TOMEE.utils.forEachKey(data.output.mainPaths, function (key, value) {
+ properties.push({
+ key:key,
+ value:value
+ });
+ });
+
+ output.empty();
+ output.append($(TOMEE.ApplicationTemplates.getValue('application-tab-status-lines', {
+ uniqueId:TOMEE.Sequence.next('path'),
+ properties:properties
+ })));
+
+ buttons.find('.install').each(function (index, element) {
+ var btn = $(element);
+ if (data.output.isAgentInstalled || data.output.isAgentInstalled) {
+ btn.prop('disabled', true);
+ } else {
+ btn.prop('disabled', false);
+ }
+ });
+
+ showAlert([
+ TOMEE.I18N.get('application.status.isAgentInstalled', {
+ message:data.output.isAgentInstalled + ''
+
+ }),
+ TOMEE.I18N.get('application.status.isListenerInstalled', {
+ message:data.output.isListenerInstalled + ''
+ })
+ ], 'success');
+
+ loaded = true;
+ });
+
+ return {
+ getEl:function () {
+ return container;
+ },
+ onAppend:function () {
+ active = true;
+ if (!loaded) {
+ channel.send('ui-actions', 'load-status', {});
+ }
+ },
+ onDetach:function () {
+ active = false;
+ },
+ isLocked:function () {
+ return locked;
+ }
+ };
+};
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js
index bca25f8..e1e8947 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js
+++ b/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js
@@ -19,9 +19,9 @@
TOMEE.ApplicationTabWebservices = function () {
"use strict";
- var channel = TOMEE.ApplicationChannel,
- container = $(TOMEE.ApplicationTemplates.getValue('application-tab-webservices', {})),
- active = false;
+ var channel = TOMEE.ApplicationChannel;
+ var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-webservices', {}));
+ var active = false;
channel.bind('ui-actions', 'window-F5-pressed', function () {
triggerRefresh();
@@ -37,9 +37,9 @@
});
function buildTableData(data) {
- var rest = TOMEE.utils.getArray(data.rest),
- soap = TOMEE.utils.getArray(data.soap),
- result = [];
+ var rest = TOMEE.utils.getArray(data.rest);
+ var soap = TOMEE.utils.getArray(data.soap);
+ var result = [];
function buildAppData(app, wsType) {
var services = TOMEE.utils.getArray(app.services);
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap-responsive.css b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap-responsive.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap-responsive.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap-responsive.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap-responsive.min.css b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap-responsive.min.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap-responsive.min.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap-responsive.min.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap.css b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap.min.css b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap.min.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/css/bootstrap.min.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/css/bootstrap.min.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/img/glyphicons-halflings-white.png b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/img/glyphicons-halflings-white.png
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/img/glyphicons-halflings-white.png
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/img/glyphicons-halflings-white.png
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/img/glyphicons-halflings.png b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/img/glyphicons-halflings.png
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/img/glyphicons-halflings.png
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/img/glyphicons-halflings.png
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/js/bootstrap.js b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/js/bootstrap.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/js/bootstrap.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/js/bootstrap.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/js/bootstrap.min.js b/tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/js/bootstrap.min.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/bootstrap/2.1.1/js/bootstrap.min.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/bootstrap/2.1.1/js/bootstrap.min.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/LICENSE b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/LICENSE
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/LICENSE
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/LICENSE
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/codemirror.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/codemirror.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/codemirror.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/codemirror.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/codemirror.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/codemirror.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/codemirror.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/codemirror.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/closetag.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/closetag.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/closetag.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/closetag.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/dialog.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/dialog.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/dialog.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/dialog.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/dialog.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/dialog.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/dialog.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/dialog.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/foldcode.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/foldcode.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/foldcode.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/foldcode.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/formatting.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/formatting.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/formatting.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/formatting.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/javascript-hint.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/javascript-hint.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/javascript-hint.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/javascript-hint.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/loadmode.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/loadmode.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/loadmode.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/loadmode.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/match-highlighter.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/match-highlighter.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/match-highlighter.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/match-highlighter.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/multiplex.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/multiplex.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/multiplex.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/multiplex.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/overlay.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/overlay.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/overlay.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/overlay.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/pig-hint.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/pig-hint.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/pig-hint.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/pig-hint.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/runmode-standalone.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/runmode-standalone.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/runmode-standalone.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/runmode-standalone.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/runmode.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/runmode.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/runmode.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/runmode.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/search.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/search.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/search.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/search.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/searchcursor.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/searchcursor.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/searchcursor.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/searchcursor.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/simple-hint.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/simple-hint.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/simple-hint.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/simple-hint.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/simple-hint.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/simple-hint.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/simple-hint.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/simple-hint.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/xml-hint.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/xml-hint.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/lib/util/xml-hint.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/lib/util/xml-hint.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/groovy/groovy.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/groovy/groovy.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/groovy/groovy.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/groovy/groovy.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/groovy/index.html b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/groovy/index.html
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/groovy/index.html
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/groovy/index.html
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/javascript/index.html b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/javascript/index.html
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/javascript/index.html
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/javascript/index.html
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/javascript/javascript.js b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/javascript/javascript.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/mode/javascript/javascript.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/mode/javascript/javascript.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/package.json b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/package.json
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/package.json
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/package.json
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/ambiance.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/ambiance.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/ambiance.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/ambiance.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/blackboard.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/blackboard.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/blackboard.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/blackboard.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/cobalt.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/cobalt.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/cobalt.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/cobalt.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/eclipse.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/eclipse.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/eclipse.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/eclipse.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/elegant.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/elegant.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/elegant.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/elegant.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/erlang-dark.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/erlang-dark.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/erlang-dark.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/erlang-dark.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/lesser-dark.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/lesser-dark.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/lesser-dark.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/lesser-dark.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/monokai.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/monokai.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/monokai.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/monokai.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/neat.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/neat.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/neat.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/neat.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/night.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/night.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/night.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/night.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/rubyblue.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/rubyblue.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/rubyblue.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/rubyblue.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/vibrant-ink.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/vibrant-ink.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/vibrant-ink.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/vibrant-ink.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/xq-dark.css b/tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/xq-dark.css
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/codemirror/codemirror-2.34/theme/xq-dark.css
rename to tomee/tomee-webapp/src/main/webapp/app/lib/codemirror/codemirror-2.34/theme/xq-dark.css
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/handlebars/handlebars-1.0.rc.1.js b/tomee/tomee-webapp/src/main/webapp/app/lib/handlebars/handlebars-1.0.rc.1.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/handlebars/handlebars-1.0.rc.1.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/handlebars/handlebars-1.0.rc.1.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/jquery/jquery-1.7.2.min.js b/tomee/tomee-webapp/src/main/webapp/app/lib/jquery/jquery-1.7.2.min.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/jquery/jquery-1.7.2.min.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/jquery/jquery-1.7.2.min.js
diff --git a/tomee/tomee-webapp/src/main/webapp/lib/less/less-1.3.0.min.js b/tomee/tomee-webapp/src/main/webapp/app/lib/less/less-1.3.0.min.js
similarity index 100%
rename from tomee/tomee-webapp/src/main/webapp/lib/less/less-1.3.0.min.js
rename to tomee/tomee-webapp/src/main/webapp/app/lib/less/less-1.3.0.min.js
diff --git a/tomee/tomee-webapp/src/main/webapp/app/tomee.less b/tomee/tomee-webapp/src/main/webapp/app/tomee.less
index d058768..4c8eba1 100644
--- a/tomee/tomee-webapp/src/main/webapp/app/tomee.less
+++ b/tomee/tomee-webapp/src/main/webapp/app/tomee.less
@@ -17,9 +17,25 @@
body {
overflow: hidden;
+
+ .growl-container {
+ position: absolute;
+ bottom: 40px;
+ left: 20px;
+ z-index: 5000;
+
+ .growl {
+ display: none;
+ width: 300px;
+ }
+ }
}
.tomee {
+ .hidden {
+ display: none;
+ }
+
overflow: hidden;
.splitter {
@@ -77,6 +93,10 @@
}
.tomee-console {
+ .dropdown-menu {
+ overflow: auto;
+ }
+
.tomee-console-output {
background-color: #F7F7F9;
border: 1px solid #E1E1E8;
@@ -97,6 +117,10 @@
border-bottom: 1px solid white;
}
+ .navbar-inner {
+ position: relative;
+ }
+
.tomee-execute-webservices-group {
position: absolute;
bottom: 5px;
@@ -148,8 +172,40 @@
}
}
+ .tomee-status {
+ .navbar-inner {
+ position: relative;
+
+ .buttons {
+ position: absolute;
+ right: 10px;
+ top: 0px;
+ }
+ }
+
+ .tomee-status-output {
+ overflow: auto;
+ margin-bottom: 0px;
+ padding-top: 5px;
+
+ input {
+ width: 500px;
+ }
+
+ .alert {
+ margin-bottom: 5px;
+ margin-left: 5px;
+ margin-right: 5px;
+ }
+
+ .messages {
+ list-style: none;
+ margin-left: 5px;
+ }
+ }
+ }
+
.tomee-webservices {
padding: 5px;
}
-
}
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/default.css b/tomee/tomee-webapp/src/main/webapp/default.css
deleted file mode 100644
index e6a2970..0000000
--- a/tomee/tomee-webapp/src/main/webapp/default.css
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-.boxsizingBorder {
- box-sizing: border-box;
- -webkit-box-sizing:border-box;
- -moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
-}
\ No newline at end of file
diff --git a/tomee/tomee-webapp/src/main/webapp/images/JavaCup.gif b/tomee/tomee-webapp/src/main/webapp/images/JavaCup.gif
deleted file mode 100644
index 8862eca..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/JavaCup.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/TreeClosed.gif b/tomee/tomee-webapp/src/main/webapp/images/TreeClosed.gif
deleted file mode 100644
index 6d00bc2..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/TreeClosed.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/TreeOpen.gif b/tomee/tomee-webapp/src/main/webapp/images/TreeOpen.gif
deleted file mode 100644
index def2e5e..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/TreeOpen.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/dotTrans.gif b/tomee/tomee-webapp/src/main/webapp/images/dotTrans.gif
deleted file mode 100644
index 1d11fa9..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/dotTrans.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/ejb.gif b/tomee/tomee-webapp/src/main/webapp/images/ejb.gif
deleted file mode 100644
index 99e7f49..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/ejb.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/line_light.gif b/tomee/tomee-webapp/src/main/webapp/images/line_light.gif
deleted file mode 100644
index a988332..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/line_light.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/line_sm.gif b/tomee/tomee-webapp/src/main/webapp/images/line_sm.gif
deleted file mode 100644
index ee67615..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/line_sm.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/logo_ejb2.gif b/tomee/tomee-webapp/src/main/webapp/images/logo_ejb2.gif
deleted file mode 100644
index 458b171..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/logo_ejb2.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/images/pepper.gif b/tomee/tomee-webapp/src/main/webapp/images/pepper.gif
deleted file mode 100644
index 0db2305..0000000
--- a/tomee/tomee-webapp/src/main/webapp/images/pepper.gif
+++ /dev/null
Binary files differ
diff --git a/tomee/tomee-webapp/src/main/webapp/index.html b/tomee/tomee-webapp/src/main/webapp/index.html
index 84666fe..554ced4 100644
--- a/tomee/tomee-webapp/src/main/webapp/index.html
+++ b/tomee/tomee-webapp/src/main/webapp/index.html
@@ -19,23 +19,23 @@
<head>
<meta charset="utf-8">
<title>Apache Tomee</title>
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <link rel="stylesheet" href="lib/codemirror/codemirror-2.34/lib/codemirror.css">
+ <link href="app/lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
+ <link rel="stylesheet" href="app/lib/codemirror/codemirror-2.34/lib/codemirror.css">
<link rel="stylesheet/less" type="text/css" href="app/tomee.less">
- <script src="lib/less/less-1.3.0.min.js"></script>
- <script src="lib/jquery/jquery-1.7.2.min.js"></script>
- <script src="lib/bootstrap/2.1.1/js/bootstrap.min.js"></script>
- <script src="lib/handlebars/handlebars-1.0.rc.1.js"></script>
- <script src="lib/codemirror/codemirror-2.34/lib/codemirror.js"></script>
- <script src="lib/codemirror/codemirror-2.34/mode/javascript/javascript.js"></script>
+ <script src="app/lib/less/less-1.3.0.min.js"></script>
+ <script src="app/lib/jquery/jquery-1.7.2.min.js"></script>
+ <script src="app/lib/bootstrap/2.1.1/js/bootstrap.min.js"></script>
+ <script src="app/lib/handlebars/handlebars-1.0.rc.1.js"></script>
+ <script src="app/lib/codemirror/codemirror-2.34/lib/codemirror.js"></script>
+ <script src="app/lib/codemirror/codemirror-2.34/mode/javascript/javascript.js"></script>
<script src="app/js/Application.js"></script>
+ <script src="app/js/util/Obj.js"></script>
<script src="app/js/util/DelayedTask.js"></script>
<script src="app/js/util/I18N.js"></script>
<script src="app/js/util/Log.js"></script>
- <script src="app/js/util/Obj.js"></script>
<script src="app/js/util/Sequence.js"></script>
<script src="app/js/ApplicationTemplates.js"></script>
@@ -45,10 +45,12 @@
<script src="app/js/view/ApplicationView.js"></script>
<script src="app/js/view/ApplicationToolbarView.js"></script>
+ <script src="app/js/view/GrowlNotification.js"></script>
<script src="app/js/view/panels/home.js"></script>
<script src="app/js/view/panels/console.js"></script>
<script src="app/js/view/panels/log.js"></script>
+ <script src="app/js/view/panels/status.js"></script>
<script src="app/js/view/panels/webservices.js"></script>
<script src="app/js/view/panels/jndi.js"></script>
diff --git a/tomee/tomee-webapp/src/main/webapp/index.jsp b/tomee/tomee-webapp/src/main/webapp/index.jsp
deleted file mode 100644
index 0a5a5f5..0000000
--- a/tomee/tomee-webapp/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,122 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="org.apache.tomee.installer.Installer" %>
-
-<html>
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
- <div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li class="active"><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div>
- </div>
- </div>
-
- <div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <div class="hero-unit">
- <h1>Welcome to Apache TomEE</h1>
- <p>You can test your setup and play around with the tools provided below!</p>
-
- <div class="btn-group">
- <a class="btn btn-primary btn-large" href="testhome.jsp">Testing your setup »</a>
-
- <% if (!Installer.isListenerInstalled() && !Installer.isAgentInstalled()) { %>
- <a class="btn btn-primary btn-large" href="installer">[Optional] Install Listener and JavaAgent »</a>
-
- <% } else if (!Installer.isListenerInstalled()) { %>
- <a class="btn btn-primary btn-large" href="installer">[Optional] Install Listener »</a>
-
- <% } else if (!Installer.isAgentInstalled()) { %>
- <a class="btn btn-primary btn-large" href="installer">[Optional] JavaAgent »</a>
-
- <% } %>
-
- <a class="btn btn-primary btn-large" href="viewjndi.jsp">JNDI Browser »</a>
- <a class="btn btn-primary btn-large" href="viewclass.jsp">Class Viewer »</a>
- <a class="btn btn-primary btn-large" href="viewejb.jsp">EJB Viewer »</a>
- <a class="btn btn-primary btn-large" href="invokeobj.jsp">Object Invoker »</a>
- </div>
- </div>
- </div><!--/span-->
- </div><!--/row-->
-
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
-
- </div><!--/.fluid-container-->
-
- <!-- Le javascript
- ================================================== -->
- <!-- Placed at the end of the document so the pages load faster -->
- <script src="lib/jquery/jquery-1.7.2.min.js"></script>
- <script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
diff --git a/tomee/tomee-webapp/src/main/webapp/installer-view.jsp b/tomee/tomee-webapp/src/main/webapp/installer-view.jsp
deleted file mode 100644
index ba2b553..0000000
--- a/tomee/tomee-webapp/src/main/webapp/installer-view.jsp
+++ /dev/null
@@ -1,236 +0,0 @@
-<!DOCTYPE html>
-<!--
-
-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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="org.apache.tomee.installer.Installer" %>
-<%@ page import="java.io.File" %>
-<%@ page import="org.apache.tomee.installer.Paths" %>
-<%@ page import="java.util.List" %>
-<%@ page import="java.util.ArrayList" %>
-<%
- Installer installer = (Installer) request.getAttribute("installer");
- Paths paths = (Paths) request.getAttribute("paths");
-%>
-<html>
-
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
-
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
-
- <div class="nav-collapse">
- <ul class="nav">
- <li class="active"><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div>
- <!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
-
- <%
- if (installer != null) {
- if (installer.getStatus() == Installer.Status.REBOOT_REQUIRED) {
- %>
-
- <table class='table table-striped table-bordered table-condensed'>
- <tbody>
- <%
- for (String info : installer.getAlerts().getInfos()) {
- %>
- <tr>
- <td><%= info %>
- </td>
- <td><span style="color:green;"><b>DONE</b></span></td>
- </tr>
- <%
- }
- %>
- </tbody>
- </table>
- <br><br>
-
- The installer has completed successfully. <br>
- Please, <b>restart Tomcat</b> and reload this page to verify installation.
- <%
- } else {
- List<String> errors = new ArrayList<String>(paths.getErrors());
- errors.addAll(installer.getAlerts().getErrors());
- if (!errors.isEmpty()) {
- %> Installation Failed<br><br>
- <table>
- <%
- for (String error : errors) {
- %>
- <tr>
- <td><%= error %>
- </td>
- <td><span style="color:green;"><b>DONE</b></span></td>
- </tr>
- <%
- }
- %>
- </table>
- <br><br>
- <%
- } else {
- %>
- <table class='table table-striped table-bordered table-condensed'>
- <tbody>
- <tr>
- <td><font size='2'>Tomcat Listener Installed</font></td>
- <% if (installer.isListenerInstalled()) { %>
- <td><font size='2' color='green'><b>YES</b></font></td>
- <% } else { %>
- <td><font size='2' color='red'><b>NO</b></font></td>
- <% } %>
- </tr>
- <tr>
- <td><font size='2'>JavaAgent Installed</font></td>
- <% if (installer.isAgentInstalled()) { %>
- <td><font size='2' color='green'><b>YES</b></font></td>
- <% } else { %>
- <td><font size='2' color='red'><b>NO</b></font></td>
- <% } %>
- </tr>
- </tbody>
- </table>
- <br><br>
- <%
- }
- %>
- <%
- if (installer.getStatus() == Installer.Status.NONE) {
- if (errors.isEmpty()) {
- %>
- Please verify the file paths are correct and click the install button.
- <%
- } else {
- %>
- Try again?
- <%
- }
- %>
-
- <br><br>
-
- <form action='installer' method='post'>
- <table>
- <tbody>
- <tr>
- <td>Catalina Home:</td>
- <td><input type='text' size='200' style="width:300px" name='catalinaHome'
- value='<%= safeGetAbsolutePath(paths.getCatalinaHomeDir()) %>'></td>
- </tr>
- <tr>
- <td>Catalina Base:</td>
- <td><input type='text' size='200' style="width:300px" name='catalinaBase'
- value='<%= safeGetAbsolutePath(paths.getCatalinaBaseDir()) %>'></td>
- </tr>
- <tr>
- <td>Catalina server.xml:</td>
- <td><input type='text' size='200' style="width:300px" name='serverXml'
- value='<%= safeGetAbsolutePath(paths.getServerXmlFile()) %>'></td>
- </tr>
- <tr>
- <td><input type='submit' name='action' value='Install'></td>
- </tr>
- </tbody>
- </table>
- </form>
- <%
- } else {
- %>
- Installation Successful!
- <%
- }
-
- }
- } %>
- </div>
- </div>
-</div>
-<hr>
-
-<footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and
- the Apache feather logo are trademarks of The Apache Software Foundation.</p>
-</footer>
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-<%!
- private String safeGetAbsolutePath(File file) {
- if (file == null) return "";
- return file.getAbsolutePath();
- }
-%>
diff --git a/tomee/tomee-webapp/src/main/webapp/invokeobj.jsp b/tomee/tomee-webapp/src/main/webapp/invokeobj.jsp
deleted file mode 100644
index 6f3f021..0000000
--- a/tomee/tomee-webapp/src/main/webapp/invokeobj.jsp
+++ /dev/null
@@ -1,735 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-javax.servlet.http.HttpServletRequest,
-javax.servlet.jsp.JspWriter,
-java.io.ByteArrayOutputStream,
-java.io.PrintStream,
-java.lang.reflect.InvocationTargetException,
-java.lang.reflect.Method,
-java.lang.reflect.Modifier,
-java.util.HashMap,
-java.util.Iterator,
-java.util.Set
-"%>
-<%@ page import="java.util.Map" %>
-<html>
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li class="active"><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <h2>OpenEJB Object Invoker</h2>
-<%
- try{
- synchronized (this) {
- main(request, session, out);
- }
- } catch (Exception e){
- out.println("<p>FAIL</p>");
- //throw e;
- return;
- }
-%>
- </div>
- </div>
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
-</div>
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-<%!
- String tab = " ";
-
- static final String invLock = "lock";
- static int invCount;
-
- HttpSession session;
- HttpServletRequest request;
- JspWriter out;
-
- class Invocation {
-
- String id = "inv";
- String objID;
- Class clazz;
- Object target;
- Method method;
- Object[] args;
- Object result;
-
- Invocation() {
- synchronized (invLock) {
- id += ++invCount;
- }
- }
-
- public Object invoke() throws Exception {
- if (target == null || method == null || args == null) {
- throw new Exception("This invocation contains null objects.");
- }
- return method.invoke(target, args);
- }
- }
-
- /**
- * The main method of this JSP
- */
- public void main(HttpServletRequest request, HttpSession session, JspWriter out) throws Exception {
- this.request = request;
- this.session = session;
- this.out = out;
-
- printObjectSection();
- }
-
- /**
- * Print the list of objects with the focused object as
- * selected in the box.
- * If no object is selected, make an entry called "Pick an Object"
- */
- public void printObjectSection() throws Exception {
- String removeID = request.getParameter("remove");
- if (removeID != null) {
- removeObject(removeID);
- }
-
- Invocation inv = null;
- String invID = request.getParameter("inv");
-
- if (invID == null) {
- String objID = request.getParameter("obj");
- if (objID != null) {
- inv = new Invocation();
- inv.target = getObject(objID);
- inv.objID = objID;
- setInvocation(inv.id, inv);
- }
- } else {
- inv = getInvocation(invID);
- }
-
- if (inv == null || inv.target == null) {
- // Pick from the list
- printObjectList();
-
- } else {
- out.print("<h3>Object</h3>");
- out.print("<p>" + inv.objID + " <a href='invokeobj.jsp'>[change]</a></p>");
-
- // Show the selected item and continue
- printMethodSection(inv);
- }
- }
-
- /**
- * Prints the list of objects that can be invoked
- */
- public void printObjectList() throws Exception {
-
- Map<String, Object> objects = getObjectMap();
- if (objects.size() == 0) {
- out.print("<p>No object have been created. <A HREF='viewjndi.jsp'>Browse for an EJB</A></p>");
-
- } else {
- out.print("<h3>Pick and object to invoke</h3>");
-
- Set keys = objects.keySet();
- Iterator iterator = keys.iterator();
- out.print("<ul>");
- while (iterator.hasNext()) {
- String entry = (String) iterator.next();
- out.print("<li><a href='invokeobj.jsp?obj=" + entry + "'>" + entry + "</a><a href='invokeobj.jsp?remove=" + entry + "'> [remove]</a></li>");
- }
- out.print("</ul>");
- }
- }
-
- /**
- * Print the list of methods with the focused method as
- * selected in the box.
- * If no method is selected, make an entry called "Pick a Method"
- */
- public void printMethodSection(Invocation inv) throws Exception {
- String methodID = request.getParameter("m");
-
- if (methodID != null) {
- int method = Integer.parseInt(methodID);
- Method[] methods = inv.clazz.getMethods();
- if (method > -1 && method < methods.length) {
- inv.method = methods[method];
- } else {
- inv.method = null;
- inv.args = null;
- }
- }
-
- if (inv.method == null) {
- // Pick from the list
- printMethodList(inv);
-
- } else {
- out.print("<h3>Method</h3>");
- out.print("<p>" + formatMethod(inv.method) + " <a href='invokeobj.jsp?m=-1&inv=" + inv.id + "'>[change]</a></<p>");
-
- // Show the selected item and continue
- printArgumentSection(inv);
- }
-
- }
-
- /**
- * Prints the list of methods that can be invoked
- */
- public void printMethodList(Invocation inv) throws Exception {
- out.print("<b>Pick a method to invoke</b><br>");
- //out.print("<b>Methods:</b><br>");
-
- Object obj = inv.target;
- Class clazz = inv.target.getClass();
- if (obj instanceof javax.ejb.EJBHome) {
- clazz = obj.getClass().getInterfaces()[0];
- } else if (obj instanceof javax.ejb.EJBObject) {
- clazz = obj.getClass().getInterfaces()[0];
- } else {
- clazz = obj.getClass();
- }
- inv.clazz = clazz;
-
- out.print("<ul>");
- Method[] methods = clazz.getMethods();
- for (int i = 0; i < methods.length; i++) {
- Method m = methods[i];
- if (Modifier.isPublic(m.getModifiers())) {
- out.print("<li><a href='invokeobj.jsp?inv=" + inv.id + "&m=" + i + "'>" + formatMethod(m) + "</a></li>");
- }
- }
- out.print("</ul>");
- }
-
- /**
- * Print the list of arguments.
- * If no arguments have been selected,
- * show the argument entry form.
- */
- public void printArgumentSection(Invocation inv) throws Exception {
- String args = request.getParameter("args");
-
- if (args != null) {
- parseArgs(inv);
- }
-
- if (inv.method.getParameterTypes().length == 0) {
- inv.args = new Object[]{};
- }
-
- if (inv.args == null) {
- printArgumentList(inv);
- } else {
- out.print("<h3>Arguments</h3>");
-
- if (inv.args.length == 0) {
- out.print("<p>none</p>");
- }
-
- out.print("<ol>");
-
- for (int i = 0; i < inv.args.length; i++) {
- String val = formatObject(inv.args[i]);
- out.print("<li><i>" + val + "</i>");
- }
-
- out.print("</ol>");
-
- printInvokeSection(inv);
- }
- }
-
- public void parseArgs(Invocation inv) throws Exception {
- Class[] pTypes = inv.method.getParameterTypes();
- inv.args = new Object[pTypes.length];
-
- for (int i = 0; i < pTypes.length; i++) {
- Class type = pTypes[i];
- String unparsedArg = request.getParameter("arg" + i);
- inv.args[i] = getConverter(type).convert(type, unparsedArg);
- }
- }
-
- public void printArgumentList(Invocation inv) throws Exception {
- out.print("<b>Fill in the arguments</b><br>");
- Class[] pTypes = inv.method.getParameterTypes();
- out.print("<FORM NAME='args' METHOD='GET' ACTION='invokeobj.jsp'>");
- out.print("<INPUT type='HIDDEN' NAME='inv' VALUE='" + inv.id + "'>");
- out.print("<table>");
- for (int i = 0; i < pTypes.length; i++) {
- Converter con = getConverter(pTypes[i]);
- out.print("<tr>");
- out.print("<td align='right'><font size='2'>");
- out.print(tab + getShortClassRef(pTypes[i]));
- out.print("</font></td>");
- out.print("<td><font size='2'>");
- out.print(" arg" + i);
- out.print("</font></td>");
- out.print("<td><font size='2'>");
- out.print(" " + con.getInputControl(i, pTypes[i]));
- out.print("</font></td>");
- }
- out.print("</table>");
-
- out.print("<br><br>");
- out.print("<INPUT type='SUBMIT' NAME='args' value='Continue'>");
- out.print("</form>");
-
- }
-
- /**
- * Print the list of arguments.
- * If no arguments have been selected,
- * show the argument entry form.
- */
- public void printInvokeSection(Invocation inv) throws Exception {
- String doInvoke = request.getParameter("invoke");
- if (doInvoke != null) {
- invoke(inv);
- } else {
- out.print("<FORM NAME='invoke' METHOD='GET' ACTION='invokeobj.jsp'>");
- out.print("<INPUT type='HIDDEN' NAME='inv' VALUE='" + inv.id + "'>");
- out.print("<INPUT type='SUBMIT' NAME='invoke' value='Invoke'>");
- out.print("</FORM>");
- }
-
- }
-
- String pepperImg = "<img src='images/pepper.gif' border='0'>";
-
- public void invoke(Invocation inv) throws Exception {
-
- try {
- inv.result = inv.invoke();
-
- out.print("<h3>Result:</h3>");
- if (inv.method.getReturnType() == java.lang.Void.TYPE) {
- out.print("<p>Done</p>");
- } else if (inv.result == null) {
- out.print("<p><i>null</i></p>");
- } else {
- String clazz = inv.result.getClass().getName();
- String objID = getObjectID(inv.result);
- setObject(objID, inv.result);
-
- out.print("<table class='table table-bordered table-striped'><colgroup><col class='span2'><col class='span10'></colgroup><tbody>");
- printRow("<i>id</i>", objID);
- printRow("<i>class</i>", "<a href='viewclass.jsp?class=" + clazz + "'>" + clazz + "</a>");
- printRow("<i>toString</i>", formatObject(inv.result));
- out.print("</tbody></table>");
-
- out.print("<h3>Actions:</h3>");
- out.print("<a href='invokeobj.jsp?obj=" + objID + "'>Invoke a method on the object</a> or <a href='invokeobj.jsp?remove=" + objID + "'>Discard the object</a>");
- }
- } catch (InvocationTargetException e) {
- out.print("<h3>Exception:</h3>");
- Throwable t = e.getTargetException();
-
- out.print("<p>");
- out.print("Received a " + t.getClass().getName());
- //out.print(inv.method+"<br><br>");
- if (t instanceof java.rmi.RemoteException) {
- out.print("<br><br>");
- out.print("<i>RemoteException message:</i><br>");
- out.print(t.getMessage());
- out.print("<br><br>");
- out.print("<i>Nested exception's stack trace:</i><br>");
-
- while (t instanceof java.rmi.RemoteException) {
- t = ((java.rmi.RemoteException) t).detail;
- }
- out.print(formatThrowable(t));
- } else {
- out.print("<br><br>" + formatThrowable(t));
- }
-
- out.print("</p>");
-
- } catch (Throwable e) {
- out.print("<h3>Exception:</h3>");
-
- out.print("<p>");
- out.print(formatObject(e));
- out.print("</p>");
- }
- }
-
- public String formatThrowable(Throwable err) throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- err.printStackTrace(new PrintStream(baos));
- byte[] bytes = baos.toByteArray();
- StringBuffer sb = new StringBuffer(bytes.length);
- for (int i = 0; i < bytes.length; i++) {
- char c = (char) bytes[i];
- switch (c) {
- case' ':
- sb.append(" ");
- break;
- case'\n':
- sb.append("<br>");
- break;
- case'\r':
- break;
- default:
- sb.append(c);
- }
- }
- return sb.toString();
- }
-
-
- public String formatObject(Object obj) throws Exception {
- int max = 75;
- String val = obj.toString();
- val = (val.length() > max) ? val.substring(0, max - 3) + "..." : val;
- char[] chars = new char[val.length()];
- val.getChars(0, chars.length, chars, 0);
-
- StringBuffer sb = new StringBuffer(chars.length);
- for (int j = 0; j < chars.length; j++) {
- char c = chars[j];
- switch (c) {
- case'<':
- sb.append("<");
- break;
- case'>':
- sb.append(">");
- break;
- case'&':
- sb.append("&");
- break;
- default:
- sb.append(c);
- }
- }
- return sb.toString();
- }
-
- /*-----------------------------------------------------------*/
- // Method name formatting
- /*-----------------------------------------------------------*/
- public String formatMethod(Method m) throws Exception {
- StringBuffer sb = new StringBuffer();
-
- sb.append(getShortClassName(m.getReturnType())).append(" ");
- sb.append(m.getName());
-
- Class[] params = m.getParameterTypes();
- sb.append("(");
- for (int j = 0; j < params.length; j++) {
- sb.append(getShortClassName(params[j]));
- if (j != params.length - 1) {
- sb.append(", ");
- }
- }
- sb.append(")");
-
- Class[] excp = m.getExceptionTypes();
- if (excp.length > 0) {
- sb.append(" throws ");
- for (int j = 0; j < excp.length; j++) {
- sb.append(getShortClassName(excp[j]));
- if (j != excp.length - 1) {
- sb.append(", ");
- }
- }
- }
- return sb.toString();
- }
-
- /*-----------------------------------------------------------*/
- // Class name formatting
- /*-----------------------------------------------------------*/
- public String getShortClassName(Class clazz) throws Exception {
- if (clazz.isPrimitive()) {
- return clazz.getName();
- } else if (clazz.isArray() && clazz.getComponentType().isPrimitive()) {
- return clazz.getComponentType() + "[]";
- } else if (clazz.isArray()) {
- String name = clazz.getComponentType().getName();
- int dot = name.lastIndexOf(".") + 1;
- String shortName = name.substring(dot, name.length());
- return shortName + "[]";
- } else {
- String name = clazz.getName();
- int dot = name.lastIndexOf(".") + 1;
- String shortName = name.substring(dot, name.length());
- return shortName;
- }
- }
-
- public String getShortClassRef(Class clazz) throws Exception {
- if (clazz.isPrimitive()) {
- return "<font color='gray'>" + clazz.getName() + "</font>";
- } else if (clazz.isArray() && clazz.getComponentType().isPrimitive()) {
- return "<font color='gray'>" + clazz.getComponentType() + "[]</font>";
- } else if (clazz.isArray()) {
- String name = clazz.getComponentType().getName();
- int dot = name.lastIndexOf(".") + 1;
- String shortName = name.substring(dot, name.length());
- return "<a href='viewclass.jsp?class=" + name + "'>" + shortName + "[]</a>";
- } else {
- String name = clazz.getName();
- int dot = name.lastIndexOf(".") + 1;
- String shortName = name.substring(dot, name.length());
- return "<a href='viewclass.jsp?class=" + name + "'>" + shortName + "</a>";
- }
- }
-
- protected void printRow(String col1, String col2) throws Exception {
- out.print("<tr><td><font size='2'>");
- out.print(col1);
- out.print("</font></td><td><font size='2'>");
- out.print(col2);
- out.print("</font></td></tr>");
- }
-
- /*-----------------------------------------------------------*/
- // Object list support
- /*-----------------------------------------------------------*/
- public String getObjectID(Object obj) {
- Class clazz = obj.getClass();
- if (obj instanceof javax.ejb.EJBHome) {
- clazz = obj.getClass().getInterfaces()[0];
- } else if (obj instanceof javax.ejb.EJBObject) {
- clazz = obj.getClass().getInterfaces()[0];
- }
- return clazz.getName() + "@" + obj.hashCode();
- }
-
- public Object getObject(String objID) {
- return getObjectMap().get(objID);
- }
-
- public void setObject(String objID, Object obj) {
- getObjectMap().put(objID, obj);
- }
-
- public void removeObject(String objID) {
- getObjectMap().remove(objID);
- }
-
- @SuppressWarnings({"unchecked"})
- public Map<String, Object> getObjectMap() {
- Map<String, Object> objects = (Map<String, Object>) session.getAttribute("objects");
- return objects;
- }
-
- /*-----------------------------------------------------------*/
- // Invocation list support
- /*-----------------------------------------------------------*/
- public Invocation getInvocation(String invID) {
- return getInvocationMap().get(invID);
- }
-
- public void setInvocation(String invID, Invocation obj) {
- getInvocationMap().put(invID, obj);
- }
-
- @SuppressWarnings({"unchecked"})
- public Map<String, Invocation> getInvocationMap() {
- Map<String, Invocation> invocations = (Map<String, Invocation>) session.getAttribute("invocations");
- if (invocations == null) {
- invocations = new HashMap<String, Invocation>();
- session.setAttribute("invocations", invocations);
- }
- return invocations;
- }
-
- /*-----------------------------------------------------------*/
- // String conversion support
- /*-----------------------------------------------------------*/
- final Map<Class, Converter> converters = initConverters();
-
- public Converter getConverter(Class type) {
- Converter con = converters.get(type);
- if (con == null) {
- con = defaultConverter;
- }
- return con;
- }
-
- final Converter defaultConverter = new ObjectConverter();
-
- private Map<Class, Converter> initConverters() {
- Map<Class, Converter> map = new HashMap<Class, Converter>();
-
- map.put(String.class, new StringConverter());
- map.put(Character.class, new CharacterConverter());
- map.put(Boolean.class, new BooleanConverter());
- map.put(Byte.class, new ByteConverter());
- map.put(Short.class, new ShortConverter());
- map.put(Integer.class, new IntegerConverter());
- map.put(Long.class, new LongConverter());
- map.put(Float.class, new FloatConverter());
- map.put(Double.class, new DoubleConverter());
- map.put(Object.class, new ObjectConverter());
- map.put(Character.TYPE, map.get(Character.class));
- map.put(Boolean.TYPE, map.get(Boolean.class));
- map.put(Byte.TYPE, map.get(Byte.class));
- map.put(Short.TYPE, map.get(Short.class));
- map.put(Integer.TYPE, map.get(Integer.class));
- map.put(Long.TYPE, map.get(Long.class));
- map.put(Float.TYPE, map.get(Float.class));
- map.put(Double.TYPE, map.get(Double.class));
-
- return map;
- }
-
-
- abstract class Converter {
- public abstract Object convert(Class type, String raw) throws Exception;
-
- public String getInputControl(int argNumber, Class type) throws Exception {
- return "<INPUT type='text' NAME='arg" + argNumber + "'>";
- }
- }
-
- class StringConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return raw;
- }
- }
-
- class CharacterConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Character(raw.charAt(0));
- }
- }
-
- class BooleanConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Boolean(raw);
- }
- }
-
- class ByteConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Byte(raw);
- }
- }
-
- class ShortConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Short(raw);
- }
- }
-
- class IntegerConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Integer(raw);
- }
- }
-
- class LongConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Long(raw);
- }
- }
-
- class FloatConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Float(raw);
- }
- }
-
- class DoubleConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return new Double(raw);
- }
- }
-
- class ObjectConverter extends Converter {
- public Object convert(Class type, String raw) throws Exception {
- return raw;
- }
- }
-%>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/testejb.jsp b/tomee/tomee-webapp/src/main/webapp/testejb.jsp
deleted file mode 100644
index eb595b5..0000000
--- a/tomee/tomee-webapp/src/main/webapp/testejb.jsp
+++ /dev/null
@@ -1,277 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-javax.naming.Context,
-javax.naming.InitialContext,
-javax.servlet.http.HttpServletRequest,
-javax.servlet.jsp.JspWriter,
-java.io.ByteArrayOutputStream,
-java.io.IOException,
-java.io.PrintStream,
-java.lang.reflect.Method,
-java.util.Properties
-"%>
-<%@ page import="java.io.PrintWriter" %>
-<html>
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li class="active"><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <h2>Testing an Enterprise JavaBean</h2>
- <table class='table table-striped table-bordered table-condensed'><tbody>
-<%
- try{
- synchronized (this) {
- main(request, session, out);
- }
- } catch (Exception e){
- out.println("<p>FAIL</p>");
- return;
- }
-%>
- </tbody></table>
- </div>
- </div>
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
-</div>
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-<%!
- static String invLock = "lock";
- static int invCount;
-
- String OK = "<span style='color: green'><b>OK</b></span>";
- String FAIL = "<span style='color: red'><b>FAIL</b></span>";
-
- private Object getEjbObj(InitialContext ctx, ClassLoader myLoader) {
- try {
- Class[] params = new Class[0];
- Class homeInterface = Class.forName("javax.management.j2ee.ManagementHome", true, myLoader);
- Method create = homeInterface.getDeclaredMethod("create", params);
-
- Object ejbHome = ctx.lookup("MEJB");
- Object ejbObject = create.invoke(ejbHome);
-
- return ejbObject;
-
- } catch (Exception e) {
- return null;
- }
- }
-
- /**
- * The main method of this JSP
- */
- public void main(final HttpServletRequest request, final HttpSession session, final JspWriter out) throws Exception {
- final ClassLoader myLoader = this.getClass().getClassLoader();
- final Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
- p.put("openejb.loader", "embed");
-
- final InitialContext ctx = new InitialContext(p);
-
- // ---------------------------------------------------
- // Can I lookup a home interface from the testsuite?
- // ---------------------------------------------------
-
- printTest(out, "Looking up an ejb home", new TestAction() {
- @Override
- public String run() throws Exception {
- Object ejbHome = ctx.lookup("MEJB");
- if (ejbHome instanceof java.rmi.Remote) {
- return OK;
- } else {
- return FAIL;
- }
- }
- });
-
- // ---------------------------------------------------
- // Is the home interface visible?
- // ---------------------------------------------------
-
- printTest(out, "Checking for the home interface class definition", new TestAction() {
- @Override
- public String run() throws Exception {
- Class.forName("javax.management.j2ee.ManagementHome", true, myLoader);
- return OK;
- }
- });
-
- // ---------------------------------------------------
- // Can I invoke a create method on the ejb home?
- // ---------------------------------------------------
-
- printTest(out, "Invoking the create method on the ejb home", new TestAction() {
- @Override
- public String run() throws Exception {
- Object ejbObject = getEjbObj(ctx, myLoader);
- if (java.rmi.Remote.class.isInstance(ejbObject)) {
- return OK;
- } else {
- return FAIL;
- }
- }
- });
-
- // ---------------------------------------------------
- // Is the remote interface visible?
- // ---------------------------------------------------
-
- printTest(out, "Checking for the remote interface class definition", new TestAction() {
- @Override
- public String run() throws Exception {
- Class.forName("javax.management.j2ee.Management", true, myLoader);
- return OK;
- }
- });
-
- // ---------------------------------------------------
- // Can I invoke a business method on the ejb object?
- // ---------------------------------------------------
-
- printTest(out, "Invoking a business method on the ejb object", new TestAction() {
- @Override
- public String run() throws Exception {
- Class remoteInterface = Class.forName("javax.management.j2ee.Management", true, myLoader);
- Method businessMethod = remoteInterface.getDeclaredMethod("getMBeanCount");
- Object ejbObject = getEjbObj(ctx, myLoader);
-
- Object returnValue = null;
- if(ejbObject != null) {
- returnValue = businessMethod.invoke(ejbObject);
- }
-
- if (java.lang.Integer.class.isInstance(returnValue)) {
- return OK;
- } else {
- return FAIL;
- }
- }
- });
-
- }
-
- private interface TestAction {
- String run() throws Exception;
- }
-
- protected void printTest(JspWriter out, String test, TestAction testAction) throws IOException {
- out.print("<tr><td>");
- out.print(test);
- out.print("</td><td>");
- try {
- out.print(testAction.run());
- } catch (Exception e) {
- out.print(FAIL + "<BR>" + formatThrowable(e));
- }
- out.print("</td></tr>");
- }
-
- public String formatThrowable(Throwable err) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- err.printStackTrace(new PrintStream(baos));
- byte[] bytes = baos.toByteArray();
- StringBuffer sb = new StringBuffer(bytes.length);
- for (int i = 0; i < bytes.length; i++) {
- char c = (char) bytes[i];
- switch (c) {
- case' ':
- sb.append(" ");
- break;
- case'\n':
- sb.append("<br>");
- break;
- case'\r':
- break;
- default:
- sb.append(c);
- }
- }
- return sb.toString();
- }
-%>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/testhome.jsp b/tomee/tomee-webapp/src/main/webapp/testhome.jsp
deleted file mode 100644
index e9480f8..0000000
--- a/tomee/tomee-webapp/src/main/webapp/testhome.jsp
+++ /dev/null
@@ -1,201 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-javax.servlet.http.HttpServletRequest,
-javax.servlet.jsp.JspWriter,
-java.io.File
-"%>
-<%@ page import="org.apache.tomee.common.TomcatVersion"%>
-<html>
-
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li class="active"><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <h2>Testing openejb.home validity</h2>
- <table class='table table-striped table-bordered table-condensed'><tbody>
-<%
- try{
- synchronized (this) {
- main(request, session, out);
- }
- } catch (Exception e){
- out.println("FAIL");
- //throw e;
- return;
- }
-%>
- </tbody></table>
- <a class='btn' href='testint.jsp'>Continue tests</a>
- </div>
- </div>
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
-</div>
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-<%!
- static String invLock = "lock";
- static int invCount;
-
- HttpSession session;
- HttpServletRequest request;
- JspWriter out;
-
- String OK = "<td><span style='color: green'><b>OK</b></span></td>";
- String FAIL = "<td><span style='color: red'><b>FAIL</b></span></td>";
-
- /**
- * The main method of this JSP
- */
- public void main(HttpServletRequest request, HttpSession session, JspWriter out) throws Exception {
- this.request = request;
- this.session = session;
- this.out = out;
-
- try {
- // The openejb.home must be set
- out.print("<tr><td>openejb.home is set</td> ");
- String homePath = System.getProperty("openejb.home");
- if (homePath == null) handleError(NO_HOME, INSTRUCTIONS);
- out.print(OK);
- out.print("</tr>");
-
- // The openejb.home must exist
- out.print("<tr><td>openejb.home exists</td> ");
- File openejbHome = new File(homePath);
- if (!openejbHome.exists()) handleError(BAD_HOME + homePath, NOT_THERE, INSTRUCTIONS);
- out.print(OK);
- out.print("</tr>");
-
- // The openejb.home must be a directory
- out.print("<tr><td>openejb.home is a directory</td> ");
- if (!openejbHome.isDirectory()) handleError(BAD_HOME + homePath, NOT_DIRECTORY, INSTRUCTIONS);
- out.print(OK);
- out.print("</tr>");
-
- // The openejb.home must contain a 'lib' directory
- out.print("<tr><td>has lib directory</td> ");
-
- File openejbHomeLib;
- if (TomcatVersion.v6.isTheVersion() || TomcatVersion.v7.isTheVersion()) {
- openejbHomeLib = new File(openejbHome, "lib");
- } else {
- File common = new File(openejbHome, "common");
- openejbHomeLib = new File(common, "lib");
- }
- if (!openejbHomeLib.exists()) handleError(BAD_HOME + homePath, NO_LIB, INSTRUCTIONS);
- out.print(OK);
- out.print("</tr>");
-
- } catch (Exception e) {
- out.print(FAIL);
- out.print("<p>" + e.getMessage() + "</p>");
- }
- }
-
- String NO_HOME = "The openejb.home is not set.";
- String BAD_HOME = "Invalid openejb.home: ";
- String NOT_THERE = "The path specified does not exist.";
- String NOT_DIRECTORY = "The path specified is not a directory.";
- String NO_LIB = "The path specified is not correct, it does not contain a 'lib' directory.";
- String INSTRUCTIONS = "Please edit the web.xml of the openejb_loader webapp and set the openejb.home init-param to the full path where OpenEJB is installed.";
-
- private void handleError(String m1, String m2, String m3) throws Exception {
- String msg = "<br><b>Please Fix:</b><br><br>";
- msg += m1 + "<br><br>";
- msg += m2 + "<br><br>";
- msg += m3 + "<br>";
- throw new Exception(msg);
- }
-
- private void handleError(String m1, String m2) throws Exception {
- String msg = "<br><b>Please Fix:</b><br><br>";
- msg += m1 + "<br><br>";
- msg += m2 + "<br>";
- throw new Exception(msg);
- }
-%>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/testint.jsp b/tomee/tomee-webapp/src/main/webapp/testint.jsp
deleted file mode 100644
index 6885887..0000000
--- a/tomee/tomee-webapp/src/main/webapp/testint.jsp
+++ /dev/null
@@ -1,256 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-javax.naming.Context,
-javax.naming.InitialContext,
-javax.servlet.http.HttpServletRequest,
-javax.servlet.jsp.JspWriter,
-java.io.ByteArrayOutputStream,
-java.io.IOException,
-java.io.PrintStream,
-java.lang.reflect.Method,
-java.util.Properties
-"%>
-<html>
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li class="active"><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <h2>Testing openejb.home validity</h2>
- <table class='table table-striped table-bordered table-condensed'><tbody>
-<%
- final InitialContext ctx;
- try{
- synchronized (this) {
- ctx = main(request, session, out);
- }
- } catch (Exception e){
- out.println("<p>FAIL</p>");
- return;
- }
-%>
- </tbody></table>
-<%
- try {
- Object obj = ctx.lookup("client");
- if (obj instanceof Context) {
- out.print("<a class='btn' href='testejb.jsp'>Continue tests</a>");
- }
-
- } catch (Exception e) {
- }
-%>
-
- </div>
- </div>
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
-</div>
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-<%!
- static String invLock = "lock";
- static int invCount;
-
- String OK = "<span style='color: green'><b>OK</b></span>";
- String FAIL = "<span style='color: red'><b>FAIL</b></span>";
-
- /**
- * The main method of this JSP
- */
- public InitialContext main(final HttpServletRequest request, final HttpSession session, final JspWriter out) throws Exception {
- Properties p = new Properties();
-
- p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
- p.put("openejb.loader", "embed");
-
- final InitialContext ctx = new InitialContext(p);
-
- // ---------------------------------------------------
- // Were the OpenEJB classes installed?
- // ---------------------------------------------------
-
- printTest(out, "Were the OpenEJB classes installed", new TestAction() {
- @Override
- public String run() throws Exception {
- ClassLoader myLoader = this.getClass().getClassLoader();
- Class.forName("org.apache.openejb.OpenEJB", true, myLoader);
- return OK;
- }
- });
-
-
- // ---------------------------------------------------
- // Are the EJB libraries visible?
- // ---------------------------------------------------
-
- printTest(out, "Were the EJB classes installed", new TestAction() {
- @Override
- public String run() throws Exception {
- Class.forName("javax.ejb.EJBHome", true, this.getClass().getClassLoader());
- return OK;
- }
- });
-
-
- // ---------------------------------------------------
- // Was OpenEJB initialized (aka started)?
- // ---------------------------------------------------
-
- printTest(out, "Was OpenEJB initialized (aka started)", new TestAction() {
- @Override
- public String run() throws Exception {
- Class openejb = Class.forName("org.apache.openejb.OpenEJB", true, this.getClass().getClassLoader());
- Method isInitialized = openejb.getDeclaredMethod("isInitialized");
- Boolean running = (Boolean) isInitialized.invoke(openejb);
-
- if (running) {
- return OK;
- } else {
- return FAIL;
- }
- }
- });
-
- // ---------------------------------------------------
- // Can I lookup anything?
- // ---------------------------------------------------
-
- printTest(out, "Performing a test lookup", new TestAction() {
- @Override
- public String run() throws Exception {
- Object obj = ctx.lookup("");
-
- if (obj.getClass().getName().equals("org.apache.openejb.core.ivm.naming.IvmContext")) {
- return OK;
- } else {
- return FAIL;
- }
- }
- });
-
- return ctx;
- }
-
- private interface TestAction {
- String run() throws Exception ;
- }
-
- protected void printTest(JspWriter out, String test, TestAction testAction) throws IOException {
- out.print("<tr><td>");
- out.print(test);
- out.print("</td><td>");
- try {
- out.print(testAction.run());
- } catch (Exception e) {
- out.print(FAIL + "<BR>" + formatThrowable(e));
- }
- out.print("</td></tr>");
- }
-
- public String formatThrowable(Throwable err) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- err.printStackTrace(new PrintStream(baos));
- byte[] bytes = baos.toByteArray();
- StringBuffer sb = new StringBuffer(bytes.length);
- for (int i = 0; i < bytes.length; i++) {
- char c = (char) bytes[i];
- switch (c) {
- case' ':
- sb.append(" ");
- break;
- case'\n':
- sb.append("<br>");
- break;
- case'\r':
- break;
- default:
- sb.append(c);
- }
- }
- return sb.toString();
- }
-%>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/testsuite.jsp b/tomee/tomee-webapp/src/main/webapp/testsuite.jsp
deleted file mode 100644
index 47d950d..0000000
--- a/tomee/tomee-webapp/src/main/webapp/testsuite.jsp
+++ /dev/null
@@ -1,201 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-javax.servlet.http.HttpServletRequest,
-javax.servlet.jsp.JspWriter,
-java.io.ByteArrayOutputStream,
-java.io.PrintStream
-"%>
-<%@ page import="org.apache.openejb.test.TestRunner" %>
-<html>
-<head>
- <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>OpenEJB/Tomcat</title>
- <link href="default.css" rel="stylesheet">
-</head>
-<body marginwidth="0" marginheight="0" leftmargin="0" bottommargin="0" topmargin="0" vlink="#6763a9" link="#6763a9" bgcolor="#ffffff">
-<a name="top"></a>
-<table width="712" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td bgcolor="#5A5CB8" align="left" valign="top" width="7"><img height="9" width="1" border="0" src="images/dotTrans.gif"></td>
- <td bgcolor="#5A5CB8" align="left" valign="top" width="40"><img border="0" height="6" width="40" src="images/dotTrans.gif"></td>
- <td bgcolor="#5A5CB8" align="left" valign="top" height="2" width="530"><img border="0" height="6" width="530" src="images/top_2.gif"></td>
- <td bgcolor="#E24717" align="left" valign="top" height="2" width="120"><img src="images/top_3.gif" width="120" height="6" border="0"></td>
- </tr>
- <tr>
- <td bgcolor="#5A5CB8" align="left" valign="top" bgcolor="#ffffff" width="13"><img border="0" height="15" width="13" src="images/dotTrans.gif"></td>
- <td align="left" valign="top" width="40"><img border="0" height="1" width="1" src="images/dotTrans.gif"></td>
- <td align="left" valign="middle" width="530"><a href="http://openejb.apache.org"><span class="menuTopOff">OpenEJB</span></a><img border="0" height="2" width="20" src="images/dotTrans.gif"><a href="index.jsp"><span class="menuTopOff">Index</span></a><img border="0" height="2" width="20" src="images/dotTrans.gif"><a href="viewjndi.jsp"><span class="menuTopOff">JNDI</span></a><img border="0" height="2" width="20" src="images/dotTrans.gif"><a href="viewejb.jsp"><span class="menuTopOff">EJB</span></a><img border="0" height="2" width="20" src="images/dotTrans.gif"><a href="viewclass.jsp"><span class="menuTopOff">Class</span></a><img border="0" height="2" width="20" src="images/dotTrans.gif"><a href="invokeobj.jsp"><span class="menuTopOff">Invoke</span></a><img border="0" height="2" width="20" src="images/dotTrans.gif"></td>
- <td align="left" valign="top" height="20" width="120"><img border="0" height="2" width="10" src="images/dotTrans.gif"></td>
- </tr>
- <tr>
- <td align="left" valign="top" bgcolor="#a9a5de" width="7"><img border="0" height="3" width="7" src="images/line_sm.gif"></td>
- <td align="left" valign="top" height="3" width="40"><img border="0" height="3" width="40" src="images/line_light.gif"></td>
- <td align="left" valign="top" height="3" width="530"><img border="0" height="3" width="530" src="images/line_light.gif"></td>
- <td align="left" valign="top" height="3" width="120"><img height="1" width="1" border="0" src="images/dotTrans.gif"></td>
- </tr>
- <tr>
- <td align="left" valign="top" bgcolor="#a9a5de" width="7"> </td>
- <td align="left" valign="top" width="40"> </td>
- <td valign="top" width="530" rowspan="4">
- <table width="530" cellspacing="0" cellpadding="0" border="0" rows="2" cols="1">
- <tr>
- <td align="left" valign="top"><br>
- <img width="200" vspace="0" src="images/logo_ejb2.gif" hspace="0" height="55" border="0">
- <br>
- <img src="images/dotTrans.gif" hspace="0" height="7" border="0"><br>
- <span class="pageTitle">
- OpenEJB Test Suite
- </span>
- <br>
- <img src="images/dotTrans.gif" hspace="0" height="1" border="0"></td>
- </tr>
- </table>
- <p>
- </p>
- <FONT SIZE="2">
- <%
- try{
- synchronized (this) {
- main(request, session, out);
- }
- } catch (Exception e){
- out.println("FAIL");
- //throw e;
- return;
- }
-%>
-<BR><BR>
-<BR>
-</FONT>
-
- </td>
- <td align="left" valign="top" height="5" width="120">
-
-
- </td>
- </tr>
- </table>
- </body>
-</html>
-
-<%!
- String tab = " ";
-
- static String invLock = "lock";
- static int invCount;
-
- HttpSession session;
- HttpServletRequest request;
- JspWriter out;
-
- /**
- * The main method of this JSP
- */
- public void main(HttpServletRequest request, HttpSession session, JspWriter out) throws Exception {
- this.request = request;
- this.session = session;
- this.out = out;
-
- String doInvoke = request.getParameter("invoke");
- if (doInvoke != null) {
- invoke();
- } else {
- out.print("<FORM NAME='invoke' METHOD='GET' ACTION='testsuite.jsp'>");
- out.print("<INPUT type='SUBMIT' NAME='invoke' value='Invoke'>");
- out.print("</FORM>");
- }
- }
-
- String pepperImg = "<img src='images/pepper.gif' border='0'>";
-
- public void invoke() throws Exception {
-
- try {
- System.setProperty("openejb.test.server", "org.apache.openejb.test.IvmTestServer");
- System.setProperty("openejb.test.database", "org.apache.openejb.test.InstantDbTestDatabase");
- //test.server.class=org.apache.openejb.test.IvmTestServer
- //out.print("B");
- //Object runner = this.getClass().forName("org.apache.openejb.test.TestRunner").newInstance();
- //out.print("C");
-
- //Method main = runner.getClass().getMethod("main",new Class[]{new String[]{}.getClass()});
-
- String[] args = new String[]{"org.apache.openejb.test.ClientTestSuite"};
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- org.apache.openejb.test.ResultPrinter printer = new org.apache.openejb.test.ResultPrinter(new PrintStream(baos));
- TestRunner runner = new TestRunner(printer);
-
- runner.start(args);
- byte[] bytes = baos.toByteArray();
- StringBuffer sb = new StringBuffer(bytes.length);
- for (int i = 0; i < bytes.length; i++) {
- char c = (char) bytes[i];
- switch (c) {
- case' ':
- sb.append(" ");
- break;
- case'\n':
- sb.append("<br>");
- break;
- case'\r':
- break;
- default:
- sb.append(c);
- }
- }
- out.print(sb.toString());
-
- //main.invoke(runner, args);
-
-
- } catch (Throwable e) {
- out.print("<br><b>Bad Exception:</b><br><br>");
- out.print(formatThrowable(e));
- }
- }
-
- public String formatThrowable(Throwable err) throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- err.printStackTrace(new PrintStream(baos));
- byte[] bytes = baos.toByteArray();
- StringBuffer sb = new StringBuffer(bytes.length);
- for (int i = 0; i < bytes.length; i++) {
- char c = (char) bytes[i];
- switch (c) {
- case' ':
- sb.append(" ");
- break;
- case'\n':
- sb.append("<br>");
- break;
- case'\r':
- break;
- default:
- sb.append(c);
- }
- }
- return sb.toString();
- }
-%>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/viewclass.jsp b/tomee/tomee-webapp/src/main/webapp/viewclass.jsp
deleted file mode 100644
index 9063f6f..0000000
--- a/tomee/tomee-webapp/src/main/webapp/viewclass.jsp
+++ /dev/null
@@ -1,252 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-java.lang.reflect.Method,
-java.lang.reflect.Modifier,
-java.util.Map
-"%>
-<html>
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li class="active"><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
-
-<%
-
- String className = request.getParameter("class");
- try{
-
- if (className == null || className.trim().length() == 0) {
-%>
-<form class="well form-search" NAME='view' METHOD='GET' ACTION='viewclass.jsp'>
- <input type="text" class="input-xlarge search-query" NAME='class' placeholder="Class name">
- <button class="btn" type="submit"><i class="icon-search"></i> Search</button>
-</form>
-<%
- out.print("<table class='table table-striped table-bordered table-condensed'><tbody>");
- out.print("<tr><td>" + getClassRef("javax.ejb.EJBHome") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.ejb.EJBObject") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.ejb.EnterpriseBean") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.ejb.SessionBean") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.ejb.EntityBean") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.servlet.http.HttpServlet") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.servlet.http.HttpServletRequest") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.servlet.http.HttpServletResponse") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.servlet.http.HttpSession") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.naming.InitialContext") + "</td></tr>");
- out.print("<tr><td>" + getClassRef("javax.naming.Context") + "</td></tr>");
- out.print("</tbody></table>");
-
- } else {
- Class clazz = (Class)session.getAttribute(className);
- if(clazz == null)
- clazz = Class.forName(className);
- printClass(clazz,out,session);
- }
- } catch (Exception e){
- out.println("Could not find class "+className+" <br/>");
- out.println("<a href='viewclass.jsp'>Back</a>");
- // throw e;
- //return;
- }
-%>
-
-
- </div>
- </div>
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
-</div>
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-<%!
-
- public void printClass(Class clazz, javax.servlet.jsp.JspWriter out, HttpSession session) throws Exception {
- out.print("<h2>"+clazz.getName()+"</h2>");
- Method[] methods = clazz.getDeclaredMethods();
- out.print("<table class='table table-striped table-bordered table-condensed'><tbody>");
- for (int i=0; i < methods.length; i++){
- printMethod( methods[i], out );
- }
- out.print("</tbody></table>");
-
- Class sup = clazz.getSuperclass();
- if (sup != null) {
- out.print("<h3>Extends:</h3>");
- out.print("<p>" + getClassRef(sup,session) + "</p>");
- }
-
- Class[] intf = clazz.getInterfaces();
- if (intf.length > 0) {
- out.print("<h3>Implements:</h3>");
- out.print("<table class='table table-striped table-bordered table-condensed'><tbody>");
- for (int i=0; i < intf.length; i++){
- out.print("<tr><td>" + getClassRef(intf[i],session) + "</td></tr>");
- }
- out.print("</tbody></table>");
- }
- }
-
- public void printMethod(Method m, javax.servlet.jsp.JspWriter out) throws Exception {
- out.print("<tr><td>");
- out.print(" "+getModifier(m));
-
- out.print(" "+getShortClassRef(m.getReturnType())+" ");
-
- out.print(""+m.getName()+" ");
- Class[] params = m.getParameterTypes();
- out.print("<font color='gray'>(</font>");
- for (int j=0; j < params.length; j++){
- out.print(getShortClassRef(params[j]));
- if (j != params.length-1) {
- out.print(", ");
- }
- }
- out.print("<font color='gray'>)</font>");
-
- Class[] excp = m.getExceptionTypes();
- if (excp.length > 0) {
- out.print(" <font color='gray'>throws</font> ");
- for (int j=0; j < excp.length; j++){
- out.print(getShortClassRef(excp[j]));
- if (j != excp.length-1) {
- out.print(", ");
- }
- }
- }
- out.print("</td></tr>");
- }
- public String getModifier(Method m) throws Exception {
- int mod = m.getModifiers();
-
- if (Modifier.isPublic(mod)) {
- return "public";
-
- } else if (Modifier.isPrivate(mod)) {
- return "private";
-
- } else if (Modifier.isProtected(mod)) {
- return "protected";
-
- } else {
- return "";
- }
- }
-
-/* public String getClassRef(Class clazz) throws Exception {
- String name = clazz.getName();
- return "<a href='viewclass.jsp?class="+name+"'>"+name+"</a>";
- }
- */
- public String getClassRef(String name) throws Exception {
- return "<a href='viewclass.jsp?class=" +name + "'>" + name + "</a>";
- }
-
- public String getClassRef(Class clazz, HttpSession session) throws Exception {
- String name = clazz.getName();
- session.setAttribute(name,clazz);
- return getClassRef(name);
- }
-
- public String getShortClassRef(Class clazz) throws Exception {
- if (clazz.isPrimitive()) {
- return "<font color='gray'>"+clazz.getName()+"</font>";
- } else if (clazz.isArray() && clazz.getComponentType().isPrimitive()) {
- return "<font color='gray'>"+clazz.getComponentType()+"[]</font>";
- } else if (clazz.isArray()) {
- String name = clazz.getComponentType().getName();
- int dot = name.lastIndexOf(".")+1;
- String shortName = name.substring(dot,name.length());
- return "<a href='viewclass.jsp?class="+name+"'>"+shortName+"[]</a>";
- } else {
- String name = clazz.getName();
- int dot = name.lastIndexOf(".")+1;
- String shortName = name.substring(dot,name.length());
- return "<a href='viewclass.jsp?class="+name+"'>"+shortName+"</a>";
- }
- }
-
-
-%>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/viewconsole.jsp b/tomee/tomee-webapp/src/main/webapp/viewconsole.jsp
deleted file mode 100644
index e18892f..0000000
--- a/tomee/tomee-webapp/src/main/webapp/viewconsole.jsp
+++ /dev/null
@@ -1,146 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
-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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<html>
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="default.css" rel="stylesheet">
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
-
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
-
- <div class="nav-collapse">
- <ul class="nav">
- <li><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- <li class="active"><a href="viewconsole.jsp.jsp">Console</a></li>
- </ul>
-
- </div>
- <!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <p>
- <textarea id='scriptCodeTXT' class="span8 input-xlarge" id="textarea" rows="25">
- </textarea><BR>
- <a class="btn btn-primary" href="#" onclick="TOMEE.executeScript();">Run</a>
- </p>
-
- </div>
- </div>
-
- <div id="resultsDIV" class="row-fluid"></div>
-
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache
- and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
-</div>
-<!-- /container -->
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-<script type="text/javascript">
- var TOMEE = (function () {
-
- var executeScript = function () {
-
- var request = $.ajax({
- type: 'POST',
- dataType: 'text',
- data: {
- 'scriptCode': $('#scriptCodeTXT').val()
- },
- url: '/tomee/ws/console',
- success: function (data) {
- var value = data;
- if(!value || value === '') {
- value = 'done'
- }
- var el = $('<div class="well"><p>' + data + '</p></div>');
- $('#resultsDIV').prepend(el);
- },
- error: function (data) {
- var bodyHtml = /<body.*?>([\s\S]*)<\/body>/.exec(data.responseText)[1];
- var el = $('<div class="well"><p>' + bodyHtml + '</p></div>');
- $('#resultsDIV').prepend(el);
- }
- });
- };
-
- return {
- executeScript: executeScript
- }
- })();
-</script>
-
-</body>
-</html>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/viewejb.jsp b/tomee/tomee-webapp/src/main/webapp/viewejb.jsp
deleted file mode 100644
index ded1161..0000000
--- a/tomee/tomee-webapp/src/main/webapp/viewejb.jsp
+++ /dev/null
@@ -1,249 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-org.apache.openejb.BeanType,
-org.apache.openejb.BeanContext,
-org.apache.openejb.loader.SystemInstance,
-org.apache.openejb.spi.ContainerSystem,
-javax.naming.Context,
-javax.naming.InitialContext
-"%>
-<%@ page import="javax.servlet.http.HttpServletRequest" %>
-<%@ page import="javax.servlet.http.HttpSession" %>
-<%@ page import="java.io.IOException" %>
-<%@ page import="java.util.HashMap" %>
-<%@ page import="java.util.Map" %>
-<%@ page import="java.util.List" %>
-<%@ page import="java.util.Properties" %>
-<%@ page import="java.lang.reflect.Field" %>
-<%@ page import="java.lang.reflect.Method" %>
-<html>
-
-
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-<body>
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li><a href="index.jsp">Index</a></li>
- <li><a href="viewjndi.jsp">JNDI</a></li>
- <li class="active"><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div><!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
- <div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <%
- try{
- String ejb = request.getParameter("ejb");
- String jndiName = request.getParameter("jndiName");
- String contextID = request.getParameter("ctxID");
- if (ejb == null) {
- out.print("<p>No EJB specified</p>");
- } else {
- printEjb(ejb,jndiName,contextID,out, session);
-
- }
- } catch (Exception e){
-
- out.println("<p>FAIL: <br>");
- out.print(e.getMessage() + "</p>");
- throw e;
- //return;
- }
- %>
- </div>
- </div>
-
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
- </div> <!-- /container -->
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-<%!
- private BeanContext getDeployment(String deploymentID) {
- try {
- ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
- BeanContext ejb = containerSystem.getBeanContext(deploymentID);
- return ejb;
- } catch (Exception e) {
- return null;
- }
- }
-
- public void printEjb(String name,String jndiName, String contextID, javax.servlet.jsp.JspWriter out, HttpSession session) throws Exception {
- String id = (name.startsWith("/")) ? name.substring(1, name.length()) : name;
- BeanContext ejb = getDeployment(id);
-
- if (ejb == null) {
- out.print("<p>No such EJB: " + id + "</p>");
- return;
- }
- String type = null;
-
- switch (ejb.getComponentType()) {
- case CMP_ENTITY:
- type = "EntityBean with Container-Managed Persistence";
- break;
- case BMP_ENTITY:
- type = "EntityBean with Bean-Managed Persistence";
- break;
- case STATEFUL:
- type = "Stateful SessionBean";
- break;
- case STATELESS:
- type = "Stateless SessionBean";
- break;
- case SINGLETON:
- type = "Singleton SessionBean";
- break;
- case MANAGED:
- type = "Managed SessionBean";
- break;
- default:
- type = "Unkown Bean Type";
- break;
- }
- out.print("<h2>" + type + "</h2>");
- out.print("<table class=\"table table-striped table-bordered\"><tbody>");
- printRow("JNDI Name", jndiName, out);
- if(ejb.getRemoteInterface() != null)
- printRow("Remote Interface", getClassRef(ejb.getRemoteInterface(),session), out);
- if(ejb.getHomeInterface() != null)
- printRow("Home Interface", getClassRef(ejb.getHomeInterface(),session), out);
- if(ejb.getBeanClass() != null)
- printRow("Bean Class", getClassRef(ejb.getBeanClass(),session), out);
- if(ejb.getBusinessLocalInterfaces().size() > 0)
- printRow("Business Local Interfaces", getClassRefs(ejb.getBusinessLocalInterfaces(),session), out);
- if(ejb.getBusinessRemoteInterfaces().size() > 0)
- printRow("Business Remote Interfaces", getClassRefs(ejb.getBusinessRemoteInterfaces(),session), out);
- if (ejb.getComponentType() == BeanType.BMP_ENTITY || ejb.getComponentType() == BeanType.CMP_ENTITY) {
- printRow("Primary Key", getClassRef(ejb.getPrimaryKeyClass(),session), out);
- }
- out.print("</tbody></table>");
-
- // Browse JNDI with this ejb
- //javax.servlet.http.HttpSession session = this.session;
- //noinspection unchecked
- Map<String, Object> objects = (Map<String, Object>) session.getAttribute("objects");
-
- Context ctx;
- if(contextID == null){
- Properties p = new Properties();
-
- p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
- p.put("openejb.loader", "embed");
-
- ctx = new InitialContext(p);
- }else{
- ctx = (Context)session.getAttribute(contextID);
- }
- Object obj = ctx.lookup(jndiName);
- // String objID = ejb.getHomeInterface().getName() + "@" + obj.hashCode();
- String objID = ""+obj.hashCode(); //TODO: Not the best of the ID's, more meaningful ID would be better. Right now hashcode would suffice
- objects.put(objID, obj);
- String invokeURL = "<a class='btn' href='invokeobj.jsp?obj=" + objID + "'>Invoke this EJB</a>";
-
- Context enc = ejb.getJndiEnc();
- String ctxID = "enc" + enc.hashCode();
- session.setAttribute(ctxID, enc);
- String jndiURL = "<a class='btn' href='viewjndi.jsp?ctxID=" + ctxID + "'>Browse this EJB's private JNDI namespace</a>";
-
- out.print("<div class='btn-group'>" + invokeURL + jndiURL + "</div>");
- }
-
- protected void printRow(String col1, String col2, javax.servlet.jsp.JspWriter out) throws IOException {
- out.print("<tr>");
- out.print("<td>" + col1 + "</td>");
- out.print("<td>" + col2 + "</td>");
- out.print("</tr>");
- }
-
- public String getClassRef(Class clazz, HttpSession session) throws Exception {
- String name = clazz.getName();
- session.setAttribute(name,clazz);
- return "<a href='viewclass.jsp?class=" + name + "'>" + name + "</a>";
- }
-
- public String getClassRefs(List<Class> classes, HttpSession session) throws Exception{
- String refs = "";
- for(Class clazz: classes){
- refs += getClassRef(clazz,session)+"<br/>";
- }
- return refs;
- }
-%>
-
diff --git a/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp b/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp
deleted file mode 100644
index aa45c54..0000000
--- a/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp
+++ /dev/null
@@ -1,318 +0,0 @@
-<% out.print("<!DOCTYPE html>"); %>
-<!--
-
- 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.
-
--->
-
-<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<%@ page import="
-javax.naming.Context,
-javax.naming.InitialContext,
-javax.naming.NameClassPair,
-javax.naming.NamingEnumeration,
-java.util.Properties
-"%>
-<%@ page import="javax.naming.NamingException" %>
-<%@ page import="java.lang.reflect.Method" %>
-<%@ page import="java.lang.reflect.Field" %>
-<%@ page import="org.apache.openejb.util.proxy.LocalBeanProxyFactory" %>
-<html>
-<head>
- <meta charset="utf-8">
- <title>TomEE</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <!-- Le styles -->
- <link href="lib/bootstrap/2.1.1/css/bootstrap.css" rel="stylesheet">
- <style type="text/css">
- body {
- padding-top: 60px;
- padding-bottom: 40px;
- }
-
- .sidebar-nav {
- padding: 9px 0;
- }
- </style>
- <link href="lib/bootstrap/2.1.1/css/bootstrap-responsive.css" rel="stylesheet">
-
- <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
- <!--[if lt IE 9]>
- <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
-</head>
-
-
-<body>
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
-
- <div class="nav-collapse">
- <ul class="nav">
- <li><a href="index.jsp">Index</a></li>
- <li class="active"><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
-
- </div>
- <!--/.nav-collapse -->
- </div>
- </div>
-</div>
-
-
-<div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <%
- try{
- String selected = request.getParameter("selected");
- if (selected == null) {
- selected = "";
- }
-
- ctxID = request.getParameter("ctxID");
- ctx = null;
-
- if (ctxID == null) {
- Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
- p.put("openejb.loader", "embed");
- try {
- ctx = new InitialContext( p );
- out.print("<h2>OpenEJB Global JNDI Namespace</h2>");
- } catch(Exception e) {
- out.print("<h2>OpenEJB Not Installed</h2>");
- }
- } else {
- ctx = (Context)session.getAttribute(ctxID);
- if (ctxID.startsWith("enc")) {
- %>
- <h2>JNDI Environment Naming Context <a href="#" rel="tooltip" title="This is the private namespace of an Enterprise JavaBean">(ENC)</a></h2>
- <%
- }
- }
-
- if (ctx != null) {
- Node root = new RootNode();
- buildNode(root,ctx);
- out.println("<p>");
- printNodes(root, out, "",selected);
- out.println("</p>");
- }
- } catch (Exception e) {
- out.println("<p>FAIL</p>");
- throw e;
- //return;
- }
- %>
- </div>
- </div>
-
- <hr>
-
- <footer>
- <p>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p>
- </footer>
- </div> <!-- /container -->
-
-
-<!-- Le javascript
-================================================== -->
-<!-- Placed at the end of the document so the pages load faster -->
-<script src="lib/jquery/jquery-1.7.2.min.js"></script>
-<script src="lib/bootstrap/2.1.1/js/bootstrap.js"></script>
-
-</body>
-</html>
-
-
-<%!
- String ctxID;
- Context ctx;
-
- class Node {
- static final int CONTEXT = 1;
- static final int BEAN = 2;
- static final int OTHER = 3;
- Node parent;
- Node[] children = new Node[0];
- String name;
- int type = 0;
- // returns the JNDI name
- public String getID() {
- if (parent instanceof RootNode) {
- return name;
- } else {
- return parent.getID() + "/" + name;
- }
- }
-
- public String getName() {
- return name;
- }
-
- public int getType() {
- return type;
- }
-
- public void addChild(Node child) {
- int len = children.length;
- Node[] newChildren = new Node[len + 1];
- System.arraycopy(children, 0, newChildren, 0, len);
- newChildren[len] = child;
- children = newChildren;
- child.parent = this;
- }
- }
-
- class RootNode extends Node {
- public String getID() {
- return "";
- }
-
- public String getName() {
- return "";
- }
-
- public int getType() {
- return Node.CONTEXT;
- }
- }
-
- public void buildNode(Node parent, Context ctx) throws Exception {
- NamingEnumeration namingEnumeration = ctx.list("");
- while (namingEnumeration.hasMoreElements()) {
- NameClassPair pair = (NameClassPair) namingEnumeration.next();
- Node node = new Node();
- parent.addChild(node);
- node.name = pair.getName();
-
- Object obj = lookup(ctx, node.getName());
- if (obj instanceof Context) {
- node.type = Node.CONTEXT;
- buildNode(node, (Context) obj);
- } else if (obj instanceof java.rmi.Remote
- || obj instanceof org.apache.openejb.core.ivm.IntraVmProxy
- || (obj != null && LocalBeanProxyFactory.isProxy(obj.getClass()))) {
- node.type = Node.BEAN;
- } else {
- node.type = Node.OTHER;
- }
- }
- }
-
- String openImg = "<img src='images/TreeOpen.gif' border='0'>";
- String closedImg = "<img src='images/TreeClosed.gif' border='0'>";
- String ejbImg = "<img src='images/ejb.gif' border='0'>";
- String javaImg = "<img src='images/JavaCup.gif' border='0'>";
-
-
- public void printNodes(Node node, javax.servlet.jsp.JspWriter out, String tabs, String selected) throws Exception {
- switch (node.getType()) {
- case Node.CONTEXT:
- printContextNode(node, out, tabs, selected);
- break;
- case Node.BEAN:
- printBeanNode(node, out, tabs);
- break;
- default:
- printOtherNode(node, out, tabs);
- break;
- }
-
- }
-
- public void printContextNode(Node node, javax.servlet.jsp.JspWriter out, String tabs, String selected) throws Exception {
- String id = node.getID();
- if (selected.startsWith(id)) {
- if (ctxID != null) {
- out.print(tabs + "<a href='viewjndi.jsp?ctxID=" + ctxID + "&selected=" + id + "'>" + openImg + " " + node.getName() + "</a><br>");
- } else {
- out.print(tabs + "<a href='viewjndi.jsp?selected=" + id + "'>" + openImg + " " + node.getName() + "</a><br>");
- }
- for (int i = 0; i < node.children.length; i++) {
- Node child = node.children[i];
- printNodes(child, out, tabs + " ", selected);
- }
- } else {
- if (ctxID != null) {
- out.print(tabs + "<a href='viewjndi.jsp?ctxID=" + ctxID + "&selected=" + id + "'>" + closedImg + " " + node.getName() + "</a><br>");
- } else {
- out.print(tabs + "<a href='viewjndi.jsp?selected=" + id + "'>" + closedImg + " " + node.getName() + "</a><br>");
- }
- }
- }
-
- public void printBeanNode(Node node, javax.servlet.jsp.JspWriter out, String tabs) throws Exception {
- String id = node.getID();
- if (ctxID != null && ctxID.startsWith("enc")) {
- // HACK!
- try {
- Object ejb = lookup(ctx, id);
- Object deploymentID = getDeploymentId(ejb);
- out.print(tabs + "<a href='viewejb.jsp?ejb=" + deploymentID +"&jndiName="+id +"&ctxID="+ctxID+"'>" + ejbImg + " " + node.getName() + "</a><br>");
- } catch (Exception e) {
- out.print(tabs + ejbImg + " " + node.getName() + "<br>");
- }
- } else {
- try {
- Object ejb = lookup(ctx, id);
- Object deploymentID = getDeploymentId(ejb);
- out.print(tabs + "<a href='viewejb.jsp?ejb=" + deploymentID +"&jndiName="+id +"'>" + ejbImg + " " + node.getName() + "</a><br>");
- } catch (Exception e) {
- out.print(tabs + ejbImg + " " + node.getName() + "<br>");
- }
- }
- }
-
- public void printOtherNode(Node node, javax.servlet.jsp.JspWriter out, String tabs) throws Exception {
- String id = node.getID();
- Object obj = lookup(ctx, id);
- String clazz = obj.getClass().getName();
- out.print(tabs + "<a href='viewclass.jsp?class=" + clazz + "'>" + javaImg + " " + node.getName() + "</a><br>");
- }
-
- private Object getDeploymentId(Object ejb) throws Exception {
- org.apache.openejb.core.ivm.BaseEjbProxyHandler handler = (org.apache.openejb.core.ivm.BaseEjbProxyHandler)org.apache.openejb.util.proxy.ProxyManager.getInvocationHandler(ejb);
- return handler.deploymentID;
-
- }
-
- private Object lookup(Context ctx, String name) throws NamingException {
- try {
- Object obj = ctx.lookup(name);
- return obj;
- } catch (Exception e) {
- return "ERROR: " + e.getMessage();
- }
- }
-
-%>
-
diff --git a/tomee/tomee-webapp/src/test/conf/tomcat-users.xml b/tomee/tomee-webapp/src/test/conf/tomcat-users.xml
index 261477e..20a4f08 100644
--- a/tomee/tomee-webapp/src/test/conf/tomcat-users.xml
+++ b/tomee/tomee-webapp/src/test/conf/tomcat-users.xml
@@ -19,8 +19,11 @@
-->
<!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<tomcat-users>
- <user name="admin" password="admin" roles="manager,user" />
- <user name="jane" password="doe" roles="user" />
-</tomcat-users>
+
+<tomcat-users>
+ <role rolename="manager"/>
+ <role rolename="user"/>
+ <role rolename="tomee-admin"/>
+ <user name="admin" password="admin" roles="manager,user,tomee-admin" />
+ <user name="jane" password="doe" roles="user" />
+</tomcat-users>
diff --git a/tomee/tomee-webservices/pom.xml b/tomee/tomee-webservices/pom.xml
index a33f369..18f4989 100644
--- a/tomee/tomee-webservices/pom.xml
+++ b/tomee/tomee-webservices/pom.xml
@@ -23,7 +23,7 @@
<parent>
<artifactId>tomee</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>1.5.1-SNAPSHOT</version>
+ <version>1.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tomee-webservices</artifactId>
diff --git a/utils/openejb-core-hibernate/pom.xml b/utils/openejb-core-hibernate/pom.xml
index 2e985e2..0ab49f9 100644
--- a/utils/openejb-core-hibernate/pom.xml
+++ b/utils/openejb-core-hibernate/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>utils</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/utils/openejb-mockito/pom.xml b/utils/openejb-mockito/pom.xml
index 592e687..c8e88cb 100644
--- a/utils/openejb-mockito/pom.xml
+++ b/utils/openejb-mockito/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>utils</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/utils/openejb-provisionning/pom.xml b/utils/openejb-provisionning/pom.xml
index b93e4f2..d923eb9 100644
--- a/utils/openejb-provisionning/pom.xml
+++ b/utils/openejb-provisionning/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>utils</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
diff --git a/utils/pom.xml b/utils/pom.xml
index c9a2f1c..d421271 100644
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -20,7 +20,7 @@
<parent>
<artifactId>openejb</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>utils</artifactId>
diff --git a/utils/webdeployer/pom.xml b/utils/webdeployer/pom.xml
index c0a86fd..10f5ef8 100644
--- a/utils/webdeployer/pom.xml
+++ b/utils/webdeployer/pom.xml
@@ -22,7 +22,7 @@
<parent>
<artifactId>utils</artifactId>
<groupId>org.apache.openejb</groupId>
- <version>4.5.1-SNAPSHOT</version>
+ <version>4.5.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>