You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2015/11/23 23:07:19 UTC
[07/51] [partial] tomee git commit: removing ^M (windows eol)
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/DeterminedRouter.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/DeterminedRouter.java b/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/DeterminedRouter.java
index b22dc08..86c6b89 100755
--- a/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/DeterminedRouter.java
+++ b/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/DeterminedRouter.java
@@ -1,107 +1,107 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.dynamicdatasourcerouting;
-
-import org.apache.openejb.resource.jdbc.router.AbstractRouter;
-
-import javax.naming.NamingException;
-import javax.sql.DataSource;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class DeterminedRouter extends AbstractRouter {
-
- private String dataSourceNames;
- private String defaultDataSourceName;
- private Map<String, DataSource> dataSources = null;
- private ThreadLocal<DataSource> currentDataSource = new ThreadLocal<DataSource>();
-
- /**
- * @param datasourceList datasource resource name, separator is a space
- */
- public void setDataSourceNames(String datasourceList) {
- dataSourceNames = datasourceList;
- }
-
- /**
- * lookup datasource in openejb resources
- */
- private void init() {
- dataSources = new ConcurrentHashMap<String, DataSource>();
- for (String ds : dataSourceNames.split(" ")) {
- try {
- Object o = getOpenEJBResource(ds);
- if (o instanceof DataSource) {
- dataSources.put(ds, DataSource.class.cast(o));
- }
- } catch (NamingException e) {
- // ignored
- }
- }
- }
-
- /**
- * @return the user selected data source if it is set
- * or the default one
- * @throws IllegalArgumentException if the data source is not found
- */
- @Override
- public DataSource getDataSource() {
- // lazy init of routed datasources
- if (dataSources == null) {
- init();
- }
-
- // if no datasource is selected use the default one
- if (currentDataSource.get() == null) {
- if (dataSources.containsKey(defaultDataSourceName)) {
- return dataSources.get(defaultDataSourceName);
-
- } else {
- throw new IllegalArgumentException("you have to specify at least one datasource");
- }
- }
-
- // the developper set the datasource to use
- return currentDataSource.get();
- }
-
- /**
- * @param datasourceName data source name
- */
- public void setDataSource(String datasourceName) {
- if (dataSources == null) {
- init();
- }
- if (!dataSources.containsKey(datasourceName)) {
- throw new IllegalArgumentException("data source called " + datasourceName + " can't be found.");
- }
- DataSource ds = dataSources.get(datasourceName);
- currentDataSource.set(ds);
- }
-
- /**
- * reset the data source
- */
- public void clear() {
- currentDataSource.remove();
- }
-
- public void setDefaultDataSourceName(String name) {
- this.defaultDataSourceName = name;
- }
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.dynamicdatasourcerouting;
+
+import org.apache.openejb.resource.jdbc.router.AbstractRouter;
+
+import javax.naming.NamingException;
+import javax.sql.DataSource;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class DeterminedRouter extends AbstractRouter {
+
+ private String dataSourceNames;
+ private String defaultDataSourceName;
+ private Map<String, DataSource> dataSources = null;
+ private ThreadLocal<DataSource> currentDataSource = new ThreadLocal<DataSource>();
+
+ /**
+ * @param datasourceList datasource resource name, separator is a space
+ */
+ public void setDataSourceNames(String datasourceList) {
+ dataSourceNames = datasourceList;
+ }
+
+ /**
+ * lookup datasource in openejb resources
+ */
+ private void init() {
+ dataSources = new ConcurrentHashMap<String, DataSource>();
+ for (String ds : dataSourceNames.split(" ")) {
+ try {
+ Object o = getOpenEJBResource(ds);
+ if (o instanceof DataSource) {
+ dataSources.put(ds, DataSource.class.cast(o));
+ }
+ } catch (NamingException e) {
+ // ignored
+ }
+ }
+ }
+
+ /**
+ * @return the user selected data source if it is set
+ * or the default one
+ * @throws IllegalArgumentException if the data source is not found
+ */
+ @Override
+ public DataSource getDataSource() {
+ // lazy init of routed datasources
+ if (dataSources == null) {
+ init();
+ }
+
+ // if no datasource is selected use the default one
+ if (currentDataSource.get() == null) {
+ if (dataSources.containsKey(defaultDataSourceName)) {
+ return dataSources.get(defaultDataSourceName);
+
+ } else {
+ throw new IllegalArgumentException("you have to specify at least one datasource");
+ }
+ }
+
+ // the developper set the datasource to use
+ return currentDataSource.get();
+ }
+
+ /**
+ * @param datasourceName data source name
+ */
+ public void setDataSource(String datasourceName) {
+ if (dataSources == null) {
+ init();
+ }
+ if (!dataSources.containsKey(datasourceName)) {
+ throw new IllegalArgumentException("data source called " + datasourceName + " can't be found.");
+ }
+ DataSource ds = dataSources.get(datasourceName);
+ currentDataSource.set(ds);
+ }
+
+ /**
+ * reset the data source
+ */
+ public void clear() {
+ currentDataSource.remove();
+ }
+
+ public void setDefaultDataSourceName(String name) {
+ this.defaultDataSourceName = name;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/Person.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/Person.java b/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/Person.java
index 00e3b89..636ed2a 100755
--- a/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/Person.java
+++ b/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/Person.java
@@ -1,53 +1,53 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.dynamicdatasourcerouting;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-@Entity
-public class Person {
-
- @Id
- private long id;
- private String name;
-
- public Person() {
- // no-op
- }
-
- public Person(int i, String n) {
- id = i;
- name = n;
- }
-
- 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;
- }
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.dynamicdatasourcerouting;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class Person {
+
+ @Id
+ private long id;
+ private String name;
+
+ public Person() {
+ // no-op
+ }
+
+ public Person(int i, String n) {
+ id = i;
+ name = n;
+ }
+
+ 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;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/RoutedPersister.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/RoutedPersister.java b/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/RoutedPersister.java
index d2398a6..13b862b 100755
--- a/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/RoutedPersister.java
+++ b/examples/dynamic-datasource-routing/src/main/java/org/superbiz/dynamicdatasourcerouting/RoutedPersister.java
@@ -1,37 +1,37 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.dynamicdatasourcerouting;
-
-import javax.annotation.Resource;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
-@Stateless
-public class RoutedPersister {
-
- @PersistenceContext(unitName = "router")
- private EntityManager em;
-
- @Resource(name = "My Router", type = DeterminedRouter.class)
- private DeterminedRouter router;
-
- public void persist(int id, String name, String ds) {
- router.setDataSource(ds);
- em.persist(new Person(id, name));
- }
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.dynamicdatasourcerouting;
+
+import javax.annotation.Resource;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+@Stateless
+public class RoutedPersister {
+
+ @PersistenceContext(unitName = "router")
+ private EntityManager em;
+
+ @Resource(name = "My Router", type = DeterminedRouter.class)
+ private DeterminedRouter router;
+
+ public void persist(int id, String name, String ds) {
+ router.setDataSource(ds);
+ em.persist(new Person(id, name));
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-implementation/src/main/java/org/superbiz/dynamic/SocialInterceptor.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-implementation/src/main/java/org/superbiz/dynamic/SocialInterceptor.java b/examples/dynamic-implementation/src/main/java/org/superbiz/dynamic/SocialInterceptor.java
index d43c4e0..3e0a748 100644
--- a/examples/dynamic-implementation/src/main/java/org/superbiz/dynamic/SocialInterceptor.java
+++ b/examples/dynamic-implementation/src/main/java/org/superbiz/dynamic/SocialInterceptor.java
@@ -1,40 +1,40 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.interceptor.AroundInvoke;
-import javax.interceptor.InvocationContext;
-
-public class SocialInterceptor {
-
- @AroundInvoke
- public Object around(InvocationContext context) throws Exception {
- String mtd = context.getMethod().getName();
- String address;
- if (mtd.toLowerCase().contains("facebook")) {
- address = "http://www.facebook.com";
- } else if (mtd.toLowerCase().contains("twitter")) {
- address = "http://twitter.com";
- } else {
- address = "no website for you";
- }
-
- System.out.println("go on " + address);
- return context.proceed();
- }
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.interceptor.AroundInvoke;
+import javax.interceptor.InvocationContext;
+
+public class SocialInterceptor {
+
+ @AroundInvoke
+ public Object around(InvocationContext context) throws Exception {
+ String mtd = context.getMethod().getName();
+ String address;
+ if (mtd.toLowerCase().contains("facebook")) {
+ address = "http://www.facebook.com";
+ } else if (mtd.toLowerCase().contains("twitter")) {
+ address = "http://twitter.com";
+ } else {
+ address = "no website for you";
+ }
+
+ System.out.println("go on " + address);
+ return context.proceed();
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/DynamicMBeanHandler.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/DynamicMBeanHandler.java b/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/DynamicMBeanHandler.java
index d07a705..63046da 100644
--- a/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/DynamicMBeanHandler.java
+++ b/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/DynamicMBeanHandler.java
@@ -1,260 +1,260 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.mbean;
-
-import javax.annotation.PreDestroy;
-import javax.management.Attribute;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanInfo;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXServiceURL;
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Need a @PreDestroy method to disconnect the remote host when used in remote mode.
- */
-public class DynamicMBeanHandler implements InvocationHandler {
-
- private final Map<Method, ConnectionInfo> infos = new ConcurrentHashMap<Method, ConnectionInfo>();
-
- @Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- final String methodName = method.getName();
- if (method.getDeclaringClass().equals(Object.class) && "toString".equals(methodName)) {
- return getClass().getSimpleName() + " Proxy";
- }
- if (method.getAnnotation(PreDestroy.class) != null) {
- return destroy();
- }
-
- final ConnectionInfo info = getConnectionInfo(method);
- final MBeanInfo infos = info.getMBeanInfo();
- if (methodName.startsWith("set") && methodName.length() > 3 && args != null && args.length == 1
- && (Void.TYPE.equals(method.getReturnType()) || Void.class.equals(method.getReturnType()))) {
- final String attributeName = attributeName(infos, methodName, method.getParameterTypes()[0]);
- info.setAttribute(new Attribute(attributeName, args[0]));
- return null;
- } else if (methodName.startsWith("get") && (args == null || args.length == 0) && methodName.length() > 3) {
- final String attributeName = attributeName(infos, methodName, method.getReturnType());
- return info.getAttribute(attributeName);
- }
- // operation
- return info.invoke(methodName, args, getSignature(method));
- }
-
- public Object destroy() {
- for (ConnectionInfo info : infos.values()) {
- info.clean();
- }
- infos.clear();
- return null;
- }
-
- private String[] getSignature(Method method) {
- String[] args = new String[method.getParameterTypes().length];
- for (int i = 0; i < method.getParameterTypes().length; i++) {
- args[i] = method.getParameterTypes()[i].getName();
- }
- return args; // note: null should often work...
- }
-
- private String attributeName(MBeanInfo infos, String methodName, Class<?> type) {
- String found = null;
- String foundBackUp = null; // without checking the type
- final String attributeName = methodName.substring(3, methodName.length());
- final String lowerName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4, methodName.length());
-
- for (MBeanAttributeInfo attribute : infos.getAttributes()) {
- final String name = attribute.getName();
- if (attributeName.equals(name)) {
- foundBackUp = attributeName;
- if (attribute.getType().equals(type.getName())) {
- found = name;
- }
- } else if (found == null && ((lowerName.equals(name) && !attributeName.equals(name))
- || lowerName.equalsIgnoreCase(name))) {
- foundBackUp = name;
- if (attribute.getType().equals(type.getName())) {
- found = name;
- }
- }
- }
-
- if (found == null && foundBackUp == null) {
- throw new UnsupportedOperationException("cannot find attribute " + attributeName);
- }
-
- if (found != null) {
- return found;
- }
- return foundBackUp;
- }
-
- private synchronized ConnectionInfo getConnectionInfo(Method method) throws Exception {
- if (!infos.containsKey(method)) {
- synchronized (infos) {
- if (!infos.containsKey(method)) { // double check for synchro
- org.superbiz.dynamic.mbean.ObjectName on = method.getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);
- if (on == null) {
- Class<?> current = method.getDeclaringClass();
- do {
- on = method.getDeclaringClass().getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);
- current = current.getSuperclass();
- } while (on == null && current != null);
- if (on == null) {
- throw new UnsupportedOperationException("class or method should define the objectName to use for invocation: " + method.toGenericString());
- }
- }
- final ConnectionInfo info;
- if (on.url().isEmpty()) {
- info = new LocalConnectionInfo();
- ((LocalConnectionInfo) info).server = ManagementFactory.getPlatformMBeanServer(); // could use an id...
- } else {
- info = new RemoteConnectionInfo();
- final Map<String, String[]> environment = new HashMap<String, String[]>();
- if (!on.user().isEmpty()) {
- environment.put(JMXConnector.CREDENTIALS, new String[]{on.user(), on.password()});
- }
- // ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.newJMXConnector(new JMXServiceURL(on.url()), environment);
- ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.connect(new JMXServiceURL(on.url()), environment);
-
- }
- info.objectName = new ObjectName(on.value());
-
- infos.put(method, info);
- }
- }
- }
- return infos.get(method);
- }
-
- private abstract static class ConnectionInfo {
-
- protected ObjectName objectName;
-
- public abstract void setAttribute(Attribute attribute) throws Exception;
-
- public abstract Object getAttribute(String attribute) throws Exception;
-
- public abstract Object invoke(String operationName, Object params[], String signature[]) throws Exception;
-
- public abstract MBeanInfo getMBeanInfo() throws Exception;
-
- public abstract void clean();
- }
-
- private static class LocalConnectionInfo extends ConnectionInfo {
-
- private MBeanServer server;
-
- @Override
- public void setAttribute(Attribute attribute) throws Exception {
- server.setAttribute(objectName, attribute);
- }
-
- @Override
- public Object getAttribute(String attribute) throws Exception {
- return server.getAttribute(objectName, attribute);
- }
-
- @Override
- public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {
- return server.invoke(objectName, operationName, params, signature);
- }
-
- @Override
- public MBeanInfo getMBeanInfo() throws Exception {
- return server.getMBeanInfo(objectName);
- }
-
- @Override
- public void clean() {
- // no-op
- }
- }
-
- private static class RemoteConnectionInfo extends ConnectionInfo {
-
- private JMXConnector connector;
- private MBeanServerConnection connection;
-
- private void before() throws IOException {
- connection = connector.getMBeanServerConnection();
- }
-
- private void after() throws IOException {
- // no-op
- }
-
- @Override
- public void setAttribute(Attribute attribute) throws Exception {
- before();
- connection.setAttribute(objectName, attribute);
- after();
- }
-
- @Override
- public Object getAttribute(String attribute) throws Exception {
- before();
- try {
- return connection.getAttribute(objectName, attribute);
- } finally {
- after();
- }
- }
-
- @Override
- public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {
- before();
- try {
- return connection.invoke(objectName, operationName, params, signature);
- } finally {
- after();
- }
- }
-
- @Override
- public MBeanInfo getMBeanInfo() throws Exception {
- before();
- try {
- return connection.getMBeanInfo(objectName);
- } finally {
- after();
- }
- }
-
- @Override
- public void clean() {
- try {
- connector.close();
- } catch (IOException e) {
- // no-op
- }
- }
- }
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.mbean;
+
+import javax.annotation.PreDestroy;
+import javax.management.Attribute;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServer;
+import javax.management.MBeanServerConnection;
+import javax.management.ObjectName;
+import javax.management.remote.JMXConnector;
+import javax.management.remote.JMXConnectorFactory;
+import javax.management.remote.JMXServiceURL;
+import java.io.IOException;
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Need a @PreDestroy method to disconnect the remote host when used in remote mode.
+ */
+public class DynamicMBeanHandler implements InvocationHandler {
+
+ private final Map<Method, ConnectionInfo> infos = new ConcurrentHashMap<Method, ConnectionInfo>();
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ final String methodName = method.getName();
+ if (method.getDeclaringClass().equals(Object.class) && "toString".equals(methodName)) {
+ return getClass().getSimpleName() + " Proxy";
+ }
+ if (method.getAnnotation(PreDestroy.class) != null) {
+ return destroy();
+ }
+
+ final ConnectionInfo info = getConnectionInfo(method);
+ final MBeanInfo infos = info.getMBeanInfo();
+ if (methodName.startsWith("set") && methodName.length() > 3 && args != null && args.length == 1
+ && (Void.TYPE.equals(method.getReturnType()) || Void.class.equals(method.getReturnType()))) {
+ final String attributeName = attributeName(infos, methodName, method.getParameterTypes()[0]);
+ info.setAttribute(new Attribute(attributeName, args[0]));
+ return null;
+ } else if (methodName.startsWith("get") && (args == null || args.length == 0) && methodName.length() > 3) {
+ final String attributeName = attributeName(infos, methodName, method.getReturnType());
+ return info.getAttribute(attributeName);
+ }
+ // operation
+ return info.invoke(methodName, args, getSignature(method));
+ }
+
+ public Object destroy() {
+ for (ConnectionInfo info : infos.values()) {
+ info.clean();
+ }
+ infos.clear();
+ return null;
+ }
+
+ private String[] getSignature(Method method) {
+ String[] args = new String[method.getParameterTypes().length];
+ for (int i = 0; i < method.getParameterTypes().length; i++) {
+ args[i] = method.getParameterTypes()[i].getName();
+ }
+ return args; // note: null should often work...
+ }
+
+ private String attributeName(MBeanInfo infos, String methodName, Class<?> type) {
+ String found = null;
+ String foundBackUp = null; // without checking the type
+ final String attributeName = methodName.substring(3, methodName.length());
+ final String lowerName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4, methodName.length());
+
+ for (MBeanAttributeInfo attribute : infos.getAttributes()) {
+ final String name = attribute.getName();
+ if (attributeName.equals(name)) {
+ foundBackUp = attributeName;
+ if (attribute.getType().equals(type.getName())) {
+ found = name;
+ }
+ } else if (found == null && ((lowerName.equals(name) && !attributeName.equals(name))
+ || lowerName.equalsIgnoreCase(name))) {
+ foundBackUp = name;
+ if (attribute.getType().equals(type.getName())) {
+ found = name;
+ }
+ }
+ }
+
+ if (found == null && foundBackUp == null) {
+ throw new UnsupportedOperationException("cannot find attribute " + attributeName);
+ }
+
+ if (found != null) {
+ return found;
+ }
+ return foundBackUp;
+ }
+
+ private synchronized ConnectionInfo getConnectionInfo(Method method) throws Exception {
+ if (!infos.containsKey(method)) {
+ synchronized (infos) {
+ if (!infos.containsKey(method)) { // double check for synchro
+ org.superbiz.dynamic.mbean.ObjectName on = method.getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);
+ if (on == null) {
+ Class<?> current = method.getDeclaringClass();
+ do {
+ on = method.getDeclaringClass().getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);
+ current = current.getSuperclass();
+ } while (on == null && current != null);
+ if (on == null) {
+ throw new UnsupportedOperationException("class or method should define the objectName to use for invocation: " + method.toGenericString());
+ }
+ }
+ final ConnectionInfo info;
+ if (on.url().isEmpty()) {
+ info = new LocalConnectionInfo();
+ ((LocalConnectionInfo) info).server = ManagementFactory.getPlatformMBeanServer(); // could use an id...
+ } else {
+ info = new RemoteConnectionInfo();
+ final Map<String, String[]> environment = new HashMap<String, String[]>();
+ if (!on.user().isEmpty()) {
+ environment.put(JMXConnector.CREDENTIALS, new String[]{on.user(), on.password()});
+ }
+ // ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.newJMXConnector(new JMXServiceURL(on.url()), environment);
+ ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.connect(new JMXServiceURL(on.url()), environment);
+
+ }
+ info.objectName = new ObjectName(on.value());
+
+ infos.put(method, info);
+ }
+ }
+ }
+ return infos.get(method);
+ }
+
+ private abstract static class ConnectionInfo {
+
+ protected ObjectName objectName;
+
+ public abstract void setAttribute(Attribute attribute) throws Exception;
+
+ public abstract Object getAttribute(String attribute) throws Exception;
+
+ public abstract Object invoke(String operationName, Object params[], String signature[]) throws Exception;
+
+ public abstract MBeanInfo getMBeanInfo() throws Exception;
+
+ public abstract void clean();
+ }
+
+ private static class LocalConnectionInfo extends ConnectionInfo {
+
+ private MBeanServer server;
+
+ @Override
+ public void setAttribute(Attribute attribute) throws Exception {
+ server.setAttribute(objectName, attribute);
+ }
+
+ @Override
+ public Object getAttribute(String attribute) throws Exception {
+ return server.getAttribute(objectName, attribute);
+ }
+
+ @Override
+ public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {
+ return server.invoke(objectName, operationName, params, signature);
+ }
+
+ @Override
+ public MBeanInfo getMBeanInfo() throws Exception {
+ return server.getMBeanInfo(objectName);
+ }
+
+ @Override
+ public void clean() {
+ // no-op
+ }
+ }
+
+ private static class RemoteConnectionInfo extends ConnectionInfo {
+
+ private JMXConnector connector;
+ private MBeanServerConnection connection;
+
+ private void before() throws IOException {
+ connection = connector.getMBeanServerConnection();
+ }
+
+ private void after() throws IOException {
+ // no-op
+ }
+
+ @Override
+ public void setAttribute(Attribute attribute) throws Exception {
+ before();
+ connection.setAttribute(objectName, attribute);
+ after();
+ }
+
+ @Override
+ public Object getAttribute(String attribute) throws Exception {
+ before();
+ try {
+ return connection.getAttribute(objectName, attribute);
+ } finally {
+ after();
+ }
+ }
+
+ @Override
+ public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {
+ before();
+ try {
+ return connection.invoke(objectName, operationName, params, signature);
+ } finally {
+ after();
+ }
+ }
+
+ @Override
+ public MBeanInfo getMBeanInfo() throws Exception {
+ before();
+ try {
+ return connection.getMBeanInfo(objectName);
+ } finally {
+ after();
+ }
+ }
+
+ @Override
+ public void clean() {
+ try {
+ connector.close();
+ } catch (IOException e) {
+ // no-op
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/ObjectName.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/ObjectName.java b/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/ObjectName.java
index 69c4ab1..305db5b 100644
--- a/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/ObjectName.java
+++ b/examples/dynamic-proxy-to-access-mbean/src/main/java/org/superbiz/dynamic/mbean/ObjectName.java
@@ -1,39 +1,39 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.mbean;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-@Target({TYPE, METHOD})
-@Retention(RUNTIME)
-public @interface ObjectName {
-
- String value();
-
- // for remote usage only
- String url() default "";
-
- String user() default "";
-
- String password() default "";
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.mbean;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({TYPE, METHOD})
+@Retention(RUNTIME)
+public @interface ObjectName {
+
+ String value();
+
+ // for remote usage only
+ String url() default "";
+
+ String user() default "";
+
+ String password() default "";
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClient.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClient.java b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClient.java
index 57a16cf..ee772f4 100644
--- a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClient.java
+++ b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClient.java
@@ -1,36 +1,36 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.mbean;
-
-import org.apache.openejb.api.Proxy;
-
-import javax.ejb.Singleton;
-
-@Singleton
-@Proxy(DynamicMBeanHandler.class)
-@ObjectName(DynamicMBeanClient.OBJECT_NAME)
-public interface DynamicMBeanClient {
-
- static final String OBJECT_NAME = "test:group=DynamicMBeanClientTest";
-
- int getCounter();
-
- void setCounter(int i);
-
- int length(String aString);
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.mbean;
+
+import org.apache.openejb.api.Proxy;
+
+import javax.ejb.Singleton;
+
+@Singleton
+@Proxy(DynamicMBeanHandler.class)
+@ObjectName(DynamicMBeanClient.OBJECT_NAME)
+public interface DynamicMBeanClient {
+
+ static final String OBJECT_NAME = "test:group=DynamicMBeanClientTest";
+
+ int getCounter();
+
+ void setCounter(int i);
+
+ int length(String aString);
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClientTest.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClientTest.java b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClientTest.java
index 81da560..50f4668 100644
--- a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClientTest.java
+++ b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicMBeanClientTest.java
@@ -1,108 +1,108 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.mbean;
-
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.superbiz.dynamic.mbean.simple.Simple;
-
-import javax.ejb.EJB;
-import javax.ejb.embeddable.EJBContainer;
-import javax.management.Attribute;
-import javax.management.ObjectName;
-import java.lang.management.ManagementFactory;
-
-import static org.junit.Assert.assertEquals;
-
-public class DynamicMBeanClientTest {
-
- private static ObjectName objectName;
- private static EJBContainer container;
-
- @EJB
- private DynamicMBeanClient localClient;
- @EJB
- private DynamicRemoteMBeanClient remoteClient;
-
- @BeforeClass
- public static void start() {
- container = EJBContainer.createEJBContainer();
- }
-
- @Before
- public void injectAndRegisterMBean() throws Exception {
- container.getContext().bind("inject", this);
- objectName = new ObjectName(DynamicMBeanClient.OBJECT_NAME);
- ManagementFactory.getPlatformMBeanServer().registerMBean(new Simple(), objectName);
- }
-
- @After
- public void unregisterMBean() throws Exception {
- if (objectName != null) {
- ManagementFactory.getPlatformMBeanServer().unregisterMBean(objectName);
- }
- }
-
- @Test
- public void localGet() throws Exception {
- assertEquals(0, localClient.getCounter());
- ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute("Counter", 5));
- assertEquals(5, localClient.getCounter());
- }
-
- @Test
- public void localSet() throws Exception {
- assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
- localClient.setCounter(8);
- assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
- }
-
- @Test
- public void localOperation() {
- assertEquals(7, localClient.length("openejb"));
- }
-
- @Test
- public void remoteGet() throws Exception {
- assertEquals(0, remoteClient.getCounter());
- ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute("Counter", 5));
- assertEquals(5, remoteClient.getCounter());
- }
-
- @Test
- public void remoteSet() throws Exception {
- assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
- remoteClient.setCounter(8);
- assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
- }
-
- @Test
- public void remoteOperation() {
- assertEquals(7, remoteClient.length("openejb"));
- }
-
- @AfterClass
- public static void close() {
- if (container != null) {
- container.close();
- }
- }
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.mbean;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.superbiz.dynamic.mbean.simple.Simple;
+
+import javax.ejb.EJB;
+import javax.ejb.embeddable.EJBContainer;
+import javax.management.Attribute;
+import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
+
+import static org.junit.Assert.assertEquals;
+
+public class DynamicMBeanClientTest {
+
+ private static ObjectName objectName;
+ private static EJBContainer container;
+
+ @EJB
+ private DynamicMBeanClient localClient;
+ @EJB
+ private DynamicRemoteMBeanClient remoteClient;
+
+ @BeforeClass
+ public static void start() {
+ container = EJBContainer.createEJBContainer();
+ }
+
+ @Before
+ public void injectAndRegisterMBean() throws Exception {
+ container.getContext().bind("inject", this);
+ objectName = new ObjectName(DynamicMBeanClient.OBJECT_NAME);
+ ManagementFactory.getPlatformMBeanServer().registerMBean(new Simple(), objectName);
+ }
+
+ @After
+ public void unregisterMBean() throws Exception {
+ if (objectName != null) {
+ ManagementFactory.getPlatformMBeanServer().unregisterMBean(objectName);
+ }
+ }
+
+ @Test
+ public void localGet() throws Exception {
+ assertEquals(0, localClient.getCounter());
+ ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute("Counter", 5));
+ assertEquals(5, localClient.getCounter());
+ }
+
+ @Test
+ public void localSet() throws Exception {
+ assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
+ localClient.setCounter(8);
+ assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
+ }
+
+ @Test
+ public void localOperation() {
+ assertEquals(7, localClient.length("openejb"));
+ }
+
+ @Test
+ public void remoteGet() throws Exception {
+ assertEquals(0, remoteClient.getCounter());
+ ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute("Counter", 5));
+ assertEquals(5, remoteClient.getCounter());
+ }
+
+ @Test
+ public void remoteSet() throws Exception {
+ assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
+ remoteClient.setCounter(8);
+ assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, "Counter")).intValue());
+ }
+
+ @Test
+ public void remoteOperation() {
+ assertEquals(7, remoteClient.length("openejb"));
+ }
+
+ @AfterClass
+ public static void close() {
+ if (container != null) {
+ container.close();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicRemoteMBeanClient.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicRemoteMBeanClient.java b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicRemoteMBeanClient.java
index d626517..f93befe 100644
--- a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicRemoteMBeanClient.java
+++ b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/DynamicRemoteMBeanClient.java
@@ -1,40 +1,40 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.mbean;
-
-import org.apache.openejb.api.Proxy;
-
-import javax.annotation.PreDestroy;
-import javax.ejb.Singleton;
-
-@Singleton
-@Proxy(DynamicMBeanHandler.class)
-@ObjectName(value = DynamicRemoteMBeanClient.OBJECT_NAME, url = "service:jmx:rmi:///jndi/rmi://localhost:8243/jmxrmi")
-public interface DynamicRemoteMBeanClient {
-
- static final String OBJECT_NAME = "test:group=DynamicMBeanClientTest";
-
- int getCounter();
-
- void setCounter(int i);
-
- int length(String aString);
-
- @PreDestroy
- void clean();
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.mbean;
+
+import org.apache.openejb.api.Proxy;
+
+import javax.annotation.PreDestroy;
+import javax.ejb.Singleton;
+
+@Singleton
+@Proxy(DynamicMBeanHandler.class)
+@ObjectName(value = DynamicRemoteMBeanClient.OBJECT_NAME, url = "service:jmx:rmi:///jndi/rmi://localhost:8243/jmxrmi")
+public interface DynamicRemoteMBeanClient {
+
+ static final String OBJECT_NAME = "test:group=DynamicMBeanClientTest";
+
+ int getCounter();
+
+ void setCounter(int i);
+
+ int length(String aString);
+
+ @PreDestroy
+ void clean();
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/Simple.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/Simple.java b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/Simple.java
index aaceacf..ff51482 100644
--- a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/Simple.java
+++ b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/Simple.java
@@ -1,41 +1,41 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.mbean.simple;
-
-public class Simple implements SimpleMBean {
-
- private int counter = 0;
-
- @Override
- public int length(String s) {
- if (s == null) {
- return 0;
- }
- return s.length();
- }
-
- @Override
- public int getCounter() {
- return counter;
- }
-
- @Override
- public void setCounter(int c) {
- counter = c;
- }
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.mbean.simple;
+
+public class Simple implements SimpleMBean {
+
+ private int counter = 0;
+
+ @Override
+ public int length(String s) {
+ if (s == null) {
+ return 0;
+ }
+ return s.length();
+ }
+
+ @Override
+ public int getCounter() {
+ return counter;
+ }
+
+ @Override
+ public void setCounter(int c) {
+ counter = c;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/SimpleMBean.java
----------------------------------------------------------------------
diff --git a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/SimpleMBean.java b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/SimpleMBean.java
index 0b4b8de..95f698e 100644
--- a/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/SimpleMBean.java
+++ b/examples/dynamic-proxy-to-access-mbean/src/test/java/org/superbiz/dynamic/mbean/simple/SimpleMBean.java
@@ -1,27 +1,27 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.mbean.simple;
-
-public interface SimpleMBean {
-
- int length(String s);
-
- int getCounter();
-
- void setCounter(int c);
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.mbean.simple;
+
+public interface SimpleMBean {
+
+ int length(String s);
+
+ int getCounter();
+
+ void setCounter(int c);
+}
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/ear-testing/README.md
----------------------------------------------------------------------
diff --git a/examples/ear-testing/README.md b/examples/ear-testing/README.md
index ab6c2ab..0ca8f8f 100644
--- a/examples/ear-testing/README.md
+++ b/examples/ear-testing/README.md
@@ -1,212 +1,212 @@
-Title: EAR Testing
-
-The goal of this example is to demonstrate how maven projects might be organized in a more real world style and how testing with OpenEJB can fit into that structure.
-
-This example takes the basic moviefun code we us in many of examples and splits it into two modules:
-
- - `business-logic`
- - `business-model`
-
-As the names imply, we keep our `@Entity` beans in the `business-model` module and our session beans in the `business-logic` model. The tests located and run from the business logic module.
-
- ear-testing
- ear-testing/business-logic
- ear-testing/business-logic/pom.xml
- ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java
- ear-testing/business-logic/src/main/java/org/superbiz/logic/MoviesImpl.java
- ear-testing/business-logic/src/main/resources
- ear-testing/business-logic/src/main/resources/META-INF
- ear-testing/business-logic/src/main/resources/META-INF/ejb-jar.xml
- ear-testing/business-logic/src/test/java/org/superbiz/logic/MoviesTest.java
- ear-testing/business-model
- ear-testing/business-model/pom.xml
- ear-testing/business-model/src/main/java/org/superbiz/model/Movie.java
- ear-testing/business-model/src/main/resources/META-INF/persistence.xml
- ear-testing/pom.xml
-
-# Project configuration
-
-The parent pom, trimmed to the minimum, looks like so:
-
- <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>myear</artifactId>
- <version>1.1.0-SNAPSHOT</version>
-
- <packaging>pom</packaging>
-
- <modules>
- <module>business-model</module>
- <module>business-logic</module>
- </modules>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0-2</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.8.1</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
- </project>
-
-The `business-model/pom.xml` as follows:
-
- <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">
- <parent>
- <groupId>org.superbiz</groupId>
- <artifactId>myear</artifactId>
- <version>1.1.0-SNAPSHOT</version>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>business-model</artifactId>
- <packaging>jar</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- </dependencies>
-
- </project>
-
-And finally, the `business-logic/pom.xml` which is setup to support embedded testing with OpenEJB:
-
- <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">
- <parent>
- <groupId>org.superbiz</groupId>
- <artifactId>myear</artifactId>
- <version>1.1.0-SNAPSHOT</version>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>business-logic</artifactId>
- <packaging>jar</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.superbiz</groupId>
- <artifactId>business-model</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>javaee-api</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <!--
- The <scope>test</scope> guarantees that non of your runtime
- code is dependent on any OpenEJB classes.
- -->
- <dependency>
- <groupId>org.apache.openejb</groupId>
- <artifactId>openejb-core</artifactId>
- <version>7.0.0-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- </project>
-
-# TestCode
-
-The test code is the same as always:
-
- public class MoviesTest extends TestCase {
-
- public void test() throws Exception {
- Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
-
- p.put("openejb.deployments.classpath.ear", "true");
-
- p.put("movieDatabase", "new://Resource?type=DataSource");
- p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
- p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
-
- p.put("movieDatabaseUnmanaged", "new://Resource?type=DataSource");
- p.put("movieDatabaseUnmanaged.JdbcDriver", "org.hsqldb.jdbcDriver");
- p.put("movieDatabaseUnmanaged.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
- p.put("movieDatabaseUnmanaged.JtaManaged", "false");
-
- Context context = new InitialContext(p);
-
- Movies movies = (Movies) context.lookup("MoviesLocal");
-
- movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
- movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
- movies.addMovie(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());
- }
- }
-
-
-# Running
-
-
- -------------------------------------------------------
- T E S T S
- -------------------------------------------------------
- Running org.superbiz.logic.MoviesTest
- Apache OpenEJB 7.0.0-SNAPSHOT build: 20111002-04:06
- http://tomee.apache.org/
- INFO - openejb.home = /Users/dblevins/examples/ear-testing/business-logic
- INFO - openejb.base = /Users/dblevins/examples/ear-testing/business-logic
- INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
- INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
- INFO - Configuring Service(id=movieDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database)
- INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)
- INFO - Found PersistenceModule in classpath: /Users/dblevins/examples/ear-testing/business-model/target/business-model-1.0.jar
- INFO - Found EjbModule in classpath: /Users/dblevins/examples/ear-testing/business-logic/target/classes
- INFO - Using 'openejb.deployments.classpath.ear=true'
- INFO - Beginning load: /Users/dblevins/examples/ear-testing/business-model/target/business-model-1.0.jar
- INFO - Beginning load: /Users/dblevins/examples/ear-testing/business-logic/target/classes
- INFO - Configuring enterprise application: /Users/dblevins/examples/ear-testing/business-logic/classpath.ear
- INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
- INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)
- INFO - Configuring PersistenceUnit(name=movie-unit)
- INFO - Enterprise application "/Users/dblevins/examples/ear-testing/business-logic/classpath.ear" loaded.
- INFO - Assembling app: /Users/dblevins/examples/ear-testing/business-logic/classpath.ear
- INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 415ms
- INFO - Jndi(name=MoviesLocal) --> Ejb(deployment-id=Movies)
- INFO - Jndi(name=global/classpath.ear/business-logic/Movies!org.superbiz.logic.Movies) --> Ejb(deployment-id=Movies)
- INFO - Jndi(name=global/classpath.ear/business-logic/Movies) --> Ejb(deployment-id=Movies)
- INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
- INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
- INFO - Deployed Application(path=/Users/dblevins/examples/ear-testing/business-logic/classpath.ear)
- Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.393 sec
-
- Results :
-
- Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+Title: EAR Testing
+
+The goal of this example is to demonstrate how maven projects might be organized in a more real world style and how testing with OpenEJB can fit into that structure.
+
+This example takes the basic moviefun code we us in many of examples and splits it into two modules:
+
+ - `business-logic`
+ - `business-model`
+
+As the names imply, we keep our `@Entity` beans in the `business-model` module and our session beans in the `business-logic` model. The tests located and run from the business logic module.
+
+ ear-testing
+ ear-testing/business-logic
+ ear-testing/business-logic/pom.xml
+ ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java
+ ear-testing/business-logic/src/main/java/org/superbiz/logic/MoviesImpl.java
+ ear-testing/business-logic/src/main/resources
+ ear-testing/business-logic/src/main/resources/META-INF
+ ear-testing/business-logic/src/main/resources/META-INF/ejb-jar.xml
+ ear-testing/business-logic/src/test/java/org/superbiz/logic/MoviesTest.java
+ ear-testing/business-model
+ ear-testing/business-model/pom.xml
+ ear-testing/business-model/src/main/java/org/superbiz/model/Movie.java
+ ear-testing/business-model/src/main/resources/META-INF/persistence.xml
+ ear-testing/pom.xml
+
+# Project configuration
+
+The parent pom, trimmed to the minimum, looks like so:
+
+ <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>myear</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>business-model</module>
+ <module>business-logic</module>
+ </modules>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>javaee-api</artifactId>
+ <version>6.0-2</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ </project>
+
+The `business-model/pom.xml` as follows:
+
+ <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">
+ <parent>
+ <groupId>org.superbiz</groupId>
+ <artifactId>myear</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>business-model</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>javaee-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ </project>
+
+And finally, the `business-logic/pom.xml` which is setup to support embedded testing with OpenEJB:
+
+ <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">
+ <parent>
+ <groupId>org.superbiz</groupId>
+ <artifactId>myear</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>business-logic</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.superbiz</groupId>
+ <artifactId>business-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>javaee-api</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <!--
+ The <scope>test</scope> guarantees that non of your runtime
+ code is dependent on any OpenEJB classes.
+ -->
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-core</artifactId>
+ <version>7.0.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </project>
+
+# TestCode
+
+The test code is the same as always:
+
+ public class MoviesTest extends TestCase {
+
+ public void test() throws Exception {
+ Properties p = new Properties();
+ p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
+
+ p.put("openejb.deployments.classpath.ear", "true");
+
+ p.put("movieDatabase", "new://Resource?type=DataSource");
+ p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
+ p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
+
+ p.put("movieDatabaseUnmanaged", "new://Resource?type=DataSource");
+ p.put("movieDatabaseUnmanaged.JdbcDriver", "org.hsqldb.jdbcDriver");
+ p.put("movieDatabaseUnmanaged.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
+ p.put("movieDatabaseUnmanaged.JtaManaged", "false");
+
+ Context context = new InitialContext(p);
+
+ Movies movies = (Movies) context.lookup("MoviesLocal");
+
+ movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
+ movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
+ movies.addMovie(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());
+ }
+ }
+
+
+# Running
+
+
+ -------------------------------------------------------
+ T E S T S
+ -------------------------------------------------------
+ Running org.superbiz.logic.MoviesTest
+ Apache OpenEJB 7.0.0-SNAPSHOT build: 20111002-04:06
+ http://tomee.apache.org/
+ INFO - openejb.home = /Users/dblevins/examples/ear-testing/business-logic
+ INFO - openejb.base = /Users/dblevins/examples/ear-testing/business-logic
+ INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
+ INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+ INFO - Configuring Service(id=movieDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database)
+ INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)
+ INFO - Found PersistenceModule in classpath: /Users/dblevins/examples/ear-testing/business-model/target/business-model-1.0.jar
+ INFO - Found EjbModule in classpath: /Users/dblevins/examples/ear-testing/business-logic/target/classes
+ INFO - Using 'openejb.deployments.classpath.ear=true'
+ INFO - Beginning load: /Users/dblevins/examples/ear-testing/business-model/target/business-model-1.0.jar
+ INFO - Beginning load: /Users/dblevins/examples/ear-testing/business-logic/target/classes
+ INFO - Configuring enterprise application: /Users/dblevins/examples/ear-testing/business-logic/classpath.ear
+ INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
+ INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)
+ INFO - Configuring PersistenceUnit(name=movie-unit)
+ INFO - Enterprise application "/Users/dblevins/examples/ear-testing/business-logic/classpath.ear" loaded.
+ INFO - Assembling app: /Users/dblevins/examples/ear-testing/business-logic/classpath.ear
+ INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 415ms
+ INFO - Jndi(name=MoviesLocal) --> Ejb(deployment-id=Movies)
+ INFO - Jndi(name=global/classpath.ear/business-logic/Movies!org.superbiz.logic.Movies) --> Ejb(deployment-id=Movies)
+ INFO - Jndi(name=global/classpath.ear/business-logic/Movies) --> Ejb(deployment-id=Movies)
+ INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
+ INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
+ INFO - Deployed Application(path=/Users/dblevins/examples/ear-testing/business-logic/classpath.ear)
+ Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.393 sec
+
+ Results :
+
+ Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
http://git-wip-us.apache.org/repos/asf/tomee/blob/6e2a4f7c/examples/ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java
----------------------------------------------------------------------
diff --git a/examples/ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java b/examples/ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java
index b5401a0..396e23e 100644
--- a/examples/ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java
+++ b/examples/ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java
@@ -1,33 +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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.logic;
-
-import org.superbiz.model.Movie;
-
-import java.util.List;
-
-/**
- * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $
- */
-public interface Movies {
-
- void addMovie(Movie movie) throws Exception;
-
- void deleteMovie(Movie movie) throws Exception;
-
- List<Movie> getMovies() throws Exception;
-}
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.logic;
+
+import org.superbiz.model.Movie;
+
+import java.util.List;
+
+/**
+ * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $
+ */
+public interface Movies {
+
+ void addMovie(Movie movie) throws Exception;
+
+ void deleteMovie(Movie movie) throws Exception;
+
+ List<Movie> getMovies() throws Exception;
+}