Re-use the connection for the datasource and transaction rather than fetch another one only to throw it away later. Slightly experimental change to prevent the db pool locking up.
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/bd7dbd0f Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/bd7dbd0f Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/bd7dbd0f Branch: refs/heads/tomee-1.7.x Commit: bd7dbd0f31964df0c3ea421bc2f4aba2f51f8a2e Parents: fbb34e3 Author: Jonathan Gallimore <[email protected]> Authored: Tue Jul 14 01:24:18 2015 +0100 Committer: Jonathan Gallimore <[email protected]> Committed: Tue Jul 14 01:24:18 2015 +0100 ---------------------------------------------------------------------- .../jdbc/managed/local/ManagedConnection.java | 16 +- .../jdbc/managed/local/ManagedDataSource.java | 28 +- .../resource/jdbc/ManagedDataSourceTest.java | 4 +- .../MultiThreadedManagedDataSourceTest.java | 4 +- .../resource/jdbc/UTManagedDataSourceTest.java | 4 +- .../maven/plugin/AbstractSynchronizable.java | 142 +- .../test/resources/schema/ComplexAllElement.xsd | 42 +- .../test/resources/schema/ComplexAllType.xsd | 42 +- .../resources/schema/ComplexSequenceElement.xsd | 42 +- .../resources/schema/ComplexSequenceType.xsd | 42 +- .../test/resources/schema/JaxRpcSpecExample.xsd | 42 +- .../src/test/resources/schema/SimpleElement.xsd | 42 +- .../src/test/resources/schema/SimpleType.xsd | 42 +- .../resources/schema/SoapArrayByAttribute.xsd | 42 +- .../resources/schema/SoapArrayByRestriction.xsd | 42 +- .../apache/openejb/client/ClientSecurity.java | 408 ++--- .../client/DirectConnectionStrategy.java | 66 +- .../openejb/client/MulticastPulseClient.java | 1556 +++++++++--------- .../apache/openejb/client/ProtocolMetaData.java | 224 +-- .../openejb/server/cxf/rs/AutoJAXRSInvoker.java | 140 +- .../server/cxf/rs/OpenEJBEJBInvoker.java | 230 +-- .../openejb/server/cxf/rs/PojoInvoker.java | 124 +- .../rs/DynamicSubclassEjbDeploymentTest.java | 260 +-- .../cxf/rs/EJBAccessExceptionMapperTest.java | 220 +-- .../server/cxf/rs/EjbDeploymentTest.java | 246 +-- .../cxf/rs/PathParamAtClassLevelTest.java | 148 +- .../server/cxf/WSSPassThroughInterceptor.java | 132 +- .../server/cxf/ejb/EjbMessageContext.java | 124 +- .../server/cxf/CxfJaxWsProviderTest.java | 274 +-- .../server/cxf/fault/AuthenticatorService.java | 60 +- .../cxf/fault/AuthenticatorServiceBean.java | 84 +- .../AuthenticatorServiceBeanNoHandler.java | 82 +- .../server/cxf/fault/DummyInterceptor.java | 96 +- .../cxf/fault/WrongPasswordException.java | 82 +- .../fault/WrongPasswordRuntimeException.java | 84 +- .../src/test/resources/META-INF/ejb-jar.xml | 36 +- .../apache/openejb/server/cxf/fault/handler.xml | 52 +- .../org/apache/openejb/daemon/NTService.java | 228 +-- .../openejb/server/ejbd/RequestHandler.java | 90 +- .../server/discovery/MulticastPulseAgent.java | 1520 ++++++++--------- .../multipulse | 6 +- .../discovery/MulticastPulseAgentTest.java | 1026 ++++++------ .../openejb/server/rest/EJBRestServiceInfo.java | 66 +- .../server/rest/InternalApplication.java | 90 +- .../main/resources/META-INF/openejb-server.xml | 72 +- .../META-INF/org.apache.openejb.cli/stop.help | 28 +- src/main/style/checkstyle.xml | 330 ++-- .../apache/openejb/tck/util/ServerLocal.java | 100 +- .../apache-tomee/src/main/resources/service.bat | 452 ++--- .../main/resources/service.install.as.admin.bat | 64 +- .../main/resources/service.remove.as.admin.bat | 64 +- tomee/apache-tomee/src/main/resources/tomee.bat | 170 +- .../org/apache/tomee/catalina/Contexts.java | 296 ++-- .../catalina/ProvisioningWebappLoader.java | 238 +-- .../tomee/catalina/TomcatDeploymentLoader.java | 86 +- 55 files changed, 5122 insertions(+), 5108 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java index 25e1727..5a8c4c7 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java @@ -35,13 +35,10 @@ import java.lang.reflect.Method; import java.sql.Connection; import java.sql.SQLException; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; public class ManagedConnection implements InvocationHandler { private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_RESOURCE_JDBC, ManagedConnection.class); - private static final Map<Integer, Map<Transaction, Connection>> CONNECTION_BY_TX_BY_DS = new ConcurrentHashMap<Integer, Map<Transaction, Connection>>(); - private final TransactionManager transactionManager; private final LocalXAResource xaResource; protected Connection delegate; @@ -55,7 +52,7 @@ public class ManagedConnection implements InvocationHandler { transactionManager = txMgr; closed = false; xaResource = new LocalXAResource(delegate); - connectionByTx = CONNECTION_BY_TX_BY_DS.get(ds.hashCode()); + connectionByTx = ManagedConnectionsByTransactionByDatasource.get(ds); } public XAResource getXAResource() throws SQLException { @@ -195,17 +192,6 @@ public class ManagedConnection implements InvocationHandler { } } - public static void pushDataSource(final CommonDataSource ds) { - CONNECTION_BY_TX_BY_DS.put(ds.hashCode(), new ConcurrentHashMap<Transaction, Connection>()); - } - - public static void cleanDataSource(final CommonDataSource ds) { - final Map<Transaction, Connection> map = CONNECTION_BY_TX_BY_DS.remove(ds.hashCode()); - if (map != null) { - map.clear(); - } - } - private static class ClosingSynchronization implements Synchronization { private final Connection connection; private final Map<Transaction, Connection> mapToCleanup; http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java b/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java index 0c074f9..f57b9d8 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java @@ -21,7 +21,10 @@ import org.apache.openejb.util.reflection.Reflections; import javax.sql.CommonDataSource; import javax.sql.DataSource; +import javax.transaction.SystemException; +import javax.transaction.Transaction; import javax.transaction.TransactionManager; + import java.io.PrintWriter; import java.lang.reflect.Proxy; import java.sql.Connection; @@ -40,7 +43,7 @@ public class ManagedDataSource implements DataSource { delegate = ds; hashCode = hc; transactionManager = txMgr; - ManagedConnection.pushDataSource(this); + ManagedConnectionsByTransactionByDatasource.pushDataSource(this); } public ManagedDataSource(final DataSource ds, final TransactionManager txMgr) { @@ -49,7 +52,26 @@ public class ManagedDataSource implements DataSource { @Override public Connection getConnection() throws SQLException { - return managed(delegate.getConnection()); + + Transaction transaction = null; + + try { + transaction = transactionManager.getTransaction(); + } catch (final SystemException e) { + // ignore + } + + Connection connection = null; + + if (transaction != null) { + connection = ManagedConnectionsByTransactionByDatasource.get(this, transaction); + } + + if (connection == null) { + connection = delegate.getConnection(); + } + + return managed(connection); } @Override @@ -101,7 +123,7 @@ public class ManagedDataSource implements DataSource { } public void clean() { - ManagedConnection.cleanDataSource(this); + ManagedConnectionsByTransactionByDatasource.cleanDataSource(this); } @Override http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java index e959693..6279f6c 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java @@ -20,6 +20,7 @@ import org.apache.openejb.jee.EjbJar; import org.apache.openejb.jee.SingletonBean; import org.apache.openejb.junit.ApplicationComposer; import org.apache.openejb.resource.jdbc.managed.local.ManagedConnection; +import org.apache.openejb.resource.jdbc.managed.local.ManagedConnectionsByTransactionByDatasource; import org.apache.openejb.testing.Configuration; import org.apache.openejb.testing.Module; import org.junit.After; @@ -36,6 +37,7 @@ import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.sql.DataSource; import javax.transaction.Transaction; + import java.lang.reflect.Field; import java.sql.Connection; import java.sql.DriverManager; @@ -200,7 +202,7 @@ public class ManagedDataSourceTest { @After public void checkTxMapIsEmpty() throws Exception { // avoid memory leak - final Field map = ManagedConnection.class.getDeclaredField("CONNECTION_BY_TX_BY_DS"); + final Field map = ManagedConnectionsByTransactionByDatasource.class.getDeclaredField("CONNECTION_BY_TX_BY_DS"); map.setAccessible(true); final Map<DataSource, Map<Transaction, Connection>> instance = (Map<DataSource, Map<Transaction, Connection>>) map.get(null); assertEquals(1, instance.size()); http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/MultiThreadedManagedDataSourceTest.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/MultiThreadedManagedDataSourceTest.java b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/MultiThreadedManagedDataSourceTest.java index 15288fe..f538783 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/MultiThreadedManagedDataSourceTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/MultiThreadedManagedDataSourceTest.java @@ -20,6 +20,7 @@ import org.apache.openejb.jee.EjbJar; import org.apache.openejb.jee.SingletonBean; import org.apache.openejb.junit.ApplicationComposer; import org.apache.openejb.resource.jdbc.managed.local.ManagedConnection; +import org.apache.openejb.resource.jdbc.managed.local.ManagedConnectionsByTransactionByDatasource; import org.apache.openejb.testing.Configuration; import org.apache.openejb.testing.Module; import org.junit.After; @@ -34,6 +35,7 @@ import javax.ejb.LocalBean; import javax.ejb.Singleton; import javax.sql.DataSource; import javax.transaction.Transaction; + import java.lang.reflect.Field; import java.sql.Connection; import java.sql.DriverManager; @@ -194,7 +196,7 @@ public class MultiThreadedManagedDataSourceTest { @After public void checkTxMapIsEmpty() throws Exception { // avoid memory leak - final Field map = ManagedConnection.class.getDeclaredField("CONNECTION_BY_TX_BY_DS"); + final Field map = ManagedConnectionsByTransactionByDatasource.class.getDeclaredField("CONNECTION_BY_TX_BY_DS"); map.setAccessible(true); final Map<DataSource, Map<Transaction, Connection>> instance = (Map<DataSource, Map<Transaction, Connection>>) map.get(null); assertEquals(1, instance.size()); http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/UTManagedDataSourceTest.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/UTManagedDataSourceTest.java b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/UTManagedDataSourceTest.java index 146a5b3..821a761 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/UTManagedDataSourceTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/UTManagedDataSourceTest.java @@ -20,6 +20,7 @@ import org.apache.openejb.jee.EjbJar; import org.apache.openejb.jee.SingletonBean; import org.apache.openejb.junit.ApplicationComposer; import org.apache.openejb.resource.jdbc.managed.local.ManagedConnection; +import org.apache.openejb.resource.jdbc.managed.local.ManagedConnectionsByTransactionByDatasource; import org.apache.openejb.testing.Configuration; import org.apache.openejb.testing.Module; import org.junit.After; @@ -36,6 +37,7 @@ import javax.ejb.TransactionManagementType; import javax.sql.DataSource; import javax.transaction.Transaction; import javax.transaction.UserTransaction; + import java.lang.reflect.Field; import java.sql.Connection; import java.sql.DriverManager; @@ -211,7 +213,7 @@ public class UTManagedDataSourceTest { @After public void checkTxMapIsEmpty() throws Exception { // avoid memory leak - final Field map = ManagedConnection.class.getDeclaredField("CONNECTION_BY_TX_BY_DS"); + final Field map = ManagedConnectionsByTransactionByDatasource.class.getDeclaredField("CONNECTION_BY_TX_BY_DS"); map.setAccessible(true); final Map<DataSource, Map<Transaction, Connection>> instance = (Map<DataSource, Map<Transaction, Connection>>) map.get(null); assertEquals(1, instance.size()); http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractSynchronizable.java ---------------------------------------------------------------------- diff --git a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractSynchronizable.java b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractSynchronizable.java index 488e372..1244882 100644 --- a/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractSynchronizable.java +++ b/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractSynchronizable.java @@ -1,71 +1,71 @@ -/** - * - * 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; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public abstract class AbstractSynchronizable { - protected int updateInterval; - protected List<String> extensions; - protected List<String> updateOnlyExtensions; - protected String regex; - protected Map<File, File> updates; - - public abstract Map<File, File> updates(); - - public int getUpdateInterval() { - return updateInterval; - } - - public void setUpdateInterval(final int updateInterval) { - this.updateInterval = updateInterval; - } - - public List<String> getExtensions() { - if (extensions == null) { - extensions = new ArrayList<String>(); - } - return extensions; - } - - public void setExtensions(final List<String> extensions) { - this.extensions = extensions; - } - - public String getRegex() { - return regex; - } - - public void setRegex(final String regex) { - this.regex = regex; - } - - public List<String> getUpdateOnlyExtenions() { - if (updateOnlyExtensions == null) { - updateOnlyExtensions = new ArrayList<String>(); - } - return updateOnlyExtensions; - } - - public void setUpdateOnlyExtensions(final List<String> updateOnlyExtensions) { - this.updateOnlyExtensions = updateOnlyExtensions; - } -} +/** + * + * 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; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public abstract class AbstractSynchronizable { + protected int updateInterval; + protected List<String> extensions; + protected List<String> updateOnlyExtensions; + protected String regex; + protected Map<File, File> updates; + + public abstract Map<File, File> updates(); + + public int getUpdateInterval() { + return updateInterval; + } + + public void setUpdateInterval(final int updateInterval) { + this.updateInterval = updateInterval; + } + + public List<String> getExtensions() { + if (extensions == null) { + extensions = new ArrayList<String>(); + } + return extensions; + } + + public void setExtensions(final List<String> extensions) { + this.extensions = extensions; + } + + public String getRegex() { + return regex; + } + + public void setRegex(final String regex) { + this.regex = regex; + } + + public List<String> getUpdateOnlyExtenions() { + if (updateOnlyExtensions == null) { + updateOnlyExtensions = new ArrayList<String>(); + } + return updateOnlyExtensions; + } + + public void setUpdateOnlyExtensions(final List<String> updateOnlyExtensions) { + this.updateOnlyExtensions = updateOnlyExtensions; + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/ComplexAllElement.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/ComplexAllElement.xsd b/server/openejb-axis/src/test/resources/schema/ComplexAllElement.xsd index df9ef21..4821609 100644 --- a/server/openejb-axis/src/test/resources/schema/ComplexAllElement.xsd +++ b/server/openejb-axis/src/test/resources/schema/ComplexAllElement.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/ComplexAllType.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/ComplexAllType.xsd b/server/openejb-axis/src/test/resources/schema/ComplexAllType.xsd index f9dd8b4..9409581 100644 --- a/server/openejb-axis/src/test/resources/schema/ComplexAllType.xsd +++ b/server/openejb-axis/src/test/resources/schema/ComplexAllType.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/ComplexSequenceElement.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/ComplexSequenceElement.xsd b/server/openejb-axis/src/test/resources/schema/ComplexSequenceElement.xsd index 36299e3..f59ab72 100644 --- a/server/openejb-axis/src/test/resources/schema/ComplexSequenceElement.xsd +++ b/server/openejb-axis/src/test/resources/schema/ComplexSequenceElement.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/ComplexSequenceType.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/ComplexSequenceType.xsd b/server/openejb-axis/src/test/resources/schema/ComplexSequenceType.xsd index 34dbf99..0484e30 100644 --- a/server/openejb-axis/src/test/resources/schema/ComplexSequenceType.xsd +++ b/server/openejb-axis/src/test/resources/schema/ComplexSequenceType.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/JaxRpcSpecExample.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/JaxRpcSpecExample.xsd b/server/openejb-axis/src/test/resources/schema/JaxRpcSpecExample.xsd index a1bba13..65eb581 100644 --- a/server/openejb-axis/src/test/resources/schema/JaxRpcSpecExample.xsd +++ b/server/openejb-axis/src/test/resources/schema/JaxRpcSpecExample.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/SimpleElement.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/SimpleElement.xsd b/server/openejb-axis/src/test/resources/schema/SimpleElement.xsd index 9d4bd82..3f483e3 100644 --- a/server/openejb-axis/src/test/resources/schema/SimpleElement.xsd +++ b/server/openejb-axis/src/test/resources/schema/SimpleElement.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/SimpleType.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/SimpleType.xsd b/server/openejb-axis/src/test/resources/schema/SimpleType.xsd index 83339ae..894c3b4 100644 --- a/server/openejb-axis/src/test/resources/schema/SimpleType.xsd +++ b/server/openejb-axis/src/test/resources/schema/SimpleType.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/SoapArrayByAttribute.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/SoapArrayByAttribute.xsd b/server/openejb-axis/src/test/resources/schema/SoapArrayByAttribute.xsd index 5696c61..1f63eed 100644 --- a/server/openejb-axis/src/test/resources/schema/SoapArrayByAttribute.xsd +++ b/server/openejb-axis/src/test/resources/schema/SoapArrayByAttribute.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <xsd:schema targetNamespace="X" xmlns:tns="X" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-axis/src/test/resources/schema/SoapArrayByRestriction.xsd ---------------------------------------------------------------------- diff --git a/server/openejb-axis/src/test/resources/schema/SoapArrayByRestriction.xsd b/server/openejb-axis/src/test/resources/schema/SoapArrayByRestriction.xsd index 9b61fcc..ab4c67b 100644 --- a/server/openejb-axis/src/test/resources/schema/SoapArrayByRestriction.xsd +++ b/server/openejb-axis/src/test/resources/schema/SoapArrayByRestriction.xsd @@ -1,24 +1,24 @@ -<?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$ $Date$ --> - +<?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$ $Date$ --> + <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="X" xmlns:tns="X" xmlns:xsd="http://www.w3.org/2001/XMLSchema" http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java b/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java index 1990958..99cacd1 100644 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/ClientSecurity.java @@ -1,204 +1,204 @@ -/** - * - * 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 javax.security.auth.login.FailedLoginException; -import java.net.URI; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -public class ClientSecurity { - - public static final String IDENTITY_RESOLVER_STRATEGY = "openejb.client.identityResolver"; - - private static ServerMetaData server; - private static IdentityResolver identityResolver; - private static Object staticClientIdentity; - private static final InheritableThreadLocal<Object> threadClientIdentity = new InheritableThreadLocal<Object>(); - - static { - // determine the server uri - final String serverUri = System.getProperty("openejb.server.uri"); - - if (serverUri != null) { - // determine the server location - try { - final URI location = new URI(serverUri); - server = new ServerMetaData(location); - } catch (final Exception e) { - if (!serverUri.contains("://")) { - try { - final URI location = new URI("oejb://" + serverUri); - server = new ServerMetaData(location); - } catch (final URISyntaxException ignored) { - } - } - } - } - } - - public static ServerMetaData getServer() { - return server; - } - - public static void setServer(final ServerMetaData server) { - ClientSecurity.server = server; - } - - /** - * Login the spedified user using the specified password. This is a global login for the - * entire Java Virtural Machine. If you would like to have a thread scoped login, use - * ClientSecurity.login(username, password, true); - * </p> - * This is the equivalent of ClientSecurity.login(username, password, false); - * - * @param username the user to login - * @param password the password for the user - * @throws FailedLoginException if the username and password combination are not valid or - * if there is a problem communiating with the server - */ - public static void login(final String username, final String password) throws FailedLoginException { - login(username, password, false); - } - - /** - * Login the spedified user using the specified password either globally for the - * entire Java Virtural Machine or scoped to the thread. - * </p> - * When using thread scoped login, you should logout in a finally block. This particularly - * when using thread pools. If a thread is returned to the pool with a login attached to the - * thread the next user of that thread will inherit the thread scoped login. - * - * @param username the user to login - * @param password the password for the user - * @param threadScoped if true the login is scoped to the thread; otherwise the login is global - * for the entire Java Virtural Machine - * @throws FailedLoginException if the username and password combination are not valid or - * if there is a problem communiating with the server - */ - public static void login(final String username, final String password, final boolean threadScoped) throws FailedLoginException { - final Object clientIdentity = directAuthentication(username, password, server); - if (threadScoped) { - threadClientIdentity.set(clientIdentity); - } else { - staticClientIdentity = clientIdentity; - } - identityResolver = new SimpleIdentityResolver(); - } - - /** - * Clears the thread and global login data. - */ - public static void logout() { - threadClientIdentity.set(null); - staticClientIdentity = null; - } - - /** - * This is a helper method for login modules. Directly authenticates with the server using the specified - * username and password returning the identity token for the client. This methods does not store the - * identity token and the caller must arrange for the to be available to the OpenEJB proxies via an - * IdentityResolver. - * - * @param username the username for authentication - * @param password the password for authentication - * @param server ServerMetaData - * @return the client identity token - * @throws FailedLoginException if the username password combination is not valid - */ - public static Object directAuthentication(final String username, final String password, final ServerMetaData server) throws FailedLoginException { - return directAuthentication(null, username, password, server); - } - - public static Object directAuthentication(final String securityRealm, final String username, final String password, final ServerMetaData server) throws FailedLoginException { - // authenticate - final AuthenticationRequest authReq = new AuthenticationRequest(securityRealm, username, password); - final AuthenticationResponse authRes; - try { - authRes = (AuthenticationResponse) Client.request(authReq, new AuthenticationResponse(), server); - } catch (final RemoteException e) { - throw (FailedLoginException) new FailedLoginException("Unable to authenticate with server " + server).initCause(e); - } - - // check the response - if (authRes.getResponseCode() != ResponseCodes.AUTH_GRANTED) { - throw (FailedLoginException) new FailedLoginException("This principal is not authenticated.").initCause(authRes.getDeniedCause()); - } - - // return the response object - return authRes.getIdentity().getClientIdentity(); - } - - public static Object getIdentity() { - return getIdentityResolver().getIdentity(); - } - - public static IdentityResolver getIdentityResolver() { - if (identityResolver == null) { - final String strategy = System.getProperty(IDENTITY_RESOLVER_STRATEGY); - if (strategy == null) { - identityResolver = new JaasIdentityResolver(); - } else { - // find the strategy class - final ResourceFinder finder = new ResourceFinder("META-INF/"); - final Class identityResolverClass; - try { - identityResolverClass = finder.findClass(IdentityResolver.class.getName() + "/" + strategy); - } catch (final Exception e) { - throw new IllegalArgumentException("Could not find client identity strategy '" + strategy + "'"); - } - - // verify the interface - if (!IdentityResolver.class.isAssignableFrom(identityResolverClass)) { - throw new IllegalArgumentException("Client identity strategy '" + strategy + "' " + - "class '" + identityResolverClass.getName() + "' does not implement the " + - "interface '" + IdentityResolver.class.getSimpleName() + "'"); - } - - // create the class - try { - identityResolver = (IdentityResolver) identityResolverClass.newInstance(); - } catch (final Exception e) { - throw new IllegalArgumentException("Unable to create client identity strategy '" + strategy + "' " + - "class '" + identityResolverClass.getName() + "'", e); - } - } - - } - return identityResolver; - } - - public static void setIdentityResolver(final IdentityResolver identityResolver) { - ClientSecurity.identityResolver = identityResolver; - } - - private ClientSecurity() { - } - - public static class SimpleIdentityResolver implements IdentityResolver { - - @Override - public Object getIdentity() { - Object clientIdentity = threadClientIdentity.get(); - if (clientIdentity == null) { - clientIdentity = staticClientIdentity; - } - return clientIdentity; - } - } -} +/** + * + * 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 javax.security.auth.login.FailedLoginException; +import java.net.URI; +import java.net.URISyntaxException; +import java.rmi.RemoteException; + +public class ClientSecurity { + + public static final String IDENTITY_RESOLVER_STRATEGY = "openejb.client.identityResolver"; + + private static ServerMetaData server; + private static IdentityResolver identityResolver; + private static Object staticClientIdentity; + private static final InheritableThreadLocal<Object> threadClientIdentity = new InheritableThreadLocal<Object>(); + + static { + // determine the server uri + final String serverUri = System.getProperty("openejb.server.uri"); + + if (serverUri != null) { + // determine the server location + try { + final URI location = new URI(serverUri); + server = new ServerMetaData(location); + } catch (final Exception e) { + if (!serverUri.contains("://")) { + try { + final URI location = new URI("oejb://" + serverUri); + server = new ServerMetaData(location); + } catch (final URISyntaxException ignored) { + } + } + } + } + } + + public static ServerMetaData getServer() { + return server; + } + + public static void setServer(final ServerMetaData server) { + ClientSecurity.server = server; + } + + /** + * Login the spedified user using the specified password. This is a global login for the + * entire Java Virtural Machine. If you would like to have a thread scoped login, use + * ClientSecurity.login(username, password, true); + * </p> + * This is the equivalent of ClientSecurity.login(username, password, false); + * + * @param username the user to login + * @param password the password for the user + * @throws FailedLoginException if the username and password combination are not valid or + * if there is a problem communiating with the server + */ + public static void login(final String username, final String password) throws FailedLoginException { + login(username, password, false); + } + + /** + * Login the spedified user using the specified password either globally for the + * entire Java Virtural Machine or scoped to the thread. + * </p> + * When using thread scoped login, you should logout in a finally block. This particularly + * when using thread pools. If a thread is returned to the pool with a login attached to the + * thread the next user of that thread will inherit the thread scoped login. + * + * @param username the user to login + * @param password the password for the user + * @param threadScoped if true the login is scoped to the thread; otherwise the login is global + * for the entire Java Virtural Machine + * @throws FailedLoginException if the username and password combination are not valid or + * if there is a problem communiating with the server + */ + public static void login(final String username, final String password, final boolean threadScoped) throws FailedLoginException { + final Object clientIdentity = directAuthentication(username, password, server); + if (threadScoped) { + threadClientIdentity.set(clientIdentity); + } else { + staticClientIdentity = clientIdentity; + } + identityResolver = new SimpleIdentityResolver(); + } + + /** + * Clears the thread and global login data. + */ + public static void logout() { + threadClientIdentity.set(null); + staticClientIdentity = null; + } + + /** + * This is a helper method for login modules. Directly authenticates with the server using the specified + * username and password returning the identity token for the client. This methods does not store the + * identity token and the caller must arrange for the to be available to the OpenEJB proxies via an + * IdentityResolver. + * + * @param username the username for authentication + * @param password the password for authentication + * @param server ServerMetaData + * @return the client identity token + * @throws FailedLoginException if the username password combination is not valid + */ + public static Object directAuthentication(final String username, final String password, final ServerMetaData server) throws FailedLoginException { + return directAuthentication(null, username, password, server); + } + + public static Object directAuthentication(final String securityRealm, final String username, final String password, final ServerMetaData server) throws FailedLoginException { + // authenticate + final AuthenticationRequest authReq = new AuthenticationRequest(securityRealm, username, password); + final AuthenticationResponse authRes; + try { + authRes = (AuthenticationResponse) Client.request(authReq, new AuthenticationResponse(), server); + } catch (final RemoteException e) { + throw (FailedLoginException) new FailedLoginException("Unable to authenticate with server " + server).initCause(e); + } + + // check the response + if (authRes.getResponseCode() != ResponseCodes.AUTH_GRANTED) { + throw (FailedLoginException) new FailedLoginException("This principal is not authenticated.").initCause(authRes.getDeniedCause()); + } + + // return the response object + return authRes.getIdentity().getClientIdentity(); + } + + public static Object getIdentity() { + return getIdentityResolver().getIdentity(); + } + + public static IdentityResolver getIdentityResolver() { + if (identityResolver == null) { + final String strategy = System.getProperty(IDENTITY_RESOLVER_STRATEGY); + if (strategy == null) { + identityResolver = new JaasIdentityResolver(); + } else { + // find the strategy class + final ResourceFinder finder = new ResourceFinder("META-INF/"); + final Class identityResolverClass; + try { + identityResolverClass = finder.findClass(IdentityResolver.class.getName() + "/" + strategy); + } catch (final Exception e) { + throw new IllegalArgumentException("Could not find client identity strategy '" + strategy + "'"); + } + + // verify the interface + if (!IdentityResolver.class.isAssignableFrom(identityResolverClass)) { + throw new IllegalArgumentException("Client identity strategy '" + strategy + "' " + + "class '" + identityResolverClass.getName() + "' does not implement the " + + "interface '" + IdentityResolver.class.getSimpleName() + "'"); + } + + // create the class + try { + identityResolver = (IdentityResolver) identityResolverClass.newInstance(); + } catch (final Exception e) { + throw new IllegalArgumentException("Unable to create client identity strategy '" + strategy + "' " + + "class '" + identityResolverClass.getName() + "'", e); + } + } + + } + return identityResolver; + } + + public static void setIdentityResolver(final IdentityResolver identityResolver) { + ClientSecurity.identityResolver = identityResolver; + } + + private ClientSecurity() { + } + + public static class SimpleIdentityResolver implements IdentityResolver { + + @Override + public Object getIdentity() { + Object clientIdentity = threadClientIdentity.get(); + if (clientIdentity == null) { + clientIdentity = staticClientIdentity; + } + return clientIdentity; + } + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/bd7dbd0f/server/openejb-client/src/main/java/org/apache/openejb/client/DirectConnectionStrategy.java ---------------------------------------------------------------------- diff --git a/server/openejb-client/src/main/java/org/apache/openejb/client/DirectConnectionStrategy.java b/server/openejb-client/src/main/java/org/apache/openejb/client/DirectConnectionStrategy.java index 56d2623..c066c9f 100755 --- a/server/openejb-client/src/main/java/org/apache/openejb/client/DirectConnectionStrategy.java +++ b/server/openejb-client/src/main/java/org/apache/openejb/client/DirectConnectionStrategy.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 - * - * 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; - -public class DirectConnectionStrategy implements ConnectionStrategy { - - @Override - public Connection connect(final ClusterMetaData cluster, final ServerMetaData server) throws IOException { - final Connection connection = ConnectionManager.getConnection(server.getLocation()); - - // Grabbing the URI from the associated connection allows the ConnectionFactory to - // employ discovery to find and connect to a server. We then attempt to connect - // to the discovered server rather than repeat the discovery process again. - cluster.setLastLocation(connection.getURI()); - return connection; - } -} +/* + * 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; + +public class DirectConnectionStrategy implements ConnectionStrategy { + + @Override + public Connection connect(final ClusterMetaData cluster, final ServerMetaData server) throws IOException { + final Connection connection = ConnectionManager.getConnection(server.getLocation()); + + // Grabbing the URI from the associated connection allows the ConnectionFactory to + // employ discovery to find and connect to a server. We then attempt to connect + // to the discovered server rather than repeat the discovery process again. + cluster.setLastLocation(connection.getURI()); + return connection; + } +}
