Diff
Modified: trunk/openejb1/modules/core/project.xml (2498 => 2499)
--- trunk/openejb1/modules/core/project.xml 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/project.xml 2006-02-24 21:33:16 UTC (rev 2499)
@@ -60,6 +60,14 @@
<runtime>true</runtime>
</properties>
</dependency>
+ <dependency>
+ <groupId>backport-util-concurrent</groupId>
+ <artifactId>backport-util-concurrent</artifactId>
+ <version>2.0_01_pd</version>
+ <properties>
+ <runtime>true</runtime>
+ </properties>
+ </dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/admin (2498 => 2499)
--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/admin 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/admin 2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,6 @@
bind = 127.0.0.1
port = 4200
disabled = false
+ threads = 1
+
Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/ejbd (2498 => 2499)
--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/ejbd 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/ejbd 2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,5 @@
bind = 127.0.0.1
port = 4201
disabled = false
+ threads = 200
Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/httpejbd (2498 => 2499)
--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/httpejbd 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/httpejbd 2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,4 @@
bind = 127.0.0.1
port = 4204
disabled = false
-
+ threads = 200
Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/telnet (2498 => 2499)
--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/telnet 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/telnet 2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,6 @@
bind = 127.0.0.1
port = 4202
disabled = false
+ threads = 5
+#
Modified: trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceAccessController.java (2498 => 2499)
--- trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceAccessController.java 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceAccessController.java 2006-02-24 21:33:16 UTC (rev 2499)
@@ -167,7 +167,7 @@
String ipString = props.getProperty("only_from");
if (ipString != null) {
- StringTokenizer st = new StringTokenizer(ipString, ",");
+ StringTokenizer st = new StringTokenizer(ipString, " ,");
while (st.hasMoreTokens()) {
String address = null;
InetAddress ip = null;
Modified: trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceManager.java (2498 => 2499)
--- trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceManager.java 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceManager.java 2006-02-24 21:33:16 UTC (rev 2499)
@@ -162,6 +162,19 @@
properties.put(interfase, impl);
String rawProperties = resourceFinder.findString(interfase.getName() + "/" + name);
properties.put(Properties.class, rawProperties);
+
+ // Override with system properties
+ String prefix = name + ".";
+ Properties sysProps = System.getProperties();
+ for (Iterator iterator1 = sysProps.entrySet().iterator(); iterator1.hasNext();) {
+ Map.Entry entry1 = (Map.Entry) iterator1.next();
+ String key = (String) entry1.getKey();
+ String value = (String) entry1.getValue();
+ if (key.startsWith(prefix)){
+ key = key.replaceFirst(prefix, "");
+ properties.setProperty(key, value);
+ }
+ }
}
return services;
}
Modified: trunk/openejb1/modules/core/src/java/org/openejb/server/ServicePool.java (2498 => 2499)
--- trunk/openejb1/modules/core/src/java/org/openejb/server/ServicePool.java 2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/java/org/openejb/server/ServicePool.java 2006-02-24 21:33:16 UTC (rev 2499)
@@ -48,6 +48,12 @@
import java.net.*;
import java.util.*;
import org.openejb.*;
+import org.openejb.util.Logger;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+import edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue;
+import edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor;
+import edu.emory.mathcs.backport.java.util.concurrent.ThreadFactory;
+import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
/**
* The Server will call the following methods.
@@ -63,9 +69,12 @@
* @author <a href="" PROTECTED]">David Blevins</a>
*/
public class ServicePool implements ServerService {
-
- ServerService next;
+ private Logger log = Logger.getInstance(ServicePool.class.getName(), ServicePool.class.getName());
+ private ServerService next;
+ private Executor executor;
+
+
public ServicePool(ServerService next){
this.next = next;
}
@@ -78,8 +87,28 @@
* @exception ServiceException
*/
public void init(Properties props) throws Exception{
+
// Do our stuff
-
+ String threadsString = props.getProperty("threads", "200");
+ int threads = Integer.parseInt(threadsString);
+ final String name = props.getProperty("name", "unknown");
+
+ ThreadPoolExecutor p = new ThreadPoolExecutor(threads, threads, 5000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());
+ p.setThreadFactory(new ThreadFactory() {
+ private volatile int id = 0;
+
+ public Thread newThread(Runnable arg0) {
+ Thread thread = new Thread(arg0, name + " " + getNextID());
+ return thread;
+ }
+
+ private int getNextID() {
+ return id++;
+ }
+
+ });
+ executor = p;
+
// Then call the next guy
next.init(props);
}
@@ -98,12 +127,41 @@
next.stop();
}
- public void service(Socket socket) throws ServiceException, IOException{
- // Do our stuff
- // Check authorization
+ public void service(final Socket socket) throws ServiceException, IOException{
+ final Runnable service = new Runnable() {
+ public void run() {
+ try {
+ next.service(socket);
+ } catch (SecurityException e) {
+ log.error("Security error: " + e.getMessage(), e);
+ } catch (Throwable e) {
+ log.error("Unexpected error", e);
+ } finally {
+ try {
+ if (socket != null) {
+ socket.close();
+ }
+ } catch (Throwable t) {
+ log.warning("Error while closing connection with client", t);
+ }
+ }
+ }
+ };
- // Then call the next guy
- next.service(socket);
+ final ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ Runnable ctxCL = new Runnable() {
+ public void run() {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(tccl);
+ try {
+ service.run();
+ } finally {
+ Thread.currentThread().setContextClassLoader(cl);
+ }
+ }
+ };
+
+ executor.execute(ctxCL);
}
public void service(InputStream in, OutputStream out) throws ServiceException, IOException {