Menu

[r548]: / trunk / php-java-bridge / ChangeLog  Maximize  Restore  History

Download this file

5317 lines (3610 with data), 181.8 kB

2007-06-16  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java
	(recycle): Restore the threadContextClassLoader

	* server/php/java/bridge/http/IContextFactory.java
	(recycleLegacy): New method.
	
	* server/php/java/bridge/JavaBridge.java
	(recycleContext): Use recycleLegacy, display warning.
	
	* VERSION, php-java-bridge.spec: Version 4.1.1

2007-06-15  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/Request.java
	(setBridge,resetBridge): switch context
	
	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java
	(getDefaultClassLoader): New method
	(doReset): Update the thread context class loader
	
	* server/php/java/bridge/http/ContextFactory.java
	(recycle): Corrected assertion
	
	* server/Makefile.am: ignore gcj warnings

	* php-java-bridge.spec: Fedora FC7 is supported

	* security/module/Makefile: Correct HEADERDIR

	* server/php/java/bridge/JavaBridgeFactory.java
	(getBridge): get the appropriate Simple- or JavaBridgeClassLoader
	(getJavaBridgeClassLoader): New method
	
	* server/php/java/bridge/SessionFactory.java
	(getJavaBridgeClassLoader): New method: Create a
	SimpleJavaBridgeClassLoader

	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java
	(updateJarLibraryPath): ignore a thread context switch
	(switchedThreadContext): Removed
	(switcheThreadContextClassLoader): Renamed from switchedThreadContext
	(switcheThreadContextClassLoader): ignore a thread context switch
	
	* server/php/java/bridge/Util.java
	(Process): Start the system php_exec with user.home as the current
	directory so that the system php executable doesn't read
	WEB-INF/cgi/php.ini.

	* server/php/java/bridge/http/ContextFactory.java
	(getJavaBridgeClassLoader): New method: Create a
	JavaBridgeClassLoader.

	* server/php/java/bridge/JavaBridgeClassLoader.java
	(updateJarLibraryPath): handle a thread context switch
	(switcheThreadContextClassLoader): New method.

	* VERSION, php-java-bridge.spec: Version 4.1.0b

2007-06-14  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java
	(getSessionFactory): New function
	(JavaBridge): public constructor which takes the current class
	loader as an argument
	(JavaBridge): Non-public constructors, Create an internal bridge
	with the default class loader, used by non-servlet
	environments. Users can still call these constructors, if they
	extend the JavaBridge class. Obtain the class loader from the
	factory, which may either be a session- or a context factory.
	(recycleContext): Removed

	* server/php/java/bridge/JavaBridgeFactory.java
	(getClassLoader): New function

	* server/php/java/bridge/SessionFactory.java
	(getClassLoader): New function
	
	* server/php/java/bridge/http/ContextRunner.java
	(init): Do not allocate a new JavaBridgeClassLoader, the bridge
	already has one.

	* server/php/java/bridge/JavaBridgeRunner.java
	(doPut): X_JAVABRIDGE_REDIRECT is optional.

	* VERSION, php-java-bridge.spec: Version 4.1.0a

	
2007-06-10  Jost Boekemeier  <jostb@intern>

	* api.c (session, context): Do not call getSession(String, String,
	int)/getContext(String) anymore, it is deprecated.

	* client.c (share_connection,recycle_connection): Always send a
	protocol header, so that the logic on the server-side can be
	cleaned up.
	
	* install.sh.in: Use new location

	* protocol.c (end_session): Set bit 2, so that the back end can
	handle legacy binaries.

	* server/META-INF/java/JavaBridge.inc (Java): Provide a Java
	function if this function doesn't exist.

	* server/php/java/bridge/BaseThreadPool.java: Do not use a global
	class loader.

	* server/php/java/bridge/global.properties.in: Added documentation

	* server/php/java/bridge/http/AbstractChannelName.java (recycle):
	removed

	* server/php/java/bridge/http/ContextFactory.java (peek): New function.
	(get): Use peek if no credentials provided.
	(recycle): Rewritten.
	(setBridge,getBridge): removed
	(setClassLoader,getClassLoader): New procedures
	(setIsLegacyClient): New procedure

	* server/php/java/bridge/http/ContextRunner.java (init): Rewritten
	(recycle): Removed
	
	* server/php/java/bridge/http/ContextServer.java
	(recycle): Removed

	* server/php/java/bridge/http/JavaBridgeFactory.java, server/php/java/bridge/http/IJavaBridgeFactory.java: New classes

	* server/php/java/bridge/http/SimpleContextFactory.java
	(SimpleContextFactory): Set the currentThreadClassLoader from the
	servlet into the ContextFactory.

	* server/php/java/bridge/Options.java
	(disableKeepAlive,canKeepAlive): New procedures for backward
	compatibility (will be implemented in 4.1.1). -- Currently not
	implemented; if an old client connects to the new code, it will
	simply crash.
	
	* server/php/java/bridge/Request.java
	(handleRequest): Check for legacy client

	* server/php/java/bridge/SessionFactory.java
	(getClassLoader): New procedure

	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java: Rewritten.

	* server/php/java/bridge/Util.java (getContextClassLoader): Rewritten

	* server/php/java/servlet/PhpJavaServlet.java
	(handleSocketConnection): Check for legacy client
	(handleSocketConnection): Pass null as the credentials, the
	ContextFactory must not be a liveContext at this stage. Live
	contexts may appear in override-redirect or in the http tunnel,
	but not during the servlet -> contextRunner switch.
	(doPut): check for legacy client.
	
	* VERSION, php-java-bridge.spec: Version 4.1.0
	
2007-05-28  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java
	(recycleContext): Removed
	
	* api.c (construct_class): JavaClass() requires exactly one argument.

	* php-java-bridge/install.sh.in: Correct path

	* java.c (classNameCacheEl_dtor, java): New procedures.
	(rinit, rshutdown): Initialize java class cache.

	* server/META-INF/java/Protocol.inc (java):
	Compatibility with the C implementation.
	(open, fread, getName, getChannel): disable timeout
	(getChannel): Removed
	(getChannelName): New from getChannel

	* server/php/java/bridge/JarLibraryPath.java 
	(createUrls): look into ~/lib/

	* php/java/bridge/JavaBridgeRunner.java 
	(doGet): Do not cache anything exept Java.inc

	* server/TestInstallation.java: Extract java/Java.inc.

	
2007-05-28  Jost Boekemeier  <jostb@intern>

	* VERSION, php-java-bridge.spec: Version 4.0.8 released
	
2007-05-05  Jost Boekemeier  <jostb@intern>

	* java.c(MINIT): Implement java() function on C level.

	* server/META-INF/java/JavaBridge.inc (java): Removed, now in java.c

	* server/META-INF/java/Protocol.inc (open, fread): Disable timeout.
	
2007-04-15  Jost Boekemeier  <jostb@intern>

	* server/Makefile.am: Add TestInstallation.class 

	* server/META-INF/java/JavaBridge.inc: Do not destroy redirect from
	the servlet.

	* server/php/java/bridge/http/ContextFactory.java (recycle): call
	finishContext so that the visitor can clean up its internal state.

	* server/php/java/bridge/http/IContextFactory.java
	(finishContext): New procedure.

	* server/php/java/bridge/http/SimpleContextFactory.java
	(finishContext): New procedure: reset the session cache.
	
2007-04-06  Jost Boekemeier  <jostb@intern>

	* bind.c (exec_vm): Use the canonical name if the configured
	name wasn't not found.

	* java.c (MINFO): Correct typo

	* examples/php+jsp/settings.php, server/WEB-INF/web.xml: Added 
	prefer_system_php_exec config option.

	* server/php/java/bridge/Util.java, server/php/java/script/CGIRunner.java, server/php/java/servlet/PhpCGIServlet.java: Added prefer_system_php_exec config option.

	There must be only one ConnectionPool/FastCGI pool per class
	loader: 

	* server/php/java/servlet/fastcgi/ChannelName.java
	(updatePort): Removed
	(initialize): New from updatePort
	(fcgiStartLock): Use only one lock per class loader, otherwise the
	lock wouldn't make any sense.
	(fcgiActivatorRunning): Only the first request sets the lock and
	activates the FastCGI servlet.
	(toString): New method.  *
	server/php/java/servlet/fastcgi/FastCGIServlet.java
	(lockObject): Removed
	(globalCtxLock, javaBridgeCtxLock): New locks.
	(findCGI): Separate the global- and the "JavaBridge" pool.
	
	* VERSION, php-java-bridge.spec: Version 4.0.8test2
	
2007-04-06  Jost Boekemeier  <jostb@intern>

	* bind.c
	(get_server_args,test_local_server,can_fork,test_server,wait_server,start_server):
	check for X_JAVABRIDGE_OVERRIDE_REDIRECT
	
	* client.c
	(create_connection,init_channel_raw,init_channel,clone_cfg,passivate_connection,activate_connection,destroy_cloned_cfg,oberride_ini_for_redirect):
	check for X_JAVABRIDGE_OVERRIDE_REDIRECT
	
	* bind.c (get_server_args): display SERVLET port #

	* init_cfg.c.in
	(option_set_by_user): check for X_JAVABRIDGE_OVERRIDE_REDIRECT

	* java.c (do_cast): accept integral types for compatibility with the pure PHP implementation.

	* java.c (alloc_globals_ctor,push_cfg,pop_cfg): check for X_JAVABRIDGE_OVERRIDE_REDIRECT

	* server/Makefile.am: hard-code Java.inc into the "java" binary
	when compiling the back end to native code.

	* server/META-INF/java/JavaBridge.inc (java): New function

	* server/META-INF/java/Protocol.inc (open,close): Do not use
	pfsockopen for override redirect so that PHP does not try to
	re-use the existing connection, which waiting for the servlet,
	which in turn is waiting for this PHP instance.

	* server/php/java/bridge/http/ContextFactory.java (recycle): Do
	not destroy the bridge, it will be used in the following <F p=F />
	call. Test case: <?php java_get_server_name() ?>.

	* tests.php5/simple.php: New test for the above fix.

	* server/php/java/bridge/http/SimpleContextFactory.java
	(destroy, getSession): Cache the obtained session.

	* server/php/java/bridge/JavaBridgeRunner.java
	(doGet): cache the obtained Java.inc

	* server/php/java/bridge/Util.java (createThreadPool): Removed
	duplicated output

	* server/php/java/servlet/fastcgi/NPChannelName.java (test): Check the fifo.

	* server/php/java/servlet/RemoteContext.java: Return a wrapped context for remote PHP scripts.

	* server/php/java/servlet/RemoteResponse.java: Return a wrapped response for remote PHP scripts.
	
	* server/php/java/servlet/RemoteRequest.java: Return a wrapped request for remote PHP scripts.

	* server/php/java/servlet/RemoteHttpSessionFacade.java: Use the cached session.

	* server/php/java/servlet/RemoteServletContextFactory: Create wrapped request, context, response

	* server/php/java/servlet/ServletContextFactory.java: Create a
	response which complies to the interface used by remote scripts.

	* VERSION, php-java-bridge.spec: Version 4.0.8test1
	
	
2007-03-28  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/Parser.java
	(parse): Parse the protocol header correctly. Since the pure PHP
	implementation always contacts the servlet, the ContextRunner needs
	an updated classloader.
	
	* VERSION, php-java-bridge.spec: Version 4.0.7 released.
	
2007-03-26  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/PhpJavaServlet.java
	(handleSocketConnection): Explicitly close down the output stream
	before waiting for the remote context. Otherwise the Sun Java
	System AS 9 delays the response and a remote script hangs for
	30 seconds in waitForContext() until the servlet terminates.

	* /server/php/java/bridge/http/ContextFactory.java
	(recycle): notify a servlet waiting in waitForContext() that the
	script terminated.
	(init): New method.
	(get): initialize, if necessary.
		
	* server/META-INF/java/Protocol.inc
	(close): check null
	(java_PipeChannel): Set the umask so that files created by apache
	can be accessed by the J2EE back end.
	
	* VERSION, php-java-bridge.spec: Version 4.0.6 released.
	
2007-03-25  Jost Boekemeier  <jostb@intern>

	* server/META-INF/java/Protocol.inc
	(getOverrideHosts): Allow X_JAVABRIDGE_OVERRIDE_HOSTS_REDIRECT w/o
	X_JAVABRIDGE_OVERRIDE_HOSTS.

	* server/php/java/servlet/PhpJavaServlet.java 
	(waitForContext): Wait. But no longer than 30 seconds.

	* server/php/java/servlet/RemoteServletContextFactory.java
	(createContext): Allow access to ServletRequest, Servlet and
	ServletContext, but not ServletResponse. If a ServletResponse
	instance is needed, fake one.

	* VERSION, php-java-bridge.spec: Version 4.0.5 released.

	
2007-03-24  Jost Boekemeier  <jostb@intern>

	* server/META-INF/java/Protocol.inc
	(close,open): Re-open a closed connection.

	* server/META-INF/java/JavaProxy.inc
	(java_closure_array): Correct test.

	* server/extract.sed: New file
	
	* server/Makefile.am: Refactored: use extract cmd file

	* server/META-INF/java/Options.inc
	(JAVA_PIPE_DIR): New option

	* server/php/java/bridge/JavaBridge.java
	(initLog): Log thread pool size.
	(weight): null arguments do not contribute anything

	* server/php/java/script/PhpScriptContext.java
	(setContinuation, call): Ignore further calls so that the default
	java_context()->call() is void if the user has already called into
	the continuation.
	
	* tests.php5/script_api.php
	(createRunnable): Use InvocablePhpScriptEngine. PhpScriptEngine
	cannot call.

	* VERSION, php-java-bridge.spec: Version 4.0.4 released.
	
	
2007-03-21  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java 
	(ObjectToString): New method.

	* VERSION, php-java-bridge.spec: Version 4.0.3 released.
	
	
2007-03-19  Jost Boekemeier  <jostb@intern>

	* server/META-INF/java/JavaProxy.inc 
	(java_JavaType): New super interface for Java and JavaException
	(java_values,java_inspect,java_instanceof,java_cast,java_closure_array): Correct test.
	
	* server/META-INF/java/JavaProxy.inc 
	(java_instanceof): Correct test
	
	* server/META-INF/java/JavaProxy.inc 
	(java_closure_array): third arg may be an array of interfaces

	* VERSION, php-java-bridge.spec: Version 4.0.2 released.

	
2007-03-11  Jost Boekemeier  <jostb@intern>

	* server/META-INF/java/Client.inc (java_Client): Set up named pipe
	communication.
	(getSession): Implement override-redirect.

	* server/META-INF/java/Protocol.inc 
	(java_SocketChannel): Rewritten.
	(java_EmptyPipeChannel): New class
	(java_PipeChannel): New Class
	(java_SocketHandler): Rewritten.
	(getSession): override-redirect implemented.
	(java_HttpHandler): Rewritten.
	(java_OverrideRedirectHandler): New class

	* server/META-INF/java/TODO: Obsolete.

	* server/php/java/bridge/Parser
	(parse): parse header from pfsockopen().
	
	* server/php/java/servlet/fastcgi/Channel.java,server/php/java/servlet/fastcgi/ChannelName.java,server/php/java/servlet/fastcgi/ConnectException.java,server/php/java/servlet/fastcgi/ConnectionException.java,server/php/java/servlet/fastcgi/ConnectionPool.java,server/php/java/servlet/fastcgi/DefaultInputStream.java,server/php/java/servlet/fastcgi/DefaultOutputStream.java,server/php/java/servlet/fastcgi/Factory.java,server/php/java/servlet/fastcgi/FastCGIInputStream.java,server/php/java/servlet/fastcgi/FastCGIOutputStream.java,server/php/java/servlet/fastcgi/FastCGIServlet.java,server/php/java/servlet/fastcgi/FCGIProcess.java,server/php/java/servlet/fastcgi/NPChannel.java,server/php/java/servlet/fastcgi/NPChannelName.java,server/php/java/servlet/fastcgi/RandomAccessFileInputStream.java,server/php/java/servlet/fastcgi/RandomAccessFileOutputStream.java,server/php/java/servlet/fastcgi/SocketChannel.java,server/php/java/servlet/fastcgi/SocketChannelName.java: New files, refactored from FastCGIServlet and ConnectionPool.

	* server/php/java/servlet/FastCGIServlet.java: Removed
	
	* server/php/java/servlet/ConnectionPool.java: Removed

	* server/php/java/bridge/Util.java
	(appendParam, appendArgs): Display the parameter and argument
	type.

	* server/WEB-INF/cgi/launcher.sh: New file

	* server/WEB-INF/cgi/launcher.exe: New file

	* server/WEB-INF/cgi/launcher.c: New file

	* server/WEB-INF/cgi/php-fcgi.sh: Removed
	
	
2007-02-10  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/CGIServlet.java
	(getRealPath): New function to workaround a bug in BEA WebLogic
	
	* server/php/java/servlet/PhpCGIServlet.java
	(startFcgi): Set the environment variable REDIRECT_STATUS="200",
	to appease the PHP FastCGI server.
	
2007-01-21  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/ConnectionPool.java
	(maxRequests, counter): New variables
	(close): mark as closed if we know that the current PHP instance
	has terminated, i.e. counter==php_fcgi_max_requests
	(ConnectionPool, Connection, createNewConnection): Pass
	maxRequests

	* server/php/java/servlet/FastCGIServlet.java
	(php_fcgi_max_requests_number): New global from
	PHP_FCGI_MAX_REQUESTS
	(findCGI): Pass maxRequests to pool
	(doRun): Report an error if a PHP instance from the PHP FastCGI
	server terminated unexpectedly. But do not pass this error to the
	client, as the administrator may have killed and re-started the
	PHP FastCGI server with a different PHP_FCGI_MAX_REQUESTS
	environment setting. -- In the future we should hard-code
	PHP_FCGI_MAX_REQUESTS to 5000.
	
	* README: Performance section added.

	* examples/search/lucene_search.php: Use java_values to speed up
	script execution, as described in the README.
	
	* server/META-INF/java/Client.inc
	(isAsync): New check, needed because the high level API must not
	use java_values, java_inspect, java_instanceof, java_cast,
	java_session_array, java_server_name, java_closure_array,
	java_begin_document, java_end_document directly.

	* server/META-INF/java/JavaProxy.inc
	(java_values, java_inspect, java_instanceof, java_cast,
	java_session_array, java_server_name, java_closure_array,
	java_begin_document, __sleep, java_ObjectIterator): These
	procedures cannot be used while in async ("stream") mode.
	(java_end_document): This procedure cannot be used when not in
	stream mode.

	* server/php/java/bridge/Snarf.java
	(writePhpJava): Added wrappers for java_values, java_inspect,
	java_instanceof, java_cast, java_session_array, java_server_name,
	java_closure_array, java_begin_document and java_end_document,
	because these cannot be used directly, see above checks in
	JavaProxy.inc. Users of the high level API must use e.g.:

	$result = java_lang_System::javaValues($resultList);

	instead of:

	$result = java_values($resultList);

	
	* server/META-INF/java/Java.inc
	(java_RuntimeException, java_IllegalArgumentException): Throw
	these exceptions instead of simply aborting the script.

	* itext4php.spec, lucene4php.spec: Version 1.2.0

	* server/php/java/bridge/Standalone.java
	(init): SERVLET_LOCAL is now default

	* server/php/java/bridge/http/HttpResponse.java
	(h2): Send the creation date, so that the script can be cached.
	
	* server/php/java/bridge/http/HttpServer.java
	(createThreadPool): New procedure
	(bind): Use our own createThreadPool procedure in order to avoid
	log messages at this stage.

	* server/php/java/script/InvocablePhpScriptEngine.java
	(eval): Create a dummy script instead of throwing an exception so
	that

	ScriptEngineManager m = new ScriptEngineManager();
	ScriptEngine e = m.getEngineByName("php-invocable");
	e.invoke("phpinfo", new Object[]{});
	System.exit(0);
	
	works as expected.

	* server/WEB-INF/cgi/php-fcgi.sh
	(read): the original bourne shell (*BSD) needs an argument to make
	the FastCGI SAPI work.

	* server/TestInstallation.java
	(start): Set the SERVER_PORT, needed by test.php

	* test.php: Do not hard code SERVER_PORT to 8080 so that the test
	can be used if a servlet engine is already running on port 8080.

	* server/META-INF/services/javax.script.ScriptEngineFactory:
	gcj doesn't like comments starting at col.> 0
	
	* VERSION, php-java-bridge.spec: Version 4.0.1
	
2007-01-14  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java
	(Invoke): The fix for PR1616498 was incorrect. Since version 3.2.1
	the bridge was not able to call static methods anymore: a cached
	Clazz1.invoke() was returned instead of Clazz2.invoke().

	* server/php/java/bridge/MethodCache.java
	(Entry): make sure that instanceOfClazz1.meth != Clazz1.meth and
	Clazz2.meth != Clazz1.meth.
	(hashCode, equals): check isStatic flag.

	
	* server/php/java/bridge/Util.java (createThreadPool): New procedure

	* server/php/java/bridge/JavaBridgeRunner.java
	(createInstance, createStandaloneInstance): set the standalone
	flag
	(doPut): Rewritten
	
	* server/php/java/bridge/http/HttpServer.java
	(HttpServer): Create thread pool, if possible.
	(Runner): New class
	(doRun): Use thread pool, if possible
	
	* VERSION, php-java-bridge.spec: Version 4.0.1rc5
	

2007-01-07  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/script/InvocablePhpScriptEngine.java
	(eval): Added missing ';' so that php 5.1.6 doesn't complain about
	and "unexpected "}" character anymore.
	
	* VERSION, php-java-bridge.spec: Version 4.0.1devel
	
2007-01-06  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/FastCGIServlet.java
	(FastCgiInputStream): check entire error string.

	* server/php/java/bridge/Util.java
	(ProcessWithErrorHandler,checkError): check entire error string
	
	
	The time between the open and first read/write must be less than
	1000ms, otherwise PHP marks the connection as invalid
	
	* server/php/java/servlet/ConnectionPool.java
	(ConnectionException): mark connection as closed.
	(setConnection,read,write,flush,close): mark on exception
	(reopen): new method
	(abort): removed
	(init): open the connection lazily
	(openConnection): open or reopen the connection lazily

	* server/php/java/servlet/FastCGIServlet.java
	(read): mark on exception
	(parseBody): the check is now obsolete
	
	* java/Client.java,java/GlobalRef.java,java/Java.java,java/JavaProxy.java,java/NativeParser.java,java/Options.java,java/Parser.java,java/Protocol.java,java/SimpleParser.java,java/README,java/TODO: Removed.

	* server/META-INF/java/Client.inc,server/META-INF/java/GlobalRef.inc,server/META-INF/java/Java.inc,server/META-INF/java/JavaProxy.inc,server/META-INF/java/NativeParser.inc,server/META-INF/java/Options.inc,server/META-INF/java/Parser.inc,server/META-INF/java/Protocol.inc,server/META-INF/java/SimpleParser.inc,server/META-INF/java/README,server/META-INF/java/TODO: moved here.
	
	* server/Makefile.am: add PHP files to JavaBridge.jar and
	JavaBridge.war.

	* INSTALL.ORACLE,INSTALL.WEBSPHERE: Removed

	* server/WEB-INF/web.xml: Removed Java Server Faces support

	* ABOUT.HTM: Removed

	* php-java-bridge.spec, debian/docs: Removed ABOUT.htm

	* server/test/TestInvocable.java: new File.

	* server/php/java/script/PhpScriptEngine.java: Don't implement Invocable.
	
	* server/php/java/script/InvocablePhpScriptEngine.java,
	server/php/java/script/InvocablePhpScriptEngineFactory.java: New
	files.

	
2006-12-21  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/Util.java (start): Start a "php-cgi" from the
	system path, if WEB-INF/cgi doesn't contain an executable.
	
	* server/TestInstallation.java: Rewritten.

	* server/php/java/bridge/JavaBridgeIllegalArgumentException.java:
	New class, needed for backward compatibility with JDK 1.4.

	* server/php/java/bridge/JavaBridge.java (coerce): throw
	JavaBridgeIllegalArgumentException to avoid a "no such method"
	exception on JDK 1.4 while throwing an IllegalArgumentException.

	* INSTALL.J2EE: Binary download doesn't contain any php_java.dll
	files anymore.
	
2006-12-16  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/IllegalArgumentException.java: Removed,
	see PR1616498

	* server/php/java/bridge/JavaBridge.java (Invoke): getClass(clazz)
	must return the class class, see PR1616498

	* tests.php5/testClass2.php: Test the above fix.
	
	* VERSION, php-java-bridge.spec: Version 3.2.1 released.
	
2006-12-03  Jost Boekemeier  <jostb@intern>

	* server/TestInstallation.java: Correct output. 	 
	  	 
	* server/WEB-INF/web.xml: Executable must be php-cgi.exe,
	otherwise IBM's launcher.exe fails. 	 
	  	 
	* php/java/bridge/Standalone.java: Display an option dialog, if 
	user has double-clicked on JavaBridge.jar. 	 
	(disclaimer): New procedure. 	 
	  	 
	* php/java/bridge/StandaloneGCC.java (javaUsage): Show disclaimer. 	 


2006-12-03  Jost Boekemeier  <jostb@intern>

	* api.c (session): Added optional parameter "lifetime" for
	compatibility with the pure PHP PHP/Java Bridge implementation.
	(get_closure): address must be unsigned long
	
	* java/JavaProxy.php (java_closure_array): address must be unsigned long

	* client.c (unlink_channel): the back-end needs the channel name

	* INSTALL.J2EE: PHP >= 5.2.0 users must use the pure PHP
	implementation. Or they must compile a php_java.dll or java.so
	themselfs.

	* install.sh.in: Make JavaBridge.jar executable, useful when using
	JDK 1.6 or above.

	* java/Options.php: version 1.1.0

	* java/Protocol.php (getWebAppInternal): New function.
	(redirect): No timeout.
	(sendAsyncData): Correct send size
	(writeULong): New procedure

	* protocol.c (ULong): New procedure.

	* java.c (cast): Added missing break statement so that
	java_cast($val,"double") works correctly.
	(MINFO): display secure channel

	* php-java-bridge.spec: Added required selinux-policy-devel needed by FC6

	* security/module/php-java-bridge.fc.in: Added missing newline at
	end of file, required by FC6.

	* server/javax/script/Invocable.java (invoke): Removed
	(invokeFunction, invokeMethod): Renamed from invoke. Change was
	necessary because Sun has renamed their API's. BTW: the name
	"invokeFunction" isn't right, it should be "invokeProcedure"...

	* server/php/java/faces/Script.java: Use new invokeFunction.

	* server/php/java/script/InteractiveScriptEngine.java (eval): Use
	new invokeFunction.

	* server/php/java/script/InteractiveScriptEngine.java (eval): Use
	java_cast instead of implicit cast to support the pure PHP
	implementation.

	* server/php/java/script/PhpScriptEngine.java (invokeFunction,
	invokeMethod): New procedures.

	* server/php/java/servlet/CGIServlet.java (init): Use slash, if
	appropriate.

	* server/php/java/servlet/ConnectionPool.java (ConnectException): New class
	(getOutputStream, getInputStream): removed
	(createOutputStream, createInputStream): New procedures.
	(abort): New procedure.

	* server/php/java/servlet/FastCGIServlet.java (destroy): Destroy fcgi_socket.
	(read, run): handle ConnectionException
	(parseBody): destroy the connection, if fcgi instance failed

	* server/php/java/servlet/PhpJavaServlet.java (getContextFactory):
	Use RemoteContextFactory, so that remote users cannot access the
	implicit web objects.

	* server/php/java/servlet/ServletContextFactory.java (setSession):
	Dummy, setSession is only useful for the RemoteContextFactory,
	i.e. Apache or IIS front-end.
	
	* server/php/java/servlet/RemoteContext.java,
	server/php/java/servlet/RemoteHttpSessionFacade.java,
	server/php/java/servlet/RemoteServletContextFactory.java: New
	files.
	
	* server/Makefile.am: Changed for gcc 4.2.

	* server/java.c: Removed
	
	* server/php/java/bridge/StandaloneGCC.java: New file, from java.c

	* server/php/java/bridge/Request.java (PhpArrayKey): Removed.

	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java
	(buildUrlArray): default ext dir is {user.home}/lib

	* server/php/java/bridge/Snarf.java (isRtJar): Support the Apple VM.
	
2006-09-10  Jost Boekemeier  <jostb@intern>

	* VERSION, php-java-bridge.spec: Version 3.1.8 released.
	
2006-09-09  Jost Boekemeier  <jostb@intern>

	* bind.c (use_wrapper): Only use the wrapper when we're called
	with super user privileges or when explicitly set with
	java.wrapper=...  Some JVM implementations open their binary to
	check the stack direction, such tests will fail when the
	permissions are apache/apache 6111 and the current user is not
	the apache user.
	(get_server_args): Always display the real java command.
	(is_socket_inet,linesep,readChannel): New functions
	(make_local_socket_info,start_server): Rewritten to allow channel
	negotiation.

	* client.c (setResultFromObject): Compatibility with our pure PHP
	implementation.
	(call_php_function): New function
	(handle_request): close and redirect are now virtual
	(get_mode,add_header,create_connection): extended header
	(override_ini_for_redirect): Check for secure channel
	(getEnvironmentFactory): New function
	(create_connection): Create secure or http channel

	* secure_protocol.c: New file
	
	* config.m4: Added secure_protocol.c

	* init_cfg.c.in (override_ini_from_cgi,init_cfg): Initialize secure
	channel.

	* java.c (cast,do_cast): Implemented java_cast for compatibility with
	our pure PHP implementation.

	* java_bridge.c (checkError): Check for cb_stack, otherwise PHP4
	users will not see exception warnings anymore.

	* LICENSE: Removed

	* COPYING: New file
	
	* php-java-bridge.spec: License changed from PHP to LGPL

	* php-java-bridge.spec: Install our pure PHP implementation.

	* protocol.c (get_context,end,end_session,end_connection): Use the
	extended header.
	(check_session,close,redirect): Methods are now virtual
	(Exception,PairBegin_s): encode strings as they may contain
	special chars
	(destruct): New virtual method.
	(recycle_connection): shut down async mode.
	(init_environment): New procedure
	(createSecureEnvironment): Removed, see secure_protocol.c
	(createEnvironment): New function
	
	* test.php: Rewritten

	* server/TestInstallation.java: Extract and check the pure PHP
	implementation

	* server/itext4php.spec, server/lucene4php.spec: Version 1.0 

	* server/natcJavaBridge.c (java_bridge_main): Do not abort when an
	exception occurs, for example if SERVLET:8080 is already bound.

	* server/WEB-INF/web.xml: Re-added servlet_log_level for backward
	compatibility. The servlet_log_level changes the request log
	level.

	* server/WEB-INF/cgi/php-cgi-i386-linux.ini: Set include_path for
	the pure PHP implementation.

	* server/WEB-INF/cgi/php-fcgi.sh: Use read instead of cat. When
	the bash waits for a child, the wait cannot be interrupted and all
	signals are lost(!).

	* server/php/java/bridge/Base64EncodingOutputBuffer.java: New file.

	* server/php/java/bridge/BaseThreadPool.java
	(end): Clean the class loader and the VM class loader, otherwise
	we'll run into problems because two assignment incompatible class
	versions are used by the this loader, one from the VM cache,
	returned via Class.forName, and the other one from the dynamic
	loader chain.
	(checkReserve): Corrected test

	* server/php/java/bridge/DynamicClassLoader.java
	(init,copyInto): New procedures
	(DynamicClassLoader): Must clean the VM cache.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(clearVMLoader): New function

	* server/php/java/bridge/HexOutputBuffer.java: New file

	* server/php/java/bridge/JavaBridge.java
	(initLog): New procedure
	(weight): Request.PhpExactNumber -> Integer is allowed
	(MetaClassIterator): New class
	(getClassInterator): check for MetaClassIterator
	(reset): Only warn if logLevel>3
	(offsetExists,offsetGet,offsetSet,offsetUnset): Accept all types
	and then call the appropriate method.
	(createResponse): New function
	
	* server/php/java/bridge/JavaBridgeClassLoader.java
	(setClassLoader): Check if reset() was the first statement in a
	script and reset the loader.

	* server/php/java/bridge/http/ContextFactory.java
	(ICredentials): New interface
	(get): Check the credentials
		
	* server/php/java/bridge/http/ContextServer.java
	(getCredentials): New method which returns the credentials for the
	PipeContextServer or a dummy for the SocketContextServer.

	* server/php/java/bridge/http/ContextRunner.java

	* server/php/java/bridge/JavaBridgeRunner.java: Rewritten to allow
	users to start the built in servlet engine with: java -jar
	JavaBridge.jar SERVLET:8080

	* server/php/java/bridge/Standalone.java 
	(checkServlet): New procedure
	(init): Check for SERVLET:port

	* server/php/java/bridge/DefaultOptions.java: New class

	* server/php/java/bridge/StandardOptions.java: New Class

	* server/php/java/bridge/Options.java: Rewritten

	* server/php/java/bridge/Parser.java (initOptions): Rewritten

	* server/php/java/bridge/Request.java
	(SimpleContext,Context): New classes
	(getContext): New function
	(Arg): Create context according to Options.

	* server/php/java/bridge/Response.java: Rewritten to allow Base64
	and responses without context ID's, needed by the pure PHP
	implementation.

	* server/php/java/bridge/Util.java (getShortName): New function.
	
	* server/php/java/bridge/Util.java (parseBody),
	server/php/java/servlet/CGIServlet.java (run),
	server/php/java/servlet/FastCGIServlet.java (parseBody): Do not
	write an empty record at the end.

	* server/php/java/bridge/http/HttpRequest.java,
	server/php/java/bridge/http/HttpServer.java: Rewritten to allow
	GET,POST,PUT.

	* server/php/java/faces/PhpFacesScriptEngine.java
	(setNewContextFactory): check for HTTPS and allocate a secure
	channel, if necessary.
	
	* server/php/java/script/PhpScriptEngine.java
	(setNewContextFactory): check for HTTPS and allocate a secure
	channel, if necessary.

	* server/php/java/script/PhpScriptLogWriter.java: New class
	
	* server/php/java/script/PhpScriptContext.java
	(getWriter): Check if this is a standalone server.

	* server/php/java/servlet/PhpCGIServlet.java (startFcgi): Use
	:port instead of host:port so that PHP binds to all available
	interfaces, including loopback, if php.java.bridge.promiscuous=true
	
2006-08-13  Jost Boekemeier  <jostb@intern>

	* PROTOCOL.TXT: Context IDs are optional.
	
	* protocol.c
	(get_context),server/php/java/bridge/http/ContextRunner.java
	(readLength): Contexts may be larger than 256 chars.

	* server/php/java/servlet/PhpJavaServlet.java (init): Removed
	servlet_log_level. The bridge has only a global
	php.java.bridge.default_log_level which can be set via a system
	property and a per-request log level which can be specified in the
	php.ini file. The servlet must not alter the global log level and
	it cannot modify the request log level either.

	* server/WEB-INF/web.xml: Removed servlet_log_level.

	* test.php: Use the pure PHP implementation.

	* COPYING: New file.
	
	* javabridge/Client.php, javabridge/GlobalRef.php,
	javabridge/IDocHandler.php, javabridge/Java.php,
	javabridge/JavaProxy.php, javabridge/Parser.php,
	javabridge/Protocol.php, javabridge/README: New files.

	* VERSION, php-java-bridge.spec: Version 3.1.8devel

2006-08-06  Jost Boekemeier  <jostb@intern>

	* sio.c, sio.h: New files.
	
	* protocol.c (close_connection, end_async, begin_async): Close the
	async buffer upon rshutdown.
	
	* config.m4, server/configure.in: Added sio.c and sio.h
	
	* server/php/java/bridge/http/ContextFactory.java
	(addNext): URLEncode the web context, otherwise the bridge will
	fail on US Windows systems where the app path contains a space:
	"c:\program files\tomcat\...".

	* config.m4: Set the mono binary to "mono", --with-mono was given.

	* install.sh.in, php-java-bridge.spec,
	security/module/php-java-bridge.te,
	security/module/php-java-bridge-tomcat.te: Separate SEL context
	for tomcat.

	* examples/php+jsp/excel.php: Use standard mime type.

	* server/WEB-INF/cgi/php-fcgi.sh: Avoid warning.
	
	* VERSION, php-java-bridge.spec: Version 3.1.7 released

2006-08-05  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java (setException): Only
	print a stack trace if logLevel >= DEBUG.
	
	* api.c (get_closure): php 6.0.0

	* java_bridge.c (writeArgument): php 6.0.0

	* java.c (iterator_current_key): php 6.0.0

	* binc.c (exec_vm): Close all file descriptors to avoid SEL
	messages.

	* client.c (get_mode): Removed ext_java_compatibility option

	* config.m4: Always compile bridge to native code.

	* init_cfg.c.in (update_compatibility): Removed ext_java_compatibility

	* java.c (OnIniExtJavaCompatibility): Removed ext_java_compatibility

	* install.sh.in, php-java-bridge.spec: Removed standalone
	back-end.
	
	* php-java-bridge.spec: Always create native code

	* security/module/php-java-bridge.fc.in,
	security/module/php-java-bridge.te,
	security/php-java-bridge.fc.in, security/php-java-bridge.te: Added
	rules for the native component.

	* server/configure.in, server/Makefile.am: Always compile to
	native code.

	* server/php/java/bridge/Snarf.java (writeHeader): Constructor
	must return the wrapper class or Foo()->createFoo($val) fails
	because $val is not a java value.

	* unsupported/itext.jar: New library

	* examples/office/itext_pdf.php: New example

	* examples/search/lucene_search.php: Rewritten
	
	* server/itext4php.spec, server/lucene4php.spec: New files
	
2006-07-26  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/FastCGIServlet.java 
	(doRead): php 5.1.4 splits fastcgi packets.

	* server/php/java/bridge/Util.java
	(JAVABRIDGE_PROMISCUOUS): New const
	
	* server/php/java/bridge/http/PipeContextServer.java
	(pipeServer): Switch off the pipe communication if the system
	property php.java.bridge.promiscuous=true

	* server/php/java/bridge/http/SocketContextServer.java
	(BIND_PORT): new const
	(SocketContextServer): Bind to all available network interfaces
	when php.java.bridge.promiscuous=true

	* server/php/java/servlet/PhpJavaServlet.java
	(doPut): Use the SocketContextServer for promiscuous. Otherwise try
	to use the HTTP tunnel (if allowed) or fail.
	
2006-07-22  Jost Boekemeier  <jostb@intern>

	The new connection sharing feature introduced in 3.1.6 wasn't
	reliable. When Apache/IIS was used as a front-end and a J2EE
	server as a back-end, it was necessary to switch off
	java.persistent_connections: The X_JAVABRIDGE_CONTEXT and
	X_JAVABRIDGE_CONTEXT_DEFAULT did not carry any information about
	the web context so that the client could confuse contexts and
	pass a context to an unrelated ContextServer.
	
	* server/php/java/bridge/http/ContextFactory
	(addNew,addNext,ContextFactory): Create a unique ContextFactory
	for each web context.
	(recycle): New method.

	* server/php/java/bridge/http/ContextRunner
	(checkRunner,recycle): rewritten
	(getChannel): New function.

	* server/php/java/bridge/http/ContextServer.java
	(start,schedule): rewritten
	(recycle): New method

	* server/php/java/bridge/JavaBridge.java
	(setIO): Removed
	(recycle): recycle sessionFactory

	* server/php/java/bridge/Request.java
	(setBridge): rewritten
	(resetBridge): new procedure
	(recycle): reset the bridge

	* server/php/java/servlet/PhpJavaServlet.java
	(handleSocketConnection): Recycle, if necessary, *before* we open
	the comm. link

	* server/php/java/bridge/JavaBridgeRunner.java
	(parseBody): Recycle, if necessary, before we open the comm. link

	* java.c (shutdown_connections): destroy default, otherwise
	X_JAVABRIDGE_CONTEXT_DEFAULT will send garbage after the
	connection has been aborted.

	* protocol.c (finish,flush): set connection_is_closed after
	checking the r/w channels.
	
	
	* java.c (MINIT): gcc 2.x doesn't like conditionals in a macro
	application.

	* client.c
	(create_pipe,create_pipes,init_channel,init_channel_raw): Remove
	obsolete arg so that it can compile with ZTS on Unix.

	* server/php/java/bridge/ChainsawLogger.java (configure): Remove
	other appenders.

	* server/natcJavaBridge.c (openLog): Do not discard stdin.

	* VERSION, php-java-bridge.spec: Version 3.1.6.1 released
	
2006-07-18  Jost Boekemeier  <jostb@intern>

	* client.c
	(unlink_channel): new from destroy channel
	(destroy_channel): removed
	(redirect): unlink the channel directly after the server and
	client are connected. Unix will automatically remove the inodes
	when the pipes are not needed anymore.

	* bind.c
	(rmtmpdir): Display a notice if the tmpdir is not empty, which
	means that we remove a comm. link which is not (yet) connected.

	* server/php/java/bridge/http/PipeContextServer.java 
	(start): No need to check if runner is really null.

	* server/php/java/bridge/http/SocketContextServer.java
	(start): Fixed a typo: The start signature has changed in
	3.1.6devel, so that this method was not called anymore. Instead
	the parent method from PipeContextServer was called, which returns
	false on Windows. This means that the bridge could not use any
	context server and had to send one statement after the other
	through the HTTP tunnel, so the Windows version was very slow. --
	We cannot use @override to avoid these problems because we still
	support jdk1.4.
	
	* VERSION, php-java-bridge.spec: Version 3.1.6 released
	
2006-07-17  Jost Boekemeier  <jostb@intern>

	* config.m4, bind.c (makedtemp): Added for Solaris.

	* bind.c (fcgi_rmtmpdir): Added for FreeBSD.
	
	* VERSION, php-java-bridge.spec: Version 3.1.6devel1 released
	
2006-07-16  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/http/ContextRunner.java
	(checkRunner,put,remove,recycle): New procedures.

	* server/php/java/bridge/http/ContextServer.java
	(ChannelName,Channel): rewritten.

	* server/php/java/bridge/http/IContextFactory.java
	(ChannelName,Channel): rewritten.

	* server/php/java/bridge/http/PipeContextServer.java
	(Channel,start,schedule): rewritten
	
	* server/php/java/bridge/http/SocketContextServer.java
	(Channel,start,schedule): rewritten

	* server/php/java/bridge/JavaBridge.java (setIO): New method.

	* server/php/java/bridge/JavaBridgeRunner.java
	(getHeader): New method.
	(parseBody): Rewritten

	* server/php/java/bridge/Parser.java (setBridge): New method.

	* server/php/java/bridge/Request.java (setBridge): New method.	
	
	* server/php/java/bridge/Response.java (setBridge): New method.	

	* server/php/java/servlet/FastCGIServlet.java
	(init, findCGI,isJavaBridgeWc): check for shared_fast_cgi_pool
	option.

	* server/php/java/servlet/PhpCGIServlet.java
	(startFCGI,delegateOrStartFCGI,delegateFCGI,findCGI): check for
	shared_fast_cgi_pool option.
	(handleSocketConnection): Rewritten.
	(getChannel): Removed
	(getHeader): New function.
	
	* client.c (remove_pipe,share_connection,redirect): New
	procedures.
	(begin_header): Check for X_JAVABRIDGE_CONTEXT_DEFAULT.
	(handle_request): handle shared connections for different web
	contexts.
	(adjust_servlet_environment): share servlet_ctx
	(add_header): New procedure.
	(init_channel,destroy_channel,create_pipe,create_pipes,unlink_channel,init_channel_raw,get_channel):
	handle non-shared
	(getDefaultSessionFactory): New function.
	
	* java.c (alloc_globals_ctor): Initialize shared.

	* protocol.c
	(end,end_session,end_connection): Send
	X_JAVABRIDGE_CONTEXT_DEFAULT.
	(redirect): Rewritten
	(close_connection): Close only non-shared.
	(createSecureEnvironment): Init flags.

	* server/WEB-INF/web.xml: added shared_fast_cgi_pool option.

	* VERSION, php-java-bridge.spec: Version 3.1.6devel released
	
2006-07-09  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args): Do not discard cfg_logFile, it is
	needed by the back-end. The java.log_file option should now work
	again.

	* bind.c (rmtmpdir, mktmpdir): New functions. Create comm. pipes
	in a sub directory and clean the sub-directory, if the parent is
	restarted. -- Both the FastCGI and Apache SAPI simply kill all
	childs w/o calling their mshutdown procedures, so the parent must
	handle the cleanup on behalf of its childs.

	* java.c (alloc_globals_ctor): Childs must not clean tmpdir.
	(MINIT, MSHUTDOWN): Create/destroy the tmpdir for the comm. pipes.
	
	* config.m4: Set the JAVA_SOCKETNAME to 9267, if JNI is not
	available, for example if the user runs a 32 bit JVM on a 64 bit
	machine.

	* security/module/php-java-bridge.te, security/php-java-bridge.te:
	Added SEL rules for JAVA_SOCKETNAME=9267
	
	* examples/search/lucene_search.php: Create the index files in tmp
	and check if we have permission to read the current working
	directory.

	* install.sh.in: Don't remove RunJavaBridge, it is needed by
	Security Enhanced Linux.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(makeContextDir): Rewritten for windows.
	(loadClass): Do not print the java_require path, the user should
	already know what has been required.

	* server/php/java/bridge/http/ContextFactory.java
	(remove): Remove only live contexts
	(recycle): Remove dead context
	(destroyAll): Remove dead context
	(removeOrphaned): New procedure removes dead contexts

	* server/php/java/bridge/JavaBridge.java
	(updateLibraryPath): Rewritten to make
	mono_require("$here/some.dll") possible.

	* tests.mono+net/load_assembly.php: require dll from the current
	working directory.
	
	* server/php/java/bridge/Standalone.java
	(monoUsage, javaUsage): New procedures.
	(usage): Rewritten.

	* server/php/java/bridge/Util.java 
	(IS_MONO): New global
	(MonoOutputStream): New class
	(redirectMonoOutput, redirectJavaOutput): New procedures
	(redirectOutput): Rewritten to use mono or java log.

	* server/php/java/servlet/ConnectionPool.java
	(openConnection): Same mistake as we've had with the ThreadPool,
	see entry from 2005-08-23. The pattern: if(freeList.isEmpty())
	wait() is always wrong, this does not prevent another thread
	from entering the critical section and to take the element from
	the freeList before the notified thread can leave wait().

	* server/php/java/servlet/FastCGIServlet.java
	(fcgi_channel, fcgi_socket): New globals
	(selectFCGIChannel): New procedure
	(init,destroy): Each context has its own FastCGI server above
	port# 9667.
		
	* server/php/java/servlet/FastCGIServlet.java
	(delegateOrStartFCGI, delegateFCGI): Removed.
	(startFcgi, waitForDaemon, findCGI): Use the allocated FCGI
	server, do not delegate to the server allocated by the JavaBridge
	context.

	* server/php/java/bridge/Request.java
	(AbortException): New class
	(handleSubRequests): Throw AbortException to quickly reach the
	top-level handleRequests loop, if we've received a client abort.
	(handleRequests): Handle AbortException.

	* server/php/java/bridge/JavaBridge.java
	(Invoke, GetSetProp, CreateObject, ObjectToString): pass AbortException
	
	* tests.php5/nested_callbacks.php, tests.php5/nested_callbacks_abort.php, tests.php5/nested_callbacks2.php: New tests.
	
	* VERSION, php-java-bridge.spec: Version 3.1.5 released
	
2006-07-02  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/Standalone.java: New file, refactored
	from JavaBridge.java

	* server/META-INF/MANIFEST.MF: Use Standalone as
	the main class to speed up cli startup.

	* server/php/java/bridge/JavaBridge.java (objectDebugDescription):
	Rewritten.

	* server/php/java/bridge/Util.java (BACKLOG): Changed to static
	final to speed up cli startup.

	* server/php/java/bridge/TCPServerSocket.java,
	server/php/java/bridge/LocalServerSocket.java: Don't reference
	Util, return the socket # as early as possible.

	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java
	(buildUrlArray): Add Util.DEFAULT_EXTENSION_DIR and
	extension_dir/lib directories to the path.
	
	* java.c (alloc_globals_ctor): Initialize the cb_stack, otherwise
	MSHUTDOWN may crash on OS where the ctor does not return
	initialized memory, Solaris for example.
	
	* VERSION, php-java-bridge.spec: Version 3.1.4 released
	
2006-06-27  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/PhpCGIServlet.java (CGI_SSL_CHANNEL): New constant.
	
	* server/php/java/faces/PhpFacesScriptEngine.java
	(setNewContextFactory), server/php/java/servlet/PhpCGIServlet.java
	(setCGIEnvironment): Use constant.
	
	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(getUrlClassLoaderFactory): Added our own cache algorithm. In the
	SUN implementations the URLClassLoader findClass method simply
	calls defineClass without any further checks.  This will fail with
	a DuplicateClassDefinition, if this URLClassLoader has already
	loaded the class. This fix corrects the bug introduced in the
	previous change (for 3.1.2).
	
	* VERSION, php-java-bridge.spec: PHP/Java Bridge version 3.1.3
	replaces version 3.1.2
	
2006-06-25  Jost Boekemeier  <jostb@intern>

	* api.c (values): Leave the value alone, if it is not an object.

	* java.c 
	(make_local_socket_info): Moved to bind.c 
	
	* bind.c
	(make_local_socket_info): New from java.c
	(get_server_args, start_server): The JavaBridge back-end now
	selects the appropriate channel and writes it to stdout. Read the
	selected channel so that the bridge can run as a sub-component of
	IIS, which usually starts two instances of the bridge.

	* client.c
	(call_user_cb, handle_exception, setResultFromApply), java.c
	(RSHUTDOWN, exception_handler, check_php4_exception,
	allocate_php4_exception, call_with_handler, call_with_params,
	call_with_exception_handler): java_closures can now be nested.

	* client.c (handle_cached, handle_request): Return status.

	* parser.c (parse, parse_header): Return status

	* protocol.c (flush): Check status so that the bridge can
	re-connect, if the back-end has been restarted.

	* server/configure.gnu.in, server/configure.in: Added test for Mac

	* server/Makefile.am, server/configure.in: Use -source 1.4 and -target 1.4, 
	if jre wasn't specified during ./configure --with-java=<jdk>[,<jre>].
	
	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(getUrlClassLoaderFactory): Do not use the parent cache, which
	uses the global getLoadedClass(name), to avoid problems with
	cached classes from other loaders. The loader entry now uses a private,
	per-loader-entry cache.

	* server/php/java/bridge/IllegalArgumentException.java: New class.

	* server/php/java/bridge/JavaBridge.java (coerce): Throw an
	IllegalArgumentException, if an array could not be coerced.
	(init): If log file starts with @, check for chainsaw logger

	* server/php/java/bridge/JavaBridge.java
	(init): Write the selected channel to stdout.

	* server/php/java/bridge/Log4jLogger.java (createLog4jLogger): New procedure
	(Log4jLogger): Removed public constructor
	
	* server/php/java/bridge/ChainsawLogger.java (createChainsawLogger): New procedure
	(ChainsawLogger): Removed public constructor

	* server/php/java/bridge/Request.java (handleSubRequests): Handle nested closures.

	* server/php/java/bridge/Response.java (copyResponse): New method.

	* server/php/java/bridge/Util.java (stringValueOf): New
	procedure. Use this procedure instead of String.valueOf(ob),
	because String.valueOf(ob) does not necessarily return the string
	representation of ob, e.g. ob is a dynamic proxy with a toString()
	method that returns null.

	* VERSION, php-java-bridge.spec: Version 3.1.2 released
	
	
2006-06-20  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(equals): Check for null values. Fixes PR1509111.
	(JarLibraryPath): Do not store an invalid entry.

	* config.m4 (check_fast_tcp_sockets), php_java.h: Removed
	incorrect and obsolete autoconf test.

	* VERSION, php-java-bridge.spec: PHP/Java Bridge version 3.1.1
	replaces version 3.1.0.

	
2006-06-17  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/FastCGIServlet.java
	(parseBody): Destroy the physical connection, if an exception
	occured, the FCGI ABORT command doesn't seem to work. For example
	on FC5 the tomcat implementation is based on GNU "Java". GCC
	version 4 uses a "JIT" compiler which seems to compile the entire
	JavaBridge.war archive to native code while the request is
	running. This takes several seconds and causes the Firefox browser
	to time out after 15 seconds. After "JIT" compilation the servlet
	engine detects that the browser is gone and throws a
	ConnectionAbort Exception. This clears the Java side of the FCGI
	pool, but not the associated PHP FastCGI instance; PHP keeps the
	generated data. When the next request reaches this instance, PHP
	would deliver this data.
	
	* server/php/java/servlet/CGIServlet.java
	(getLocalName): Obsolete

	* server/php/java/servlet/PhpCGIServlet.java
	(setCGIEnvironment): Use getServerName instead of getLocalName, we
	need the official server name, on FC5 tomcat returns 127.0.0.1 for
	the local name.
	
	* php_java_snprintf.h: We must destroy the snprintf definition
	from PHP so that we can use php_ap_snprintf, if available.

	* java.c
	(return_msc_structure): New function.
	(MINIT): Use return_msc_structure for compatibility with MSVC
	compiled PHP binaries.
	
	* java.c (java_call_user_function_ex): New function, needed for
	MSVC compiled binaries.

	* server/php/java/servlet/ConnectionPool.java (connect): New from
	bind, correct name.
	(bind): Removed

	* VERSION, php-java-bridge.spec: Version 3.1.0 released

2006-06-16  Jost Boekemeier  <jostb@intern>
	
	* README, NEWS, server/php/java/bridge/Util.java 
	(DEFAULT_CGI_LOCATIONS): Changed c:/php5 to c:/php.
	
	* api.c
	(values): Fixed a bug that caused a conversion from array to
	object: In PHP 4 java_values(array()) returned an object instead
	of the passed array.
	
	* java.c 
	(can_reconnect): New function.
	(API_CALL): Only reconnect when the first statement failed.
	
	* server/php/java/bridge/FastCgiServlet.java
	(getError): New procedure.
	(doRead): Save error so that the communication completes. Avoids a
	problem that caused the abortion of the FastCGI channel because
	bytes from the previous communication were left in the buffer.
	(parseBody): throw saved error.

	* server/php/java/servlet/PhpCGIServlet.java
	(setCGIEnvironment): Not all ServletEngines support
	getRemotePort().

	* server/php/java/servlet/ServletContextFactory.java
	(ServletContextFactory): Store the request.

	* tests.php5/is_null.php: Do not test features that are not
	available.

	* server/configure.in, config.m4: Check for "ar" before invoking
	"check_jni"

	* Makefile.frag, server/Makefile.am: Create stamp, needed for check_ar
	
	* tests.m4/java_check_jni.m4: Don't test jni, if we know that "ar"
	is not available.

	* examples/php+jsp/documentClient.php: Check result.

	
2006-06-14  Jost Boekemeier  <jostb@intern>

	* install.sh: Removed

	* install.sh.in: New file from install.sh
	
	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java
	(buildUrlArray): The loader fix for mono broke the fix for
	PR1502480.

	* server/php/java/bridge/SessionTimer.java (SessionTimer): Do not
	block the termination thread.
	
	* VERSION, php-java-bridge.spec: Version 3.1.0rc8 released
	
2006-06-12  Jost Boekemeier  <jostb@intern>

	* server/configure.in: Switch off unix domain sockets, if ar is
	not available.

	* examples/php+jsp/documentClient.php: Catch
	SessionBeanTimeoutException and display an error.

	* NEWS, README, INSTALL.LINUX, INSTALL.WINDOWS, install.sh,
	server/php/java/bridge/JavaBridge.java (checkOption): Renamed --snarf
	to --convert.

	* server/php/java/bridge/Snarf.java (getFile): Use base, if it
	exists. The previous code created the PHP classes in the current
	directory, if "java -jar JavaBridge --convert /usr/share/pear" was
	called without additional jar files

	* client.c (begin_header): Use strcasecmp instead of strcmp, some
	application servers change the keys we send.
	
	* VERSION, php-java-bridge.spec: Version 3.1.0rc7 released
	
2006-06-11  Jost Boekemeier  <jostb@intern>

	* server/configure.in, server/Makefile.am, config.m4: --with-mono
	has been changed to require a directory which contains ikvmc.exe
	and support dlls. The ikvmc.exe and ICSharpCode.SharpZipLib.dll
	IKVM.AWT.WinForms.dll IKVM.GNU.Classpath.dll IKVM.Runtime.dll are
	now included.
	
2006-06-10  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/Snarf.java
	(writeHeader, writePhpJava): prefix all magic functions with
	__java.
	
	* tests.php4/servlet_connection_re-open.php: Removed, servlet can
	be tested with php5 as well.
	
	* php_java.h: Must disable sending hex numbers in PHP4, because
	PROTOCOL.TXT doesn't have a way to send hex numbers, if backward
	compatibility is enabled.
	
	* INSTALL.MONO+NET: Removed, users must compile the Mono/.NET
	back-end, see README.MONO+NET.
	
	* test.php4: Removed.

	* test.php: Rewritten to work with php4

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(hashCode, equals, toString): New methods.
	(loadClass): Display the current java_require() path
	
	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java 
	(buildUrlArray): PR1502480
	
	* server/php/java/bridge/JavaBridge.java 
	(init): PR1502480
	(setJarLibraryPath): convert extensionDir into atom.
	
	* VERSION, php-java-bridge.spec: Version 3.1.0rc6 released

2006-06-08  Jost Boekemeier  <jostb@intern>

	* api.c (serialize, deserialize): Fixed typo.

	* init_cfg.c.in (init_socket): Avoid warning.

	* install.sh: rewritten.

	* java_bridge.c
	(protocol_error): removed, this message was misleading.
	(call_function_handler): When the server thread throws an
	exception outside of Invoke, GetSetProp and CreateInstance, this
	means that the back-end has a bug. If this happens, PHP receives
	an empty response from the server: Terminate the script
	immediately and display error code 98.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(EMPTY_PATH, JarLibraryPath): New const/class.
	(checkJarLibraryPath): New procedure.
	(updateJarLibraryPath): Split into checkJarLibraryPath and
	updateJarLibraryPath. In previous versions the library path was
	checked outside of one of the Invoke, GetSetProp, CreateInstance
	methods, so that the exception could not be reported to the client,
	see error code 98 above.

	* server/php/java/bridge/SimpleJavaBridgeClassLoader.java: New
	class from JavaBridgeClassLoader.
	(updateJarLibraryPath): check the library path immediately,
	otherwise we don't have a chance to report the failure to the
	client.
	
	* server/php/java/bridge/JavaBridgeClassLoader.java: Refactored to
	use SimpleJavaBridgeClassLoader.
	(checkCl): Throw an illegal state exception, if java_require() is
	used while using the HTTP tunnel.

	* server/php/java/bridge/Log4jLogger (Log4jLogger): Use
	SimpleJavaBridgeClassLoader; the logger doesn't care about the
	HTTP tunnel.

	* server/php/java/bridge/Snarf.java (run): Create php_Java.php in
	/usr/share/pear, not in the current working directory.
	(copyFile): Do not create corrupt jar files.

	* java.c (ini_override): New global
	(OnIniHosts, OnIniServlet, OnIniSockname): Do not update, if the
	CGI binary has received X_JAVABRIDGE_OVERRIDE_HOSTS. The previous
	fix for HTTPS support broke the windows version. On windows PHP
	calls the OnIni callbacks three times; in register_ini_entries,
	which is correct, and two times after minit, which is at least
	inefficient and obsolete, -- effectively reverting our changes.
	
	* VERSION, php-java-bridge.spec: Version 3.1.0rc5 released

2006-06-07  Jost Boekemeier  <jostb@intern>

	* client.c (override_ini_for_redirect): Fixed memory corruption.
	
	* binc.c (check_policy, get_server_args): Correct the path
	"ext\dir\/JavaBridge.jar" problem on windows.
	
	* ini_cfg.c.in (update_hosts, update_servlet, update_socketname,
	update_compatibility, update_persistent_connections): New from
	java.c
	
	* java.c (OnIniPersistentConnections, OnIniServlet, OnIniSockname,
	OnIniExtJavaCompatibility): Use new procedures. 

	* ini_cfg.c.in (override_ini_from_cgi): Use update_* directly
	instead of zend_alter_ini_entry to make the changes permanent. --
	The zend_alter_ini_entry procedure saves the old value and
	restores it after request shutdown, this makes it impossible to
	keep the changes for all further requests. Corrects the incorrect
	status report, "not running".

	* VERSION, php-java-bridge.spec: Version 3.1.0rc4 released
	
2006-06-06  Jost Boekemeier  <jostb@intern>
	
	* server/php/java/servlet/FastCGIServlet.java (checkCgiBinary,
	findCGI), server/php/java/servlet/FastCGIServlet.java (findCGI):
	Set correct sCGIFullPath, otherwise getWorkingDirectory() will
	fail and the php-cgi wrapper will return a blank page because it
   	cannot not find the cgi executable in its working directory.
	(getCommand, init): Removed
	(fcgiIsConfigured): New variable
	(findCGI): Switch off the FCGI servlet, if we receive a
	ConnectionException from the FCGI server pool.

	* server/php/java/servlet/ConnectionPool.java
	(bind, getInputStream, getOutputStream, setConnection, read,
	close, write, flush, init, Connection, ConnectionPool,
	createNewConnection, openConnection): Throw a ConnectionException
	instead of an IOException: A ConnectionException should be fatal,
	but an IOException is harmless, it may appear when the client (the
	internet browser) closes the connection.
	
	* server/php/java/servlet/PhpCGIServlet.java (setCGIEnvironment):
	Do not set X_JAVABRIDGE_OVERRIDE_HOSTS, if this is a HTTPS
	request.

	* server/WEB-INF/cgi/php-cgi-i386-linux.ini: Added java.servlet
	and java.hosts, for HTTPS requests.
	
2006-06-05  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/BaseThreadPool.java (init): Fixed typo.
	
	* examples/search/lucene_search.php, examples/search/README: New
	files
	
	* api.c
	(construct_class, call, set, offsetExists, offsetGet, offsetSet):
	Avoid memory leak.
	(construct_no_arg, construct_array, construct): refactored from
	construct.

	* install.sh: Install PHP classes.

	* php_java_lib/JPersistence.php, php_java_lib/JSession.php: use
	is_null() to test if the value is null.

	* server/php/java/bridge/Snarf.java: New class

	* server/php/java/bridge/JavaBridge.java (checkOption, init, usage):
	call Snarf, if called with java -jar JavaBridge.jar
	--convert.

	* unsupported/lucene.jar: New file.

	* VERSION, php-java-bridge.spec: Version 3.1.0rc3 released
	
	
2006-06-03  Jost Boekemeier  <jostb@intern>
	
	* PROTOCOL.TXT
	All unsigned long values (e.g. object handles) are now
	transferred in hex: <L v="hexVal" p=O i="hexVal"/>
	(Finish): New protocol request for persistent connections.
	(Long): Added predicate for signum
	(Options): Header 01 means: encode unsigned values in hex
	
	* api.c, api.h: New files.

	* bind.c (check_policy): New procedure
	(get_server_args): Use -Dphp.java.bridge.base and
	-Djava.security.policy instead of -Djava.awt.headless, if
	java.security_policy is set in the php.ini file.
	(CFG_JAVA_INPROCESS): Removed, configure doesn't use it anymore.

	* client.c (setResultFromLong): Pass signum, according to protocol.
	(GET_LONG): use strtoul or strtol accordingly
	(GET_RESULT): use strtoul
	(get_mode): Send header 01, if php version => 5.
	(try_connect_to_server): Rewritten
	(clone_cfg, destroy_cloned_cfg): Rewritten
	(passivate_connection, activate_connection): New procedures

	* config.m4: Added test for fast tcp sockets, added api.c.

	* init_cfg.c.in: Initialize persistent connections and policy.

	* install.sh: Rewritten

	* java.c: Refactored, moved API to api.c

	* java_bridge.c (invoke, call_function_hander,
	get_property_handler, set_property_handler): Return protocol
	status.

	* protocol.c: Rewritten.

	* server/natcJavaBridge.c: Accept -Dphp.java.bridge.base= option.

	* server/javax/script/http/HttpScriptRequest.java,
	server/javax/script/http/HttpScriptResponse.java,
	server/javax/script/http/HttpScriptServlet.java,
	server/javax/script/http/SimpleHttpScriptContext.java: Removed,
	not in spec.

	* server/php/java/bridge/BaseThreadPool.java: New file
	
	* server/php/java/bridge/ThreadPool.java: Rewritten

	* server/php/java/bridge/ILogger.java,
	server/php/java/bridge/ChainsawLogger.java,
	server/php/java/bridge/FileLogger.java,
	server/php/java/bridge/Log4jLogger.java: New files
	
	* server/php/java/bridge/ClassicParserString.java: New file

	* server/php/java/bridge/ConstructorCache.java
	(Entry), server/php/java/bridge/MethodCache.java
	(Entry): Do not use intern, that's far more expensive than lazy
	String.equals.

	* server/php/java/bridge/ConstructorCache.java
	(getParameterTypes), server/php/java/bridge/MethodCache.java
	(getParameterTypes): Cache type information.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(updateJarLibraryPath): make it fail fast, if the jar file is not
	accessible.
	(checkJarFile): New procedure.

	* server/php/java/bridge/GlobalRef.java: Rewritten to use an
	integer hash.

	* server/php/java/bridge/IDocHandler.java (createParserString): Create
	a cached string, if possible.

	* server/php/java/bridge/JavaBridge.java
	(stringCache): New cache.
	(run): Do not call expire from the request handling thread, use
	SessionFactory's SessionTimer instead.
	(init): Display default java.ext.dirs, pool size and security
	policy.
	(getContext): Call recycleContext, new for persistent connections.
	(getSession): Call recycleContext, new for persistent connections.
	(INTERNAL_PHPSESSION): Use a separate store for __sleep and
	__wakeup
	(recycle): New procedure.
	(recycleContext): New procedure
	(getString): New function
	(getCachedString): New function

	* server/php/java/bridge/JavaBridgeClassLoader.java: Rewritten.

	* server/php/java/bridge/JavaBridgeSecurityManager.java: New file

	* server/php/java/bridge/Options.java (newString): Moved to
	JavaBridge,see getString and getCachedString.
	(createExact): Moved to Request.java
	(hexNumbers): New function
	(recycle): New procedure

	* server/php/java/bridge/Parser.java (PUSH): Use factory.
	
	* server/php/java/bridge/ParserString,
	server/php/java/bridge/Request.java,
	server/php/java/bridge/Response.java: Use hex encoding.

	* server/php/java/bridge/Session.java (expire): Removed obsolete bridge
	parameter.

	* server/php/java/bridge/SessionFactory.java (TIMER_FREQ, timer,
	SessionTimer): New constants/class.

	* server/php/java/bridge/StringCache.java: New class.

	* server/php/java/bridge/Util.java: Marked as final, disabled
	default constructor.
	(Logger): Rewritten to use ILogger
	(BUF_SIZE): Corrected typo.
	(DEFAULT_EXT_DIRS): New constant
	(setLogger): Rewritten
	(setDefaultFileLogger): New procedure

	* server/php/java/bridge/ContextFactory.java 
	(moveContext): New procedure
	(getNext): Rewritten
	(get): Rewritten
	(recycle): New procedure
	(destroy): New procedure
	(isInitialized): New function
	(destroyOrphaned): New procedure

	* server/php/java/bridge/http/IcontextFactory.java,
	server/php/java/bridge/http/IcontextFactoryVisitor.java,
	server/php/java/bridge/http/SimpleContextFactory.java: New classes

	* server/php/java/servlet/CGIServlet.java (setPathInfo): New
	procedure

	* server/php/java/servlet/ConnextionPool.java: New class

	* server/php/java/servlet/FastCGIServlet.java (findCGI): Rewritten
	(FastCGIOuputStream, FastCGIInputStream): Use connection pool.
	(writeBegin, run): Use connection pool

	* server/php/java/servlet/PhpCGIServlet.java (findCGI): Rewritten
	(setPathInfo): New method
	(waitForDaemon): New procedure
	(startFCGI, canStartFCGI): Rewritten
	(delegateOrStartFCGI, isJavaBridgeWc, delegateFCGI): New
	procedures

	* server/php/java/servlet/ContextFactory.java: Renamed to
	ServletContextFactory.
	
	* server/php/java/servlet/ServletContextFactory.java: New from
	ContextFactory
	
	* VERSION, php-java-bridge.spec: Version 3.1.0rc2 released
	
2006-06-03  Jost Boekemeier  <jostb@intern>
	
	* Merged from 3.0.8 branch:
	
        2006-06-03  Jost Boekemeier  <jostb@intern>
	
	* bind.c (test_local_server), tests.m4/java_check_struct_ucred.m4,
	protocol.c (check_session): changed true to is_true for PR1499203.

	* php/java/bridge/Util.java (COMMON_ENVIRONMENT, entries,
	getCommonEnvironment), php/java/servlet/CGIServlet.java
	(getProcessEnvironment), php/java/script/PhpScriptEngine.java
	(getProcessEnvironment): Use COMMON_ENVIRONMENT for JDK<=1.4, for
	PRPR1499378.

	* VERSION, php-java-bridge.spec: Version 3.0.8.4 released
	
	
2006-05-14  Jost Boekemeier  <jostb@intern>

	* Merged from 3.0.8 branch:

	2006-05-13  Jost Boekemeier  <jostb@intern>

	* client.c (try_connect_to_server), protocol.c (check_session),
	server/php/java/bridgeTCPServerSocket.java (accept),
	server/php/java/servlet/FastCGIServlet.java (findCGI): : Switched
	off the Nagle algorithm for operating systems with an insane
	implementation: On FreeBSD and Mac OSX the bridge is now 300 times (!)
	faster than before and runs nearly as fast as on Linux, Windows,
	Solaris...
	
	* client.c (create_pipes): Added missing return statement.
	
	* install.sh: Added test if selinux is really available. Otherwise
	BSD will complain about missing Security Enhanced Linux.

	* java_bridge.c (call_function_handler): Dump the error message
	from the servlet back-end to the console before aborting.
	(procotol_error): New procedure.
	(destroy_object): Avoid warning.

	* protocol.c (end,end_session): changed incorrect assert.

	* server/php/java/bridge/JavaBridgeClassLoader (clear): Fixed typo.
	
	* server/php/java/bridge/Response.java (setResult): Corrected boolean cast.

	* tests.php5/is_null.php: Test for the above fix.

	* server/php/java/bridge/ThreadPool.java: Start a new thread
	immediately. If more than 19 clients crash at the same time, it
	could be that the pool cannot start a new thread later on.

	* server/php/java/faces/PhpFacesScriptEngine.java
	(setNewContextFactory),
	server/php/java/script/PhpScriptEngine.java
	(getProcessEnvironment, setNewContextFactory),
	server/php/java/servlet/CGIServlet.java
	(getProcessEnvironment): Pass current process environment. Needed
	for some PECL modules.

	* server/php/java/script/PhpScriptEngine.java (setName): Display
	the beginning, not the end of the script.

	* server/php/java/script/URLReader.java (read): Use a buffered
	stream.

	* server/php/java/servlet/CGIServlet.java (getLocalPort,
	getLocalName): Use the computed value.
	
	* server/php/java/servlet/FastCGIServlet.java (run): Use a
	buffered output stream.
	
	* VERSION, php-java-bridge.spec: Version 3.0.8.1 released

        2006-04-23  Jost Boekemeier  <jostb@intern>

	* bind.c (wait_server): Timeout raised to 30 seconds.

	* RunJavaBridge.c.in, RunMonoBridge.c.in: Transit only when
	invoked with root privileges.

	* server/php/java/bridge/Util.java (DEFAULT_CGI_LOCATIONS):
	Removed /usr/bin/php, which is not a CGI binary.

	* server/php/java/bridge/http/ContextServer.java (Check for the
	fall-back channel on Windows).


2006-04-30  Jost Boekemeier  <jostb@intern>

	* PROTOCOL.TXT: Keep-alive added.

	* client.c (handle_request, try_connect_to_server): Persistent
	connections.
	(clone_cfg, destroy_cloned_cfg): New from java.c

	* java.c (clone_cfg, destroy_cloned_cfg): Moved to client.c
	(OnIniPersistentConnections): New procedure
	(RSHUTDOWN_FUNCTION): moved connection handling to client/protocol.
	(MINFO): Display java.persistent_connections option.
	(MSHUTDOWN_FUNCTION): close persistent, if necessary
	
	* init_cfg.c.in (option_set_by_user, init_cfg): Persistent connections.

	* protocol.c (end): Changed incorrect assert()
	(end_session): Removed incorrect assert.
	(protocol_end): reset state for close persistent
	(EndConnection): New method
	(close_connection, recycle_connection): New procedures

	* java.c (PHP_INI_BEGIN): java.log_level changed to PHP_INI_SYSTEM

	* server/php/java/bridge/JavaBridge.java (recycle): New method.

	* server/php/java/bridge/JavaBridgeClassLoader.java (recycle): New method.
	* server/php/java/bridge/Options.java (recycle): New method.

	* server/php/java/bridge/Request.java (begin, handleRequest):
	Handle keep-alive.
	(recycle): New method.

	* server/php/java/bridge/Response.java (recycle): New method.

	* server/php/java/bridge/SessionFactory.java (session): New from
	getSession.
	(getSession, getSessionInternal): Keep user sessions and internal
	sessions for the serialize/desiralize implementation separate.

	* server/php/java/bridge/ThreadPool.java (setIsDaemon,
	getIsDaemon, terminateDaemon): Daemon are managed by the pool
	but are not visible in any way. They are terminated when the
	associated keep-alive client terminates.

	* server/php/java/servlet/FastCGIServlet.java (override_hosts,
	init): Use the override_hosts for the FastCGIServlet, too.

	* server/test/HelloWorld.java: Removed ini_set("java.log_level",
	...), the log_level setting is INI_SYSTEM now. -- None of the
	examples and none of the documentation mentioned that feature, so
	we can silently drop it.

2006-04-23  Jost Boekemeier  <jostb@intern>

	* bind.c (wait_server): Timeout raised to 30 seconds.

	* RunJavaBridge.c.in, RunMonoBridge.c.in: Transit only when
	invoked with root privileges.

	* server/php/java/bridge/Util.java (DEFAULT_CGI_LOCATIONS):
	Removed /usr/bin/php, which is not a CGI binary.

	* server/php/java/bridge/http/ContextServer.java (Check for the
	fall-back channel on Windows).

2006-04-09  Jost Boekemeier  <jostb@intern>

	* VERSION, php-java-bridge.spec: Version 3.0.8 released

	
2006-03-21  Jost Boekemeier  <jostb@intern>

	* java.c (values): java_values works with php4, too.

	* server/php/java/bridge/JavaBridge.java (getId): Display thread id.

	* server/php/java/bridge/JavaBridgeRunner.java: The test runner can now
	handle override redirect. Without it most of the servlet tests
	failed.

	* server/php/java/bridge/PhpProcedure.java (createProxy): Create
	proxies with the classloader of the interfaces, as before. If we
	create the proxies using our dynamic loader, the loader tests fail
	because the proxies cannot be accessed after java_reset()

	* server/php/java/bridge/http/ContextServer.java (isAvailable):
	pass the channel name. Without it channel negotiation fails if the
	client disagrees with the server's choice.

	* server/php/java/servlet/PhpCGIServlet.java: New file, refactored
	from PhpJavaServlet. Necessary for jetty.

	* server/php/java/faces/FacesServlet.java: New file to workaround
	a bug in jetty's classloader.

	* server/WEB-INF/web.xml: Use our FacesServlet instead of the
	default FacesServlet so that bugs in the Faces implementation do
	not prevent the bridge from starting.
	
2006-03-19  Jost Boekemeier  <jostb@intern>
	
	* server/php/java/bridge/Request.java (IntegerComparator,
	PHP_ARRAY_KEY_COMPARATOR, PhpArrayKey): New classes.
	
	* server/php/java/bridge/JavaBridge.java (coerce),
	server/php/java/bridge/Request.java (PhpArray): Rewritten. The
	earlier version did not handle new java("java.util.Vector",
	array(1,2,3)) correctly.

	* bind.c (get_server_args): Reverted last change. Cannot use
	LD_LIBRARY_PATH instead of -Djava.library.path= because GNU java
	on FC4 ignores the LD_LIBRARY_PATH setting.

	* VERSION, php-java-bridge.spec: Version 3.0.8rc released

2006-03-16  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args): Use LD_LIBRARY_PATH instead of
	-Djava.library.path=. All modern VMs set java.library.path to a
	resonable value.
	
	* java.c (call_with_params, call_with_handler): throw an exception instead of
	terminating the php binary with a FATAL error. Needed for
	php-interactive mode.

	* java_bridge.c (get_jobject_from_object, is_type): Reject non-java or non-JavaException objects.

	* protocol.c (end, end_session, flush): Removed test code.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java: Removed
	obsolete code, check /usr/share/java/ext/, used by GNU java (gcj).
	Reject attempts to load native libraries via our dynamic loader
	(see PR1447360).

	* server/php/java/bridge/JavaBridge.java (init): Add
	/usr/share/java/ext and /usr/java/packages/lib/ext for GNU java,
	SUN jdk1.6.

	* server/php/java/bridge/JavaBridge.java (ObjectToString): handle
	echo (string)java_closure(null, "doesNotExist") gracefully.

	* server/php/java/bridge/PhpProcedure.java (invoke): Set the
	context class loader.

	* server/php/java/bridge/Response.java (setResultProcedure,
	setResultException, setResultObject, setResultClass): New methods
	needed for the async mode.

	* server/php/java/bridge/http/ContextServer.java,
	server/php/java/bridge/http/PipeContextServer.java,
	server/php/java/bridge/http/SocketContextServer.java: It is now
	possible to switch the Socket- and PipeContextServer on and
	off. For testing only.
	(checkTestTunnel): New procedure.

	* ABOUT.HTM: Updated benchmark results.
	
2006-03-10  Jost Boekemeier  <jostb@intern>

	* install.sh: New file.

	* client.c (begin): Store async_ctx for stream mode
	(handle_cached): New procedure for stream mode

	* java.c (java_begin_document, java_end_document): New public API
	for XML stream mode.

	* protocol.c (flush, protocol_end, CreateObjectEnd, ResultBegin,
	createSecureEnvironment): XML stream mode.

	* examples/bench/excel_antitest2.php: New file

	* examples/bench/bench.php: Test XML stream mode.

	* server/php/java/bridge/JavaBridge.java(beginDocument,
	endDocument): New method for XML stream mode.

	* server/php/java/bridge/Parser.java (reset): New procedure

	* server/php/java/bridge/Request.java (PHPNULL, PhpNull,
	getGlobalRef): In XML stream mode the server must always return
	object references, even for null values.

	* server/php/java/bridge/Request.java (reset): New procedure

	* server/php/java/bridge/Response.java (AsyncWriter): New writer
	for XML stream mode.

	* server/php/java/bridge/Util.java (EXTENSION_DIR): Obsolete, it
	is now passed by the client.

	* server/php/java/bridge/global.properties.in (EXTENSION_DIR): Obsolete.

	* server/php/java/bridge/http/ContextRunner.java (init): Use
	recycle the existing response object.

2006-03-07  Jost Boekemeier  <jostb@intern>
	
	* bind.c (KillProcess, KillProcessTreeNtHelper,
	KillProcessTreeWinHelper, KillProcessEx): Emulate Unix kill
	behaviour for windows. New procedures for PR1431314.

	* java.c (__errno): Avoid warning.

	* php-java-bridge: Make the standalone script more user-friendly.

	* php-java-bridge.spec: Symlink JavaBridge.jar and php-script.jar
	to /usr/java/packages/lib/ext/ so that JDK1.6 can find them.

	* server/configure.gnu.in: Check if backend configuration failed and suggest --disable-backend.

	* server/META-INF/services/javax.script.ScriptEngineFactory: Added
	php-interactive so that /opt/jdk1.6/jrunscript -l php-interactive
	works.

	* server/php/java/bridge/JavaBridgeRunner.java (JavaBridgeRunner): Use thread pool.

	* server/php/java/bridge/Util.java (Process): Do not cd to the
	user home directory, use the current dir instead.

	* server/php/java/script/PhpScriptEngine.java (eval): Rewritten: Do not keep the local reader open.

	* server/php/java/script/InteractivePhpScriptEngine.java,
	server/php/java/script/InteractivePhpScriptEngineFactory.java: New
	files.

	* server/test/cli.java: Test for php-interactive.
	
2006-02-26  Jost Boekemeier  <jostb@intern>
	
	* bind.c (sleep_ms): New procedure
	(wait_server, wait_for_daemon): Use select() instead of busy wait,
	if possible.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader: Report
	"trying to load..." as debug, not as log message.

	* server/php/java/bridge/JavaBridge.java (isVisible): New method.
	(Invoke, GetSetProp): Check if a static field/procedure shadows a
	field/procedure from the class class. Invoke the method or
	procedure or field from the class class, if not.

	* tests.php5/getName.php: New test.
	
2006-02-19  Jost Boekemeier  <jostb@intern>
	
	* VERSION, php-java-bridge.spec: Version 3.0.7a released
	
2006-02-18  Jost Boekemeier  <jostb@intern>

	* config.m4: check jni in the gcj path, too.

	* examples/j2ee/globals.php: obsolete
	
	* examples/j2ee/documentClient.php: rewritten

	* server/configure.in (PHP_JRE): calculate the correct jre

	* server/WEB-INF/web.xml (load-on-startup): Must be placed after the param-value.

	* server/php/java/bridge/PhpProcedure.java (createProxy): corrected typo.
	
	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java:
	Rewritten so that the dynamic classloader can be used in the
	servlet, j2ee environment: It is switched off for all statements
	executed by the http tunnel. All following redirected requests are
	handled by our thread pool which now carries a dynamic loader with
	the previous context classloader as the parent. Fixes PR1432361.

	* server/php/java/bridge/ThreadPool.java (ThreadPool): Use the
	context loader or the supplied loader, otherwise classes from the
	parent container can not be found.

	* server/php/java/bridge/Util.java (getContextClassLoader): Use
	the current loader if the context loader isn't set.

	* server/php/java/bridge/http/ContextFactory.java
	(ContextFactory): Switch off the dynamic loader when the backend
	is running in a servlet engine or j2ee application server. These
	environments have their own class loading mechanism.

	* server/php/java/bridge/http/ContextRunner.java (ContextRunner,
	init), server/php/java/bridge/servlet/PhpJavaServlet.java
	(handleSocketConnection): Avoid deadlock when running in j2ee
	servers with a broken response.flush implementation. Fixes
	PR1431359.

	* examples/documentClient.php: New file, tests PR1432361.
	
2006-02-12  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args): Use path_separator, ":", not separator "/" to separate path entries.
	(exec_vm): Display a php warning if we could not execute the backend.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java: Do not
	abort the cp search if we get an exception while resolving one entry.

	* server/php/java/servlet/PhpJavaServlet.java (getLocalName): Wrap
	req.getLocalName, which may not be available in all serlet
	engines.

	* VERSION, php-java-bridge.spec: Version 3.0.7 released

2006-02-08  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args, exec_vm), config.m4,
	server/configure.in: Do not hardcode the JDK runtime path into
	the binary, if no JRE runtime path was given. This fixes a problem
	in the FC4 and RHEL RPM, they were built with the jdk path but
	require a jre.

	* php-java-bridge.spec: Do not install the RunJavaBridge from the
	core RPM.

	* config.m4, server/configure.in: Check for GNU libtool. Needed
	for Macintosh.

2006-02-05  Jost Boekemeier  <jostb@intern>
	
	* VERSION, php-java-bridge.spec: Version 3.0.7rc released
	
2006-02-04  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(phpLibDir): Removed, not used.
	(contextDir, getContextDir): Removed insane implementation, this
	cannot be used because instances of this class are shared.
	(updateJarLibraryPath): Check for rawContextDir/lib/file.jar
	rewritten. The previous implementation did work with a static
	context dir. But since 2.0.7 users can pass their own contextDir
	to updateJarLibraryPath.
	(initClassLoader): New procedure
	(initClassLoader): Deprecated, users can set extension_dir and the
	bridge will use that. It doesn't make sense to keep the old static
	implementation.
	(clear): contextDir variable doesn't exist anymore.
	(reset): use new initClassLoader.

	* server/php/java/bridge/JavaBridge.java (init),
	server/php/java/bridge/JavaBridgeRunner.java (JavaBridgeRunner),
	server/php/java/faces/PhpFacesScriptContext.java,
	server/php/java/servet/PhpJavaServlet.java (init): use new
	initClassLoader instead of the deprecated one.

	* server/php/java/faces/Script.java (call): Display a message if
	we could not connect to the specified (apache-, iis-) port. Try
	again with the local (cgi-) port.
	
	* php-java-bridge.spec, php-java-bridge, php-java-bridge.service:
	Start as user tomcat.

	* server/natcJavaBridge.c
	(Java_php_java_bridge_JavaBridge_openLog): Redirect to stderr (default).

	* server/php/java/bridge/JavaBridge.java 
	(init): Redirect to stderr (default).
	
	
2006-02-02  Jost Boekemeier  <jostb@intern>

	* examples/php+jsp/source.php, examples/php+jsp/index.php: New
	files.

	
2006-02-01  Jost Boekemeier  <jostb@intern>
	
	* examples/bench/bench.php: load a local poi.jar first.

	* examples/languages/scheme-demo.php: load a local kawa.jar first.

	* server/configure.in: Check for jni in the gcj path, too.
	
	* php/java/servlet/CGIServlet.java (setCGIEnvironment),
	php/java/faces/PhpFacesContext.java (getBaseURL),
	php/java/faces/PhpFacesScriptContext.java (initialize): Do not
	rely on the values that some clients send. Use the real server
	name and the real server port, not the header values from the
	request. IE for example sends wrong values when the request was
	redirected. Example: request for
	http://localhost:80/java-server-faces/index.php => backend
	receives redirected request on 8080 but with server port set to
	80!).

	* php_java.h: servlet_is_default: New variable set to 1 if
	java.servlet was set to "On".

	* protocol.c (setResultWith_context): Do not set the cookie path
	if java.servlet was set to "On".

	* VERSION, php-java-bridge.spec: Version 3.0.7pre1 released

2006-01-30  Jost Boekemeier  <jostb@intern>

	* INSTALL.SERVLET: Removed

	* INSTALL.J2EE: New from INSTALL.SERVLET

	* INSTALL: Removed Linux section
	
	* INSTALL.LINUX: New from INSTALL
	
	
2006-01-30  Jost Boekemeier  <jostb@intern>

	* test.php, test.php4: Suppress errors from dl(), use new
	JavaClass to avoid "no constructor" warning.

	* VERSION, php-java-bridge.spec: Version 3.0.7pre released

2006-01-29  Jost Boekemeier  <jostb@intern>

	* PROTOCOL.TXT: Moved async protocol implementation to Version-3-1
	branch. The 3.0.8 version must be compatible with 2.0.8.

	* README, INSTALL.SERVLET, INSTALL.WINDOWS: Rewritten

	* java.ini.windows: Removed

	* java-servlet.ini, java-standalone.ini: New files

	* php-java-bridge.spec: Create php-java-bridge,
	php-java-bridge-servlet, php-java-bridge-standalone and
	php-java-bridge-devel RPM files.

	* bind.c: Do not depend on ext/session.

	* bind.c (quote): Obsolete: java -jar JavaBridge.jar INET:0 4 now
	behaves as java -jar JavaBridge.jar INET:0 4 ""

	* client.c (setResultFromObject, begin): Backward compatibility
	with 2.0.8

	* tests.m4/java_check_jni.m4: New test for Mac and BSD

	* config.m4: Check if JNI is available and suppress
	natcJavaBridge.so if not.

	* init_cfg.c.in (is_fcgi_servlet): New global.

	* java.ini: Rewritten

	* php-java-bridge: There can only be one pid.

	* protocol.c (redirect): Check result from open().

	* server/php/java/bridge/JavaBridge.java (init): usage() if
	socketname is --help.
	
	* server/php/java/bridge/JavaBridge.java (osName, osArch): The
	os.name and os.arch up to the first non alnum char -- "windows"
	instead of "windows 2000" or "windows xp".
	
	* server/php/java/bridge/http/ContextServer.java (ContextServer):
	Allocate a SocketContextServer only when the client was not able to
	create a pair of named pipes.
	
	* server/php/java/servlet/PhpJavaServlet.java (contextServer):
	Initialize when servlet context starts, destroy when servlet
	context terminates. Otherwise the JavaBridgeContextRunner keeps
	running until the VM terminates.

	* server/test/Discovery.java: Rewritten
	
2006-01-15  Jost Boekemeier  <jostb@intern>

	* server/javax/script/ScriptEngineManager.java 
	(getServiceProviders): avoid warning.

	* server/php/java/script/PhpScriptContext.java
	(call): removed obsolete cast.

	* server/php/java/script/PhpScriptEngine.java
	(PhpScriptEngine): Set our context instead of overriding every public function.
	(eval): Obsolete.

	* server/test/Discovery.java: Test the above change.
	
2006-01-15  Jost Boekemeier  <jostb@intern>

	* php.ini, php.ini.windows: Revert last change: on some operating
	systems (Windows) "connect" does not fail immediately when the
	backend is not listening on the given port.

	* client.c (destroy_channel): Close the lockfile before removing
	it. This fixes a serious resource leak when the backend is a J2EE
	server and the frontend is Apache (Unix).

	* php_java.h (lockfile): New global.

	* protocol.h (backend_has_session_proxy): New flag which indicates
	that the backend has aquired a session proxy.

	* java.c (session): Backward compatibility with 2.0.8:
	java_session() can be called even if the backend's headers were
	aleady sent.

	* server/php/java/servlet/PhpJavaServlet.java
	(handleRedirectConnection): Write a "headers already sent" message
	if java_session() is not the first java statement in a php script.
	
	* tests.php5/override_redirect.php: New test for the above code.

	* server/javax/script/ScriptEngineManager.java
	(getServiceProviders): New procedure.
	(ScriptEngineManager): Code works with GNU java and Sun java.
	
	* server/javax/script/ScriptEngineFactory.java: Compatibility with
	JDK1.6

	* server/php/java/bridge/PhpScriptEngineFactory.java: New class.

	* server/php/java/bridge/PhpScriptEngine.java (getFactory): Return
	the factory.
	(eval): Use a StringReader, not a FileReader
	(eval): Release the previous continuation if it exists
	(eval): engine.eval((Reader)null) can be used to release the last
	continuation
	
	* server/META-INF/services/javax.script.ScriptEngineFactory: New
	file

	* server/test/Discovery.java: New test for the above code.

	* VERSION, php-java-bridge.spec: Version 3.0.6 released
	
	
2006-01-08  Jost Boekemeier  <jostb@intern>

	* php-java-bridge: Start the local backend even if a non-local
	backend is already running.

	* java.c (MINFO): Always display the start command, even if a
	backend is already running.
	
	* bind.c (test_server): Use the local backend as a fallback when
	the servlet backend is not available and vice versa.

	* bind.c (test_server): Search for the wrapper in ext_dir (used
	when installing the RPM on debian).

	* php.ini, php.ini.windows: Enable both, the hosts and the local
	backend. If java.servlet is set, the bridge will use a HTTP tunnel
	from the hosts list. If that fails, it will use the local
	backend. If java.servlet is not set, the bridge will use the local
	backend first, then a backend from the hosts list.

	* java.c: Preliminary IDE support. The bridge should work with
	PHP4 again.
	
	* server/php/java/bridge/JavaBridgeRunner.java (main): New
	procedure to start a simple HTTP server.

	* server/php/java/bridge/ISession.java (getLastAccessedTime,
	getCreationTime): New methods.

	* server/php/java/bridge/Session.java (get, put, remove,
	setTimeout, putAll, getAll): Update et the lastAccessedTime so
	that expire works correctly.
	
	* VERSION, php-java-bridge.spec: Version 3.0.5 released

	
2006-01-04  Jost Boekemeier  <jostb@intern>

	* CREDITS: correct spelling

	* INSTALL: Require j2re on RHEL3, jre on others

	* PROTOCOL.TXT: Version 2.0 supports asynchronuous replies.

	* client.c (setResultFromObject): pass type information used for
	the async. protocol cache.

	* java.c (session_get_default_lifetime): New procedure
	(warn_session): Warn if a bug in a php5.1.1 session module detected
	(session, serialize, deserialize): Use session_get_default_lifetime.

	* server/php/java/bridge/ISession.java (getLastAccessedTime, getCreationTime): New functions.

	* server/php/java/bridge/Session.java (get, put, getAll, putAll,
	remove, setTimeout): update lastAccessedTime.

	* server/php/java/bridge/JavaBridge (init): Create JavaBridge.log
	if called with zero arguments (used on windows)
	(reset): Do not reset the session. The session can be reset by
	using the static method Session.reset(): (new JavaClass("php.java.bridge.Session"))->reset();

	* tests.php5/session_write_close_bug.php: Test for php5.1.1 write_close bug.
	
2005-12-28  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/PhpProcedureProxy.java 
	(getNewFromInterface): Allow null interface.

	* server/php/java/bridge/ParserString.java
	(getStringValue): Encode string according to options.
	(getASCIIStringValue): New procedure.

	* server/test/Utf8.java: New test

	* server/php/java/bridge/http/SocketContextServer.java
	(SocketContextServer): Throw an exception if we don't have socket
	permissions and a named pipe channel is not available. For the SUN
	j2ee sample server this now means that Windows users must add:
	grant {permission java.net.SocketPermission "*", "accept,resolve";}; 
	or they must run their AS on unix.

	* server/php/java/script/PhpScriptEngine.java
	(eval, invoke): Throw a "not invocable" exception from invoke
	only.
	
	* VERSION, php-java-bridge.spec: Version 3.0.4 released
	
2005-12-22  Jost Boekemeier  <jostb@intern>

	* client.c (init_channel): Initialize channel.
	
	* server/php/java/bridge/JavaBridge.java
	(weight): New procedure.
	(select): Rewritten to use weight.
	(offsetExists, offsetGet, offsetSet, offsetUnset): Accept arrays
	of primitive type and List.

	* server/php/java/bridge/PhpMap.java
	(getPhpMap): Check if the element is valid.
	
	* tests.php5/vector.php, tests.php5/map.php,
	tests.php5/byteArray.php, tests.phpt/charArray.php: New tests.
	
2005-12-21  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/http/IContextServer.java
	(setChannelName, getChannelName): removed. The context server is
	shared and therefore stateless.
	(start): Pass the channel name
	
	* server/php/java/bridge/http/ContextServer.java
	(getFallbackChannelName): New method.
	(start): Pass the channel name.

	* server/php/java/bridge/http/PipeContextServer.java
	(start): Pass the channel name.

	* server/php/java/bridge/http/SocketContextServer.java
	(start): Pass the channel name.

	* server/php/java/bridge/http/JavaBridgeRunner.java
	(parseBody): Do not store anything into the context server, it is
	shared.

	* server/php/java/servlet/PhpJavaServlet.java
	(handleSocketConnection): Do not store anything into the context
	server, it is shared.
		
2005-12-20  Jost Boekemeier  <jostb@intern>

	* init_cfg.c.in (override_ini_from_cgi, create_pipe, create_pipes,
	init_channel, destroy_channel, destroy_sockname): Moved to client.c

	* java.c (rinit, rshutdown): initialize/shut down the pipes here,
	not in minit/mshutdown.

	* client.c (create_pipe): chmod to 666 so that the pipe can be
	accessed. Otherwise the pipe communication may fail, depending on
	the process umask.

	* php-java-bridge.spec: Rewritten so that it is possible to create
	RHEL3 binaries from the source RPM.
	
	* VERSION, php-java-bridge.spec: Version 3.0.3a replaces
	3.0.3. This version is for Unix/Linux only, necessary because of
	the Unix specific umask problem.

	
2005-12-18  Jost Boekemeier  <jostb@intern>

	* client.c (begin_header): store redirect_port and redirect to named
	pipe if necessary.
	
	* init_cfg.c.in (override_ini_from_cgi, create_pipe, create_pipes,
	init_channel, destroy_channel, destroy_sockname): New functions.

	* protocol.h (SOCKNAME_SHM): Default location of the named pipe.
	(peerr, f_recv, f_recv0, f_send, f_send0): New protocol variables
	for named pipes.

	* test.php: Correct output.

	* server/configure.in: Use RI instead of myfaces.

	* unsupported/commons-el.jar, unsupported/myfaces-api.jar,
	unsupported/myfaces-impl.jar, unsupported/tomahawk.jar: Removed
	apache myfaces

	* unsupported/jsf-api.jar, unsupported/jsf-impl.jar,
	unsupported/jstl.jar/unsupported/standard.jar: Added jsf RI

	* server/php/java/bridge/http/IContextServer.java,
	server/php/java/bridge/http/PipeContextServer.java,
	server/php/java/bridge/http/SocketContextServer.java: New files.

	* server/php/java/bridge/http/ContextServer.java: Rewritten to use
	pipes or sockets.

	* examples/java-server-faces/index.php: Use to the server
	name w/o port.
	
	* VERSION, php-java-bridge.spec: Version 3.0.3 released
	
2005-12-11  Jost Boekemeier  <jostb@intern>

	* client.c (override_ini_for_redirect): The previous change was
	incompatible to the 2.0.8 behaviour. The new behaviour can now be
	selected using: java.servlet=User or java.servlet=MultiUser.

	* VERSION, php-java-bridge.spec: Version 3.0.2 released
	
2005-12-08  Jost Boekemeier  <jostb@intern>

	* bind.c (start_server): Detach the guard from the apache process
	group, otherwise it may get killed (one had to kill the java
	child).

	* java.c (offsetExists, offsetGet, offsetSet, offsetUnset):
	Rewritten to use the new interface (the old implementation was
	horribly inefficient).
	
	* java.c (MINIT): Use the global create_object,
	create_exception_object.

	* java_bridge.c (create_object, create_exception_object): New
	functions to prevent memory leaks, works around a bug in php 5.1.1
	(signature changed from 5.1.0 to 5.1.1).
	
2005-11-27  Jost Boekemeier  <jostb@intern>

	FIXME Entries since 2005-09-19 missing, regenerate them

2005-09-19  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/CGIServlet.java (run): Close the post
	input stream, otherwise the CGIServlet hangs.

	* VERSION, php-java-bridge.spec: Version 2.0.8 released.
	
2005-09-17  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/ContextRunner.java (init): Wait for the
	reply in a new thread.

	* server/php/java/servlet/SocketRunner.java (accept, getNext):
	Wait for the reply in a new thread.

	* server/doc: Documentation added.
	
2005-09-16  Jost Boekemeier  <jostb@intern>

	* java_bridge.c (checkError): Do not longjmp, this may confuse
	other modules.

	* java.c (allocate_php4_exception): Do not use longjmp.

	* examples/bench/callback3.php: correct path.

	* server/php/java/servlet/CGIServlet.java (run): Dispose the
	executable, for PR1291175.

	* tests.php5/instanceof.php: Rewritten, for PR1286136.

	* VERSION, php-java-bridge.spec: Version 2.0.8RC5 fixes PR1286136 and 1291175.
	
2005-09-15  Jost Boekemeier  <jostb@intern>

	* client.c (begin): Display protocol error if we receive HTML

	* java.c (session): Accept 0 parameters

	* parser.c (parse): push when we receive a begin
	(e.g. <html></html>) This fixes a crash when parsing HTML error
	pages.

	* php/java/bridge/DynamicJavaBridgeClassLoader.java
	(resolveLibraryName): pass an absolute path even if extension_dir
	is set to "." (PR1286643)

	* php/java/servlet/CGIServlet.java: Rewritten to allow POST
	data. The problem with the old solution was that the parameters
	were extracted before opening the InputStream. Since the getter
	operates on both, the URL parameters and the InputStream, the post
	parameters were gone after that. (PR1291191)

	* php/java/servlet/ContextRunner.java (init): Throw a NP with a
	description if we receive an invalid context.
	(PR 1291175)

	* VERSION, php-java-bridge.spec: Version 2.0.8RC4 fixes PR1291191, PR 1291175 and PR1286643.
	
	
2005-09-12  Jost Boekemeier  <jostb@intern>

	* php_java_snprintf.h: Added missing header.

	* config.m4: Clarify warning message.

	* java.c (session) accept 0..2 parameters.

	* php-java-bridge.te: Added missing right to create /var/log/php-java-bridge.log

	* protocol.c (setResultWith_context): Do not change the path, otherwise we end up with
	cookies which have different paths.

	* php/java/bridge/DynamicJavaBridgeClassLoader.java (updateJarLibraryPath): GNU java throws null pointer exception when it cannot connect to a remote URL.

	* php/java/bridge/ISession.java: Added javadoc

	* php/java/bridge/Request.java (handleOneRequest): New method used
	so that one cannot fake client requests; only one statement is
	executed via the HTTP tunnel, everything else goes through the
	local channel.

	* php/java/servlet/CGIServlet.java (encode): New function which
	uses UTF8 encoding.
	(unixLocation2): New global which points to php-cgi, used since
	FC4.

	* php/java/servlet/SocketRunner.java (accept): Do not shut down
	the local channel if attacked.

2005-09-07  Jost Boekemeier  <jostb@intern>

	* server/RunJavaBridge.c.in, server/RunMonoBridge.c.in: Execute
	with path.

	* server/php/java/bridge/JavaBridge.java (deserialize, serialize): Updated documentation.

	* server/php/java/bridge/Session.java (Session, expire, getAll): A Hashtable cannot
	store null values, use Collections.synchronizedMap
	instead; for PR1283148.

	* server/php/java/bridge/CGIServlet.java (setDefaultEnv):
	rewritten, see PR1281189.

	* tests.php4/session.php: test null values in session, for
	PR1283148.

	* VERSION, php-java-bridge.spec: Version 2.0.8RC2 fixes PR1283148
	and 1281189.


2005-09-04  Jost Boekemeier  <jostb@intern>

	* bind.c (sys_error): New procedure.

	* java.c (__errno): do not modify __errno on windows. Use
	GetLastError in sys_error instead.
	
	* server/php/java/bridge/JavaBridge.java (getSerialID): synchronize

	* server/php/java/bridge/Util.java (appendObject): display null
	
	* server/php/java/servlet/CGIServlet.java (setDefaultEnv): New
	function to work around a bug in WIN XP which requires the
	environment variable "SystemRoot". If this variable is missing, XP
	cannot find winsock.dll anymore...
	(printServletEnvironment, doGet, toString): Removed dead code.
	(setCGIEnvironment): Use getDefaultEnv.
	
	* server/php/java/servlet/CGIServlet.java
	(getSession): Added required parameter. Otherwise our method will
	not be called.

	
2005-09-01  Jost Boekemeier  <jostb@intern>

	* client.c (begin): Use java_strtod instead of
	zend_string_to_double which cannot convert negative values. (PR1275899)
	(try_connect_to_server): Correct error message.

	* java.c (serialize, deserialize): New functions (PR1202896 and 1274526)
	(closure): Added missing branch for null map (PR1276889)
	(MINIT): __sleep and __wakeup for php4 (PR1202896 and 1274526)

	* protocol.c (PRECISION): Send not more than 17 significant digits.

	* examples/XML/html_to_text.php: Corrected example, PR1276889 

	* server/php/java/bridge/JavaBridge.java (getSession): Prepend "@"
	in order to distinguish internal from public session names
	(getId): New function
	(warn, logMessage, logError, logDebug): Use getId() instead of this.
	(Create): log constructor call
	(deserialize, getSerialID, serialize): New methods for PR1202896 and 1274526.

	* server/php/java/bridge/Util.java (initGlobals): Replaces static block which did not work correctly
	(getShortClassName): New function
	(appendObject): prepend the short class name to the object description.

	* tests.php4/session_vars.php, tests.php4/numberTest.php, tests.php4/numberTest.jar, tests.php4/NumberTest.java: New tests
	* php_java_strtod.c, php_java_strtod.h: New files for PR1275899 
	
	* config.m4: php_java_strtod.c added
	
	* php-java-bridge.spec, VERSION: 2.0.8RC1 fixes PR1276889, 1275899, 1274526, 1202896.

2005-08-27  Jost Boekemeier  <jostb@intern>

	* INSTALL: Rewritten

	* VERSION, php-java-bridge.spec: Version 2.0.8RC
	
	* java.c (__sleep, __wakeup): New functions to avoid problems
	described in PR1274526 and PR1202896. In a future version we might
	make java values serializable. Until then please use the JSession
	adapter (located in php_java_lib) if you want to store java values
	into the session variable.

	* server/Makefile.am: Added missing ConstructorCache.
	
	
2005-08-27  Jost Boekemeier  <jostb@intern>

	* README: Removed Sun j2ee sample server, added Oracle 10g AS and
	WebSphere 6 AS.

	* server/WEB-INF/web.xml: Use UTF encoding for WebSphere.

	* server/php/java/servlet/PhpJavaServlet.java (findCGI): Add
	separator (for WebSphere).

	
2005-08-26  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/HttpSessionFacade.java (isNew): Use
	local variable (needed for servlet engines which check the thread context).

	* server/php/java/servlet/PhpJavaServlet.java
	(handleSocketConnection): some servlet engines override
	close. Flush the output instead.

	* unsupported/gcc3.4-broken-jni-method-lookup.patch: Obsolete, we
	don't use JNI anymore.
	
2005-08-25  Jost Boekemeier  <jostb@intern>

	* server/php/java/servlet/Context.java (removeAll): rewritten

	* server/php/java/servlet/SocketRunner.java (accept): Shutdown when an exception (e.g. security exception) occurs.

	* server/php/java/bridge/JavaBridge.java (makeClosure): Added missing method.

	* examples/gui/README: New file

	* README.MONO+NET: Corrected documentation.

	* README: Updated documentation
	
2005-08-24  Jost Boekemeier  <jostb@intern>

	* client.c (adjust_environment): Removed obsolete code.

	* java.c (clone_cfg): Check if already initialized.
	(destroy_cloned_cfg): initialize.
	(closure): correctly send map
	(call_with_exception_handler): display name is now call_global_func_with_exception_handler.

	* protocol.c (protocol_end): send context on shutdown in order to terminate redirected request.

	* server/php/java/bridge/JavaBridge.java (objectDebugDescription): Check null values.
	(makeClosure): accept name, useful if there is only one callback, e.g. closure($this, "onClose");

	* server/php/java/bridge/PhpProcedure.java (PhpProcedure): accept name.
	(createProxy): accept name.
	(setResultFromProcedure): accept name.

	* server/php/java/bridge/PhpProcedureProxy.java (PhpProcedureProxy): accept name.

	* tests.php4/callback_map.php, tests.php4/callback_name.php: New tests.
	
	* server/php/java/servlet/Context.java (removeAll): New procedure

	* server/php/java/servlet/PhpJavaServlet.java
	(handleSocketConnection): wait for ctx otherwise tomcat5 would modify
	the aquired session handle.

	* server/php/java/servlet/SocketRunner.java
	(accept): remove all contexts when we destroy the socketrunner

	* tests.php4/re-direct.php: new test which checks if the context will be destroyed correctly.

	* tests.php5/Callback.java: added missing test class.
	
	* tests.php4/reset.php: rewritten
	
2005-08-23  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args, use_wrapper, get_server_string, test_local_server, can_fork, wait_server, start_server, exec_vm, wait_for_daemon): Pass TSRMLS for windows thread safety.

	* client.c (begin_header, handle_request, adjust_environment, try_connect_to_server): Pass TSRMLS for windows thread safety.

	* init_cfg.c.in (init_socket, init_cfg, destroy_cfg, option_set_by_user, get_servlet_context, get_sockname): Pass TSRMLS for windows thread safety.
	(get_sockname): bugfix: check the socketname, not the servlet name.
	
	* java.c (__errno): Set to 0 on windows and do not change the
	variable as it is shared.
	(clone_cfg, destroy_cloned_cfg): New procedures used to unshare
	the variables we override during channel re-direct.
	(OnIniServlet): Store the servlet context, not "On".
	(alloc_globals_ctor): initialize the re-direct vars.
	(make_local_socket_info, minit, minfo, mshutdown, rshutdown, rinit):  Pass TSRMLS for windows thread safety.
	
	* protocol.c (end, protocol_end, send_context, IS_SERVLET_BACKEND, IS_OVERRIDE_REDIRECT): Pass TSRMLS for windows thread safety.

	* server/php/java/bridge/ThreadPool.java
	(getNextRunnable): Discard failed notify. Even though we do not
	send a notifyAll, it may happen that we notify a waiting thread
	even though another thread has entered the critical section
	and has just taken over the runnable without consuming the notify.
	Consider that t1 is in wait(), t2 is running and start(r) is
	called:
	
	- t2 stands before the critical section
	- start sends notify (to t1), leaves critical section
	- t2 enters critical section, pulls runnable from the list
	- t2 leaves critical section
	- t1 leaves wait and throws an exception because runnables is empty

	If this happens, the thread count is reduced without adjusting the
	threads variable. If it happens more than THREAD_POOL_MAX_SIZE
	times, the pool stops working.
	
	(run): Adjust the threads variable if a throwable occurs. Even
	though we catch everything on a level below, problems in the pool,
	out of memory error for example or the problem in getNextRunnable
	above, may still terminate the thread.
	
	* php-java-bridge.spec, VERSION: Version 2.0.8 pre4
	
2005-08-21  Jost Boekemeier  <jostb@intern>

	* bind.c
	(get_server_args): Only append a separator if the path doesn't end
	with one.

	* client.c 
	(begin_header): Do not overwrite re-direct with re-open.
	(adjust_environment): Avoid php warnings

	* init_cfg.c.in (init_socket, init_cfg): keep the default
	socketname.
	(get_sockname): New function
	
	* java.c (OnIniSockname): The last fix broke the servlet re-direct
	which needs to switch off the local socket. We now store the
	default socketname in a separate variable and use get_sockname()
	to retrieve the value.
	(make_local_socket_info): New procedure.
	
	* php_java.h (is_cgi_servlet): New global.

	* protocol.c (end): Send the context only if there are
	statements following the re-direct.
	(setResultWith_context): New function

	* server/web.xml: Is now valid XML.

	* server/php/java/bridge/JavaBridge.java (getSession): Print a
	stacktrace if session is null.

	
	
2005-08-18  Jost Boekemeier  <jostb@intern>

	Merged from Version-2-0-7 trunc:
	
	* server/php/java/bridge/JavaBridge (ObjectToString): Use
	Util.getClass instead of ob.getClass() to avoid surprises when ob
	is null or a class.
	
	* server/php/java/bridge/Request.java (add): Index must be long,
	otherwise we get a class cast exception in coerce.  Fix copied
	from 2.0.8pre.

	* server/php/java/bridge/Response.java
	(append_for_OutBuf_getFirstBytes): Must be accessible from the
	inner class on Mono.
	(append_none_for_OutBuf_getFirstBytes): likewise.
	
2005-08-18  Jost Boekemeier  <jostb@intern>

	* bind.c (test_server): Pass sockaddr in order to implement
	override redirect.

	* client.c (set_cookie): New procedure.
	(begin_header): set the cookie from the backend, re-direct to the
	correct backend, not to 127.0.0.1.
	(handle_request): check for override redirect, for re-directs: do
	not re-open before the correct port is set.
	(adjust_environment): php 5.3 changes the header field from
	X_JAVA_BRIDGE_... to HTTP_X_JAVA_BRIDGE!?!
	(createSecureEnvironment): Store the original socket addr for
	override redirect.

	* java.c (RSHUTDOWN): free the override redirect vars.
	(session): obtain a session from the backend

	* protocol.c (get_cookies, end_session, check_context): New
	functions

	* protocol.h (IS_SERVLET_BACKEND, IS_OVERRIDE_REDIRECT): New macros
	(peer0, peer_redirected, orig_peer_saddr): New session vars for override redirect.

	* server/php/java/servlet/CGIServlet.java (run): rewritten.
	
	* server/php/java/servlet/Context.java (setSession): New method.
	
	* server/php/java/servlet/PhpJavaServlet.java (setSession): New
	method.
	(handleRedirectConnection): New method for redirect and override
	redirect.
	(handleHttpConnection): Close the io streams.
	(handleSocketConnection): Check if the client needs a session
	handle. If so, include the client and provide the requested
	information for it. -- We use a short path here: instead of
	connecting back to php, we only provide the session handle which
	the client must send back to the browser. In case we were
	re-directed to a local channel, temporarily revert the
	re-direction and execute this statement (the getSession()) via the
	HTTP tunnel.

	* server/php/java/servlet/SocketRunner.java (SocketRunner): The
	local channel socket may bind to all ports. When using
	apache/mod_jk, clients cannot directly access the tomcat server
	anyway.

	* examples/php+jsp/sessionSharing.php: Create the session before
	generating output.
	
2005-08-09  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args): extension_dir may be configured
	dynamically, look into extension_dir/lib to load libraries and
	shared libraries (.dll's).
	(wait_server, start_server, wait_for_daemon): Start java
	automatically on win32.

	* init_cfg.h.in (CFG_LD_LIBRARY_PATH, CFG_CLASSPATH): Do not
	hardcode these values, use extension_dir/lib instead.
	
	* client.c (call_user_cb, handle_exception): pass exceptions back
	to the server.
	(setResultFromApply): rewritten

	* java.c (last_exception_get, last_exception_clear): New local
	procedures in order to emulate try/catch on php4.
	(closure): rewritten
	(check_php4_exception, call_with_handler, call_with_params,
	call_with_exception_handler, exception_handler): New procedures to
	handle exceptions in callbacks.

	* java_bridge.c (checkError): if called from java, jump right back
	to the procedure from which we were called.  This can be used to
	emulate try/catch in php4.
	(is_type): It is now possible to extend from the Java proxy and to
	override its methods.

	* php_java.h: Removed declspec(dllexport), which never really
	worked. Use gcc's autoimport, which also works with our cross
	compiler.
	(exception, php4_throw_buf, object, func, retval_ptr,
	func_params): New variables used for exception handling during apply.

	* protocol.c (Exception): Send exception to the server.
	
	* client.c (end): setCookie obsolete, we now use the context.
	(adjust_environment): rewritten.
	
	* PROTOCOL.TXT: Send exceptions to the server.

	* java.c (reset): Display a warning if reset() is called.	

	* java.c (call_function_handler4): It is now possible to extend
	from the java proxy and to override its methods.

	* examples/XML/html->text.php: New example.
	(examples/XML/DTD/xhtml-lat1.ent,
	examples/XML/DTD/xhtml-special.ent,
	examples/XML/DTD/xhtml-symbol.ent,
	examples/XML/DTD/xhtml1-strict.dtd,
	examples/XML/DTD/xhtml1-transitional.dtd): New files.

	* server/php/java/bridge/DynamicClassLoader.java
	(URLClassLoaderFactory): New internal class.
	(setUrlClassLoaderFactory): New method.
	(createURLClassLoader): create via URLClassLoaderFactory.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(updateJarLibraryPath): rewritten
	(resolveLibraryName): New method which searches for native libraries.
	(getUrlClassLoaderFactory): New method
	(loadClass): New method
	(newInstance): Use our factory in order to search for native libraries.

	* server/php/java/bridge/JavaBridge.java
	(setException): rewritten
	(CreateObject): display a proper error message when a
	NoClassDefFoundError occured instead of returning the class to the
	client.
	(setLibraryPath): Pass the contextDir (the dynamic extension_dir) to the loader.
	(warn): New procedure.

	* server/php/java/bridge/Request (Args): accept the exception
	object from the client and re-throw in order to abort this frame.
	(begin): handle Exeption.

	* server/php/java/bridge/Util (warn, appendObject, appendArgs):
	New procedures.

	* server/php/java/servlet/PhpJavaServlet (handleSocketConnection): 
	wait for the contextRunner.
	(handleHttpConnection): rewritten
	(getContext): new procedure.
	(updateBridgeContext): replaced by getContext

	* tests.php5/Callback.java, tests.php4/callback.php,
	tests.php4/callback1.php, tests.php5/callback1.php,
	tests.php5/callback.php, tests.php5/callback.jar: New tests.

	* tests.php5/NoClassDefFound.java: added call test.
	
	* tests.php4/doesNotExist.jar, tests.php4/noClassDefFound.jar,
	tests.php4/noClassDefFound1.php, tests.php4/noClassDefFound2.php:
	New tests.

	* php_java_lib/JSession.php: Allows one to store java values into
	the $_SESSION var.

	* tests.php5/session_vars.php: Test for JSession.php.

	
2005-08-02  Jost Boekemeier  <jostb@intern>

	* client.c (adjust_environment): rewritten.

	* server/php/java/servlet/CGIServlet.java (run): Removed obsolete
	500ms delay.
	
2005-07-31  Jost Boekemeier  <jostb@intern>

	* bind.c (test_server): Close the socket if nobody is
	interested. This fixes a leak which appeared when running
	phpinfo().

	* client.c (adjust_environment): New function.
	(try_connect_to_server): Adjust environment in order to re-direct
	to a local channel.

	* protocol.c (getSessionFactory): New function.
	(send_context): New function.
	(end): Send the context.
	
	* java.c (RSHUTDOWN): free servlet_redirect.
	
	* examples/php+jsp/sessionSharing.php,
	examples/php+jsp/sessionSharing.jsp: New files.

	* server/php/java/bridge/ISession.java: New interface.

	* server/php/java/bridge/JavaBridge.java (SessionFactory): New
	class.
	(getSession): rewritten.
	(setSessionFactory): New procedure.

	* server/php/java/servlet/Context.java,
	server/php/java/servlet/ContextRunner.java,
	server/php/java/servlet/SocketRunner.java,
	server/php/java/servlet/HttpSessionFacade.java: New classes which
	implements session sharing and local channel re-directs.

	* server/php/java/servlet/PhpJavaServlet.java
	(updateBridgeContext): New procedure which sets the
	channel/session context.
	
	
2005-07-28  Jost Boekemeier  <jostb@intern>

	* README: Added note about JSP and session sharing between PHP and
	JSP.

	* client.c
	(begin_header): Added re-direct to a local channel in order to
	speed up the servlet implementation.
	(handle_request): if re-directed, temporarily change the
	java.socketname, java.hosts and java.servlet.
	
	* java.c
	(PHP_INI_BEGIN): java.log_level, java.log_file, java.java and
	java.java_home are user settings.
	(OnIniServlet, OnIniSockname, OnIniHosts, OnIniClassPath,
	OnIniLibPath): These cannot be set by the user.
	(MINFO): Display entries only if they make sense.
	
	* client.c
	(handle_request): free the m and p arguments.
	
	* examples/php+jsp/excel.php, examples/php+jsp/numberguess.jar,
	examples/php+jsp/numberguess.php,
	examples/php+jsp/numberguess.jsp, examples/php+jsp/oops.jsp,
	examples/php+jsp/oops.php: New examples.

	* server/Makefile.am: include the new examples.

	* server/php/java/bridge/JavaBridge.java
	(requestOptions): Share the options for all request instances,
	needed for re-direct.
	(bind): New from init.
		
	* server/php/java/servlet/CGIServlet.java
	(run): rewritten.
	
	* server/php/java/servlet/PhpJavaServlet.java
	(init): open a server socket for re-direct.
	(destroy): close socket
	(doGet): catch IOException, display descriptive message and throw
	servlet exception.
	
2005-07-24  Jost Boekemeier  <jostb@intern>

	* PROTOCOL.TXT: updated documentation.

	* init_cfg.c.in (option_set_by_user): new function
	(is_servlet): obsolete
	
	* java.c (get_values): check for php4, if so, return the argument
	without creating memory leaks.
	(OnIniServlet, OnIniSockname, OnIniHosts, OnIniClassPath,
	OnIniLibPath, OnIniJava, OnIniJavaHome, OnIniLogLevel,
	OnIniLogFile): It is now possible to use these in php scripts,
	e.g. ini_set("java.log_level", 4);
	
	* bind.c (test_server): java.servlet forces java.socketname to
	off.

	* java.c (inspect): new function

	* server/php/java/bridge/JavaBridge.java (inspect): new function.

	* server/web.xml: added config options.

	* server/php/java/bridge/DynamicClassLoader (newInstance): create
	a dynamic classloader with the servlet classloader as parent.

	* server/php/java/servlet/CGIServlet.java: New file.

	* server/php/java/servlet/PhpJavaServlet.java: extend fromm
	CGIServlet.
		
2005-07-17  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args): New mono release fixes a bug, so we
	can now send the socket# to the backend.

	* client.c (setResultFromApply, begin, end): pass the cname
        (handle_request): tail call from the setResultFromProcedure into
	the handle_request loop.
	
	* PROTOCOL.TXT: pass the cname (the "php" name of the function),
	not the index#
	
	* java.c (require): call mono setLibraryPath in order to load
	CLR dll's.
	(closure): rewritten

	* java_bridge.c (result): allow passing null args.

	* protocol.c (end): new procedure
	(flush): call end.
	(ResultEnd): do not auto-flush, we jump right back into the
	handle_request and then do a tail-call to return from the
	sub-request.

	* server/RunMonoBridge.c.in: code enabled for latest mono version.

	* server/php/java/bridge/JavaBridge.java (loadMethod, CLRAssembly): new
	globals.
        (init): initialize globals
	(coerce): check for CLR
	(setLibraryPath): new procedure
	
	* server/php/java/bridge/PhpProcedure.java
	(setResultFromProcedure): pass cname

	* server/php/java/bridge/Response.java (writeApplyBegin): pass
	cname instead of pos.
	
        * examples/gui/swing-button, examples/gui/swt-button,
	examples/gui/gtk-fileselector.php, examples/gui/gtk-button.php:
	New examples.
	
2005-07-14  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/Response.java
	(append_for_OutBuf_getFirstBytes,
	append_none_for_OutBuf_getFirstBytes): must not be private because
	methods within OutBuf reference them (needed for MONO).
	
2005-07-13  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java (coerce): Check for PhpProcedureProxy

	* server/php/java/bridge/PhpProcedure.java: new file

	* server/php/java/bridge/PhpProcedureProxy.java: new file

	* server/php/java/bridge/Response.java (defaultValuesHook): new global
	(Response): Initialize defaultValuesHook and hook
	(reset): new method
	(flush): call reset in order to clear the response buffer ant to restore the hook.

	* tests.mono+net/gtk.php: New test

	* tests.php4/swt.php: New test
	
2005-07-12  Jost Boekemeier  <jostb@intern>

	* java.c (get_values): correctly assign variable for PHP4.
	
	* PROTOCOL.TXT: Removed optional M/F requests, added A(pply) and
	R(esult) requests. Protocol version 1.1.

	* client.c 
	(setResultFromApply): New procedure.
	(stack_elem): added variables for apply
	(begin): parse apply
	(end): parse apply

	* java.c (closure): New user function

	* java_bridge.c (result): new procedure

	* protocol.c (ResultBegin, ResultEnd): New in 1.1.

	* protocol.h (writeResultBegin, writeResultEnd): New protocol requests.

	* server/php/java/bridge/JavaBridge.java (coerce): Must be called from PhpProcedure.
	(makeClosure): New methods.

	* server/php/java/bridge/JavaBridgeClassLoader.java (getClassLoader): enabled.

	* server/php/java/bridge/Parser.java (tag, len, s, ch, mask, level,
	type, eor, blen, in_dquote, eot): Changed to private.
	(parse): check for EOF.

	* server/php/java/bridge/Request.java (add): Key must be a Long,
	otherwise we get class cast exceptions in coerce.  This bug was
	not detected until now because PHP usually generates the keys for
	us.
	(begin): Parse 'R' request, removed M/F requests.
	(handleSubRequests): New method.

	* server/php/java/bridge/Response.java (p, n, A, Ae): New strings.
	(writeApplyBegin): New procedure.
	(writeApplyEnd): New procedure.

	* server/php/java/servlet/PhpJavaServlet.java (doPut): Access load
	in a static way.
		
	
2005-07-08  Jost Boekemeier  <jostb@intern>

	* php-java-bridge.spec: Version 2.0.7pre3
	
	* VERSION: Version 2.0.7pre3
	
	* README: added note about CFG_JAVA_SOCKET_INET

	* bind.c (ineet_socket_prefix): changed to INET_LOCAL in order to
	create a local TCP socket.

	* server/php/java/bridge/LocalServerSocket (create): check for
	INET_LOCAL:

	* server/php/java/bridge/TCPServerSocket
	(create): check for INET_LOCAL:, store local flag.
	(newServerSocket): new method.
	(toString): display INET_LOCAL if necessary.

	* server/php/java/servlet/PhpJavaServlet.java 
	(init): init dynamic class loader
	(doPut): expire only at the end of the session, update load.
	
	* java.c (MINFO): display servlet status
	
	* init_cfg.c.in (get_servlet_context): Check for boolean On.

	* README: java.servlet <On|Off> is a boolean, not a string.
	
	
2005-07-05  Jost Boekemeier  <jostb@intern>

	* php-java-bridge.spec: Version 2.0.7pre2
	
	* VERSION: Version 2.0.7pre2
	
	* DynamicClassLoader.c (findResource): Fixed NP.
	
	* bind.c (get_server_args): Use extension_dir as default for
	mono.mono_home.

	* config.m4: Use withval, not enableval for --with-mono.
	Use full path for mono executable.
	
	* init_cfg.c.in: Added php wrapper.

	* java.c (MINIT): log_level, log_file, java_home and java_java
	(mono_home and mono_mono) can be set by the user (INI_ALL).
	(MINIT): set ini_last_updated early.
	(MINFO): display mono.mono and mono.mono_home entries.

	* php-java-bridge.spec: Require PHP4 for the RHEL and PHP5 for the
	FC4 RPM.

	* server/MonoBridge.c.in (usage): Correct display info.
	(main): Use full path to execute mono.

	* server/php/java/bridge/Session.java (reset): Avoid concurrent
	modification.
	
	* server/php/java/bridge/DynamicClassLoader
	(classLoaderCache): Changed type from HashMap to Hashtable in
	order to avoid synchronization problems.
	(clearCaches): New method.

	* server/php/java/bridge/JavaBridge.java
	(CreateObject): Correctly handle NoClassDefFoundError.

	* server/php/java/bridge/JavaBrideClassLoader
	(clearCaches): New method

	* tests.php4/NoClassDefFount.java: New file

	* tests.php4/noClassDefFound.php: New test.

	* tests.php4/noClassDefFound.jar: New file.
	
	
2005-07-03  Jost Boekemeier  <jostb@intern>

	* java.c (PHP_MSHUTDOWN_FUNCTION): Use EXT_GLOBAL to access cfg.
	Otherwise --enable-debug will fail.
	
	
2005-07-02  Jost Boekemeier  <jostb@intern>

	* php-java-bridge.spec: quiet ed.

	* php-java-bridge.te: Don't use base_file_read_access, which is
	broken on FC3.  Added sun java 1.5 settings.

	* server/php/java/bridge/Response.java (OutBuf): Compile with mono
	which cannot access private variables from inner classes.

2005-07-01  Jost Boekemeier  <jostb@intern>

	* bind.c (get_server_args): for_display added.

	* client.c (get_mode): pass loglevels > 4

	* java.c (get_values): php4 doesn't have RETURN_ZVAL.

	* java.ini: default log level is 2, not 3.

	* php-java-bridge: removed is_multicast, discard output of daemon
	(for FC 4).

	* php-java-bridge.spec: rewritten for FC 4.

	* php-java-bridge.te: rewritten for FC 4.

	* update_policy.sh: install the policy *before* reloading it.
	Until now one had to run the script twice!?!
	
	* server/Makefile.am: try fastjar, then jar.

	* server/php/java/bridge/DynamicClassLoader.java: removed
	reference to java.util.jar.* to avoid warnings from ecj.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java (DynamicJavaBridgeClassLoader): 
	don't bother adding sys urls, we'll do this in clear() anyway.
	(initClassLoader): /usr/share/java/ext added (new in FC4).
	(addSysUrls): added synchronization.
	(clear): new procedure.
	(reset): reset the state, including the cache.
	(newInstance): added synchronization.

	* server/php/java/bridge/GlobalRef.java (GlobalRef): Documentation
	added
	(clear): removed. It is not possible to recycle a global ref (its
	underlying data structure would grow without bounds).

	* server/php/java/bridge/JavaBridge.java (CreateObject): use
	cl.forName().
	(select): check for null value.
	(coerce): check for null value. If we cannot create a instance
	from the template, we have received an interface. Create a
	matching type instead.
	(Invoke): Use Util.getClass() instead of v.getClass() to avoid NP
	exceptions and surprises when object is already a class.
	(getSession): added documentation
	(reset): added documentation

	* server/php/java/bridge/JavaBridgeClassLoader.java
	(JavaBridgeClassLoader): call clear() when we recycle a loader,
	not reset. reset() is used by the API java_reset().
	(getClassLoader): obsolete
	(forName): either use Class.forName() or call loadClass directly
	when the DynamicClassLoader is used.

	* server/php/java/bridge/MethodCache.java
	(Entry): Compare symbols instead of strings.
	(hasResult): new variable
	(hashCode): cache result.
	(noCache): new token
	(get): check for noCache.
	(put): check for noCache.
	(getEntry): check for null values, return noCache if one of the
	parameters is a collection or array.
	(MethodCache): initialize noCache.

	* server/php/java/bridge/Request.java
	(PhpArray): new class

	* server/php/java/bridge/Request.java
	(GetClass): renamed to getClass.

	* tests.php4/servlet_connection_re-open.php: re-written to work
	with php4 and php5.
	
	
2005-06-28  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/MethodCache.java: New file.

	* server/php/java/bridge/JavaBridge.java (methodCache): New global.
	(init): Use EXTENSION_DIR.
	(Invoke): Use methodCache.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(initClassLoader): synchronized

	* server/Makefile.am (java_SOURCES):
	php/java/bridge/MethodCache.java added.
	

2005-06-27  Jost Boekemeier  <jostb@intern>

	* bind.c (test_server): set "called_from_init" only if called from
	init, corrects a bug when displaying the java status (running/not
	running).

	* java.c (PHP_MINFO_FUNCTION): pass is_local.

	* server/Makefile.am: New file from Makefile_unix.am

	* server/Makefile.in: Removed

	* server/Makefile_unix.am: Removed.

	* server/Makefile_windows.am: Removed.

	* server/configure.in (MONO_BRIDGE_EXE): New global.

	* server/php/java/bridge/DynamicClassLoader (findResources):
	renamed enum to enumeration because "enum" is a java 1.5 keyword.

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java
	(initClassLoader): Do nothing if initialized.

	* server/php/java/bridge/ThreadPool (Delegate): Compiles with GNU
	Java.

	* tests.php4/sendProperties.php: New test.
	

2005-06-26  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java: 
	(updateJarLibraryPath): add urls before sysUrls.
	(addSysUrls): append at the end of the list.
	(newInstance): rewritten

	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java:
	(run): add cast to DynamicJavaBridgeClassLoader. This is safe
	because run is only called from the standalone container, not from
	the servlet.
	(init): correctly initialize ThreadPool.
	(coerce): create the correct target type. Otherwise we would
	create and pass e.g. a Hashtable when a Properties object is
	required.
	
	* server/php/java/servlet/PhpJavaServlet.java:
	(doPut): update the in and out from the servlet context. Catch all
	throwables and shut down the connection.
	
2005-06-25  Jost Boekemeier  <jostb@intern>

	* java.c (PHP_RSHUTDOWN_FUNCTION): shutdown servlet connection.
	
	* protocol.c (protocol_end): shutdown servlet connection.

	* server/natcJavaBridge.c (initGlobals): disabled for 2.0.7
	
	* server/php/java/bridge/JavaBridge.java:
	(run): Create a JavaBridgeClassLoader from the context.
	(initGlobals): disabled for 2.0.7.  This method was used by the
	native code in order to set the UID and GID and the
	phpConfigDir. Since we now support servlet engines and application
	servers, we want something more general for the next version.
	(init): Temporarily added reference to ThreadPool until
	BridgeThread is checked in.
	(JavaBridge): Don't use ClassLoader, which isn't known.
	
	* server/php/java/bridge/JavaBridgeClassLoader: rewritten.  This
	class is a bridge now.

	* php-java-bridge/server/php/java/bridge/TCPServerSocket.java
	(TCPServerSocket): do not call initGlobals anymore.
	
	* server/php/java/bridge/DynamicJavaBridgeClassLoader.java: 
	(newInstance): new procedure.

	* server/php/java/bridge/ThreadPool.java: New file.
	
	* server/php/java/bridge/Util.java
	(EXTENSION_NAME): must be accessible from the servlet.
	(doPut): properly shut down the connection.
	

2005-06-23  Jost Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java:
	(JavaBridge): name thread "JavaBridge"
	(classic_classloader): obsolete
	(createJavaBridgeClassLoader): obsolete
	(initGlobals): initialize poolSize from servlet or from
	System.properties if not already initialized

	* server/php/java/bridge/ClassicJavaBridgeClassLoader.java: obsolete
	
	* server/php/java/bridge/JavaBridgeClassLoader.java:
	(Bridge): added documentation, create a DynamicJavaBridgeClassLoader.

	* server/php/java/bridge/Util.java:
	(THREAD_POOL_MAX_SIZE): New global, initialized from system
	property "php.java.bridge.threads".

	* server/php/java/servlet/PhpJavaServlet.java
	(init): Init Util.THREAD_POOL_MAX_SIZE from the servlet context.
	
	* server/php/java/bridge/GlobalRef.java
	(clear): disabled 

	
2005-05-22  Boekemeier <jostb@intern>

	* tests.php4/xmlTransform.php: Test rewritten

	* java.c (iterator_dtor): The dtor may be called after rshutdown:
	check if jenv is still there. This bug appears on windows only.

	* tests.mono+net/sample_lib.cs: Test rewritten.

	* tests.mono+net/sample_lib.dll: re-generated

	* tests.mono+net/load_assembly.php: Test rewritten
	
2005-05-21  Boekemeier <jostb@intern>

	* server/php/java/bridge/JavaBridge.java (getSession): Timeout in
	s.

	* ABOUT.HTM: updated from index.html

	* java_bridge.c (php_java_call_function_handler): mono string must
	be zero terminated.
	
2005-05-16  Boekemeier  <jostb@intern>

	* multicast.c (init): return error code if semaphores are not
	available.
	(php_java_multicast_backends_available): check error code.
	
	* php-java-bridge.te: Temporarily allow semaphores, until the new
	load balancer code is in place.
	
	* VERSION, php-java-bridge.spec: updated version to 2.0.6
	
	* README: dl() works again since 5.0.4.
	
	* test.php: dito

	* tests.php4/cache.php, tests.php4/utf8-2.php: added dl().

	* php-java-bridge 2.0.6 released
	
	
2005-05-15  Boekemeier  <jostb@intern>

	* INSTALL.WINDOWS: updated.

	* README: updated.

	* bind.c (test_server): zero out saddr (for old bsd).
	(java_test_server): likewise
	(java_test_server_no_multicast): likewise

	* java.c (PHP_MINIT_FUNCTION): likewise

	* multicast.c (php_java_init_multicast): likewise
	(php_java_multicast_backends_available): likewise
	(php_java_send_multicast): likewise

	* protocol.c: likewise

	* java.c (PHP_MINFO_FUNCTION): suppress obsolete entries on windows

	* multicast.c (php_java_semun): replaces union semun which is
	pre-defined on BSD
        (php_java_multicast_backends_available): rewritten for BSD.
	(php_java_sleep_ms): not used on windows, which doesn't have
	timeval.

	* php-java-bridge: start only two backends
	
	* client.c (setResultFromString): Avoid signedness warning
	(setException): likewise
	(GET_RESULT): likewise
	(begin): likewise

	* server/php/java/bridge/JavaBridgeClassLoader.java (findClass):
	verbose error message

	* php-java-bridge 2.0.6 released (windows version only)
	
2005-05-14  Boekemeier  <jostb@intern>

	* README: updated.

	* server/php/java/bridge/JavaBridge.java
	(next): Fixed typo.
	(ObjectToString): Use "[" instead of "<".  When displaying
	unencoded error strings a browser might confuse the "<" with a tag
	start.
	(getSession): Timeout was meant as seconds, not ms. The previous
	code destroyed the session 1440ms after creation.
	
	* server/php/java/bridge/JavaBridgeClassLoader.java
	(findClass): Verbose error message.

	* bind.c (java_test_server_no_multicast): Add a warning if session
	is lost. In any case, try to create a session on a local server
	first, then try multicast backends.
	
2005-05-13  Boekemeier  <jostb@intern>

	* multicast.c (enter, leave, init): New functions.
	(php_java_multicast_backends_available): Protect critical section.
	
2005-05-12  Boekemeier  <jostb@intern>

	* server/php/java/bridge/JavaBridge.java (next): prevent loop;
	object.getClass() returns the same object if object is
	java.lang.Class.

	* tests.php4/testClass.php: new Test for above fix.
	
	* server/php/java/bridge/TCPServerSocket.java (create):
	moved error handling to Listener.java
	
	* server/php/java/bridge/Listener.java (run): rewritten.
	(listen): Error handling from TCPServerSocket.java and close the
	multicast socket after an error so that the clients don't detect
	an open socket and interpret it as if multicast backends are
	available.

	* multicast.h (MAX_TRIES): Now 12 (from 120).

	* multicast.c (php_java_recv_multicast): Assume 30ms for a round-trip (from 1ms).
	(php_java_multicast_backends_available): Do not rely on socket defaults.
	(php_java_init_multicast): Switch off MC_LOOP, which is not necessary.

	* bind.c (java_test_server_no_multicast, java_test_server):
	rewritten; issue a warning after we could not connect to a backend
	after MAX_TRIES and continue.
	
	
2005-05-11  Boekemeier  <jostb@intern>
	
	* multicast.c
	(php_java_sleep_ms): New function.
	(php_java_multicast_backends_available): New function
	
	* multicast.h (MAX_TRIES, MAX_PENALTY, LOAD_PENALTY, MAX_LOAD):
	New consts

	* multicast.h (GROUP_PORT): Changed to 9168.

	* server/php/java/bridge/Listener (GROUP_PORT): Changed to 9168.
	
	* bind.c (java_test_server): Do not share a single mc socket among
	all instances.
	
	* init_cfg.c.in (java_init_cfg, java_destroy_cfg): Do not share a
	single mc socket among all instances.

	* init_cfg.c.in (java_init_cfg): Check if multicast backends are
	available.
	
	* bind.c (java_test_server, java_test_setver_no_multicast): In the
	worst case all backends are busy and wait up to MAX_PENALTY. Code
	rewritten.

	* multicast.c (php_java_recv_multicast): Use 1ms response timeout.
	
	* php_java.h (mc_socket): Renamed to have_mc_backends.

	* server/php/java/bridge/JavaBridge.java (run): Notify Listener.
	
	* server/php/java/bridge/Listener.java (LOAD_PENALTY, MAX_LOAD):
	New consts
	(run): Do not respond if load gets too high.

	* tests.php4/multicast.php: New test.
	

2005-05-09  Boekemeier  <jostb@intern>
         
	* server/php/java/bridge/JavaBridge.java
	(load, getLoad): changed to short
	(loadLock): Obsolete
	(run): Removed obsolete synchronized.

	* server/php/java/bridge/Listener.java
	(createResponse): load changed to short

	* server/php/java/bridge/JavaBridge.java
	(checkAccessible): New method
	(Invoke, GetSetProp): Use checkAccessible instead of doing
	everything on top-level.

	(getSession): set timeout.

	* server/php/java/bridge/Session.java
	(Session): Use Hashtable instead of Hashmap to synchronize the
	put/get/remove against each other.
	
2005-05-09  Boekemeier  <jostb@intern>

	* server/php/java/bridge/TCPServerSocket.java
	(create): Make IOExceptions in the multicast listener non-fatal.
	See PR1198286.

2005-05-07  Jost Boekemeier <jostb@intern>

	* ABOUT.HTM: Updated from index.html

	* README: Updated.

	* java.c (require): New function.
	(java_require): Alias for "java_set_library_path"
	(java_set_library_path): Use require.
	(java__destruct): Removed debug code.

	* update-about.sh: New file

	* server/php/java/bridge/JavaBridge.java
	(canModifySecurityPermission): New global.
	(MATCH_VOID_ICASE, MATCH_VOID_CASE): New symbols.
	(FindMatchingInterface, FindMatchingInterfaceVoid,
	FindMatchingInterfaceForInvoke,
	FindMatchingInterfaceForGetSetProp): New classes.
	(ClassIterator): rewritten to use FindMatchingInterface.
	(GetSetProp, Invoke): rewritten to use setAccessible(true). If
	that fails, because of security restrictions, re-start with the
	appropriate FindMatchingInterface thunk.  But in the usual case
	the performance should be much better.
	(run): Log connection close.
	
	* server/php/java/bridge/JavaBridgeClassLoader.java
	(updateJarLibraryPath): Renamed from setJarLibraryPath.
	(findClass, findResource): Re-added log messages.
	(findClass): add to the classes hash in the correct path.

	* server/php/java/bridge/LocalServerSocket.java (accept): Display bridge instance.
	
	* server/php/java/bridge/TCPServerSocket (accept): Display bridge instance.

	* server/php/java/bridge/Response.java (getFirstBytes): New method.
	(flush): Show only first bytes in debug output.

	* php-java-bridge/tests.php5/loadLib.php: Display test result.
	
	
	
	
2005-05-01  Jost Boekemeier <jostb@intern>

	* server/php/java/bridge/JavaBridgeClassLoader.java 
	(classesBlackList): New global.
	(resourcesBlackList): New global
	(findClass): Do not search sysurls if blacklisted.
	(findResources): Do not search sysurls if blacklisted.
	
	* server/php/java/bridge/JavaBridge.java (getInstance): Store
	args.

	* server/php/java/bridge/JavaBridge.java (findMatchingInterface):
	Search superclasses.
	
	* bind.c (java_get_server_args): Fixed typo, the displayed info
	was incorrect.
	
2005-04-30  Jost Boekemeier <jostb@intern>
	
	* ABOUT.HTM: New file.

	* multicast.c (php_java_recv_multicast): Use 1s timeout. Solaris9
	on X86 doesn't seem to support ms timeout!?
	
	* java.c (java_get_session): Allow external sessions.

	* multicast.c (java_test_server_no_multicast): Always use the
	backend stored in the session.

	* java.c (java_get_session): Pass gc_maxlifetime as default
	timeout to the session.

	* php-java-bridge: Start only 4 backends.  Users can add
	additional backends if they want.

	* php-java-bridge.spec: Updated comment.

	* server/php/java/bridge/JavaBridge.java (run): expire session.

	* server/php/java/bridge/Session.java (getSession): Added timeout.
	(expire): New procedure.

	* server/php/java/bridge/Listener.java (createResponse): Give idle
	backends a chance.
	
	
2005-04-29  Jost Boekemeier <jostb@intern>

	* VERSION, php-java-bridge.spec: New version

	* INSTALL.WINDOWS, INSTALL, README: update version

	* PROTOCOL.TXT: Bit 0 is now reserved.

	* README: Updated from index.html

	* bind.c (java_get_server_args): If backend pool (socketname is
	off), show the command to add another backend to the pool.
	(java_test_server): Check local server first, special init
	handling for local server autostart.
	(java_test_server_no_multicast): New function used for
	java_get_session().

	* client.c (stack_elem): New struct.
	(parse_ctx) maintain a container stack.
	(begin): Use a real stack for multi-dimensional arrays.
	(end): pop
	(handle_request): init stack

	* client.c (try_connect_to_server): Do not open a connection from
	the garbage collector callback.
	(java_connect_to_server_no_multicast): New function for
	java_get_session().
	(java_connect_to_mono_no_multicast): New function for
	mono_get_session():

	* java.c (PHP_RINIT_FUNCTION): Throw error if connection open.
	(PHP_RSHUDOWN_FUNCTION): Set is_closed flag.
	(java_set_file_encoding): New public function.
	(java_get_session): Rewritten.
	(php_java_alloc_globals_ctor): init is_closed flag.

	* multicast.c (readInt): New function.
	(writeInt): New function.
	(php_java_init_multicast): Fixes for Solaris and MAC OSX
	(php_java_send_multicast): Send current time.
	(php_java_recv_multicast): No-response timeout to 90ms; gives the
	garbage collector a chance. Discard broken or timed out packets.

	* multicast.h (MAX_LOAD): Changed to 12 (from 20)

	* php-java-bridge (inst): service status command works again.
	(is_multicast): start 5 backends if socketname is switched off.

	* php_java.h (is_closed): New global
	(session_is_new): New global

	* update_policy.sh.in (setfiles): tag java.libdir/lib

	* server/MNakefile_unix.am: Added php/java/bridge/Listener.java

	* RunJavaBridge.c.in: Updated to support multicasts.

	* server/php/java/bridge/JavaBridge.java (fileEncoding): New global.
	(setResult): Use fileEncoding.
	(setFileEncoding): New function.
	(select): Use fileEncoding
	(coerce): Use fileEncoding.
	
	* server/php/java/bridge/JavaBridge.java
	(coerce): coerce collection to map.
	(ClassIterator): New Class.
	(ObjectClassIterator): New Class
	(ClassClassIterator): New Class
	(Invoke): Rewritten to use iterator
	(GetSetProp): Rewritten to use iterator

	* server/php/java/bridge/JavaBridge.java
	(getSession): Rewritten

	* server/php/java/bridge/JavaBridgeClassLoader.java
	(JavaBridgeClassLoader): Must start with an empty list for
	jpackage compatibility. User is required to name the .jar files
	explicitly (via java_set_library_path).
	(findClas): New method for backwards compatibility.
	(findResource): New method for backwards compatibility.
	(setJarLibraryPath): If .jar file is not absolut, search sys
	directories (/usr/share/java and php-config-dir/lib/)
	(initClassLoader): Do not add .jars anymore.
	(addSysUrls): New function.
	(classes): Hash re-added.  It was thrown out in 2.0.5 when we
	extended from URLClassLoader.

	* server/php/java/bridge/Listener.java (feature): New global autoconf var.
	(createResponse): Send back timestamp.
	(run): timestamp

	* server/php/java/bridge/Parser.java (bridge): New global.
	(CALL_BEGIN): Display debug as UTF8 data
	(CALL_END): Display debug as UTF8 data

	* server/php/java/bridge/ParserString.java (getUTF8StringValue): New function.
	(toString): Use UTF8 encoding

	* server/php/java/bridge/Request.java (push): Do not threat
	non-composite arguments that follow a composite as composites.

	* server/php/java/bridge/Response.java (Response): Use our fileEncoding.
	(setResult): pass fileEncoding
	(getEncoding): new function.
	(getBytes): new function.
	(writeString): new function.
	(flush): Display output in UTF8
	
	* server/php/java/bridge/TCPServerSocket.java 
	(findFreePort): New function
	(TCPServerSocket): If port==0, use findFreePort

	* server/php/java/bridge/Util.java
	(UTF8): New const
	(println): Display output in UTF8
	
	
2005-03-27  Jost Boekemeier <jostb@intern>

	* VERSION, php-java-bridge.spec: New version
	
	* multicast.c: Added windows ifdefs 

	* php-java-bridge 2.0.5 released.

2005-03-27  Jost Boekemeier <jostb@intern>

	* multicast.c, multicast.h: New files

	* bind.c (test_server): New function.

	* client.c (begin): Removed obsolete GET_RESULT.
	(try_connect_to_server): pass down spec (M for Mono)
	(java_connect_to_mono): New function

	* config.m4: multicast.c added.

	* init_cfg.c.in: Init multicast socket.

	* server/php/java/bridge/JavaBridge.java (ObjectToString): New function.

	* java.c (java_monoclass): Removed dup.
	(__tostring): The automatic type conversions now use
	ObjectToString. -- We want to avoid support calls when someone
	attempts to "format" binary data e.g.: echo $byteArrayOutputStream + " ".
	(cast): dito.

	* java_bridge.c (php_java_call_function_handler): Check for mono
	object, send out a multicast to find an Mono or NET VM. 
	
	* parser.c (parse): <P> must call BEGN, not END. This fixes a bug
	in the 2.0 protocol which was not able to parse arrays into PHP 4.

	* server/php/java/bridge/Parser.java (parse): dito.

	* server/php/java/bridge/JavaBridgeClassLoader.java: Inherit from
	URLClassLoader.

	* server/php/java/bridge/Request.java (push): Array: An empty array is
	not a null argument.

	* tests.mono+net/load_assembly.php: Fixed typo.

	* tests.mono+net/params.php: Copied from parms.php
	
	* tests.mono+net/parms.php: Removed.

	* tests.php5/ShowResourses.java, tests.php5/showResources.jar,
	tests.php5/showResources.php: New tests.

	* tests.php5/arrayArray.php4: New PHP4 array test.

	* tests.php5/printToOutputStream.php: New test

	* server/php/java/bridge/TCPServerSocket.java (create): Start listener.

	* server/php/java/bridge/Listener.java: New file.

	* server/php/java/bridge/JavaBridge.java (getLoad): New function.
	(run): Calculate load.
	(loadLock): Lock object

	* php-java-bridge.multicasts.te: New file

	* tests.php4/cache.php, tests.php4/utf8.php,
	tests.php4/utf8-2.php, tests.php4/utf8-3.php,
	tests.php4/xmlTransform.php, tests.php4/sendArray.php,
	tests.php4/sendHash.php: New files

	* tests.php5/loadLib.php, tests.php5/utf8.php: New tests.
	
2005-03-15  Jost Boekemeier <jostb@intern>

	* java.c (php_java_jsr_class_class_entry): Obsolete.
	(mono, mono_class, monoclass): New methods.
	(php_java_call_function_handler4): Mono support added.
	(PHP_MINIT_FUNCTION): Mono support added.

	* server/php/java/bridge/JavaBridge.java (select): Prefer more
	specific args.

	* tests.mono+net/bench.php, tests.mono+net/excel_antitest.php,
	tests.mono+net/helloworld.php, tests.mono+net/load_assembly.php,
	tests.mono+net/params.php, tests.mono+net/parms.php,
	tests.mono+net/sample_lib.cs, tests.mono+net/sample_lib.dll,
	tests.mono+net/stack.php: New tests.
	
2005-03-13  Jost Boekemeier <jostb@intern>

	* php_java_snprintf.c: New file

	* protocol.c: Use php_java_snprintf() in order to avoid surprises
	with certain locales (DK locale formats 1234.00 as 1.234,00).

	* protocol.c (PRECISION): New const.
	(Double): Use precision.

	* config.m4: Add php_java_snprintf.c

	* client.c (begin): Use send_string_to_double in order to avoid
	surprises with certain locales.

	* php-java-bridge 2.0.4 released.
	
2005-03-11  Jost Boekemeier <jostb@intern>

	* INSTALL.WINDOWS: java.hosts and module version supported. CGI
	version still recommended.

	* bind.c (java_test_server): java.hosts for windows.

	* client.c (try_connect_to_server): new function.
	(java_connect_to_server, java_try_connect_to_server): Use it.

	* protocol.c (GROW_QUOTE): Didn't work if len < 10.
	(replaceQuote): Spell "&quote;" as "&quot;"
	(java_createSecureEnvironment): Store server_name.
	
	* java.c (PHP_RSHUTDOWN_FUNCTION): Free server_name.
	(java_get_server_name): Use java_try_connect_to_server.
	
	* php_java.h (closesocket): Alias for close on windows in order to
	shut down the windows socket.

	* php-java-bridge.spec, VERSION: New version
		
	* php-java-bridge 2.0.3 released
	
	
2005-03-09  Jost Boekemeier <jostb@intern>

	* PROTOCOL.TXT: Document Bit 0 as reserved.

	* parser.c (parse): Removed blob.

	* protocol.c (GROW): Grow by no less than required size.
	(replaceQuote): &amp must be quoted, too.
	(String): Require _len.
	(String): Do not use sprintf to print the string, it may binary
	data.

	* server/php/java/bridge/JavaBridge.java (setResult): Do not
	convert binary data into a string.
	
	* server/php/java/bridge/Parser.java (parse): Removed blob.

	* server/php/java/bridge/Request.java (begin): Do not convert
	binary data into a string.

	* server/php/java/bridge/Response.java (OutBuf): New inner class
	replaces StringBuffer in order to deal with binary data.

	* tests.php5/binaryData.php, tests.php5/BinaryData.java,
	tests.php5/binaryData.jar: New tests.

	* tests.php5/session.php: Added dl().
	
	* java.c (java_get_server_name): New user function.

	* README: Document java_get_server_name.

	* php-java-bridgge.spec, VERSION: New version
	
	* php-java-bridge 2.0.2 released. It replaces 2.0.1 which was not
	able to deal with binary data.
	
	
2005-03-06  Jost Boekemeier <jostb@intern>

	* server/Makefile_unix.am: Updated sources list.
	
	* php-java-bridge 2.0.1 released
	
	
2005-03-06  Jost Boekemeier <jostb@intern>

	* java.c (java_session_get): Renamed to java_get_session.
	(java_class_functions): Renamed to php_java_class functions in
	order to check for java objects.
	(call_function_handler): Renamed to
	php_java_call_function_handler4.
	
	* tests.php5/session.php: Renamed java_session_get to
	java_get_session.
	
	* java_bridge.c (is_type): Use php_java_class_functions and
	php_java_call_function_handler4 (for php4) to determine if object
	is a java object.
	(is_java_type): Obsolete.
	(writeArguments, writeArgument, php_java_invoke): Pass additional
	boolean to ignore non-java objects.

	* java.c (java_get_session): Accept $_SESSION variable and ignore
	all non-java objects.

	* INSTALL.WINDOWS: New file.

	* php-java-bridge.spec, VERSION: Updated version.

	* java.c (java_last_exception_get, java_last_exception_clear, java_set_library_path, java_instanceof): Re-enabled.
	
	
2005-03-05  Jost Boekemeier <jostb@intern>

	* server/php/java/bridge/Session.java: New file.
	
	* tests.php5/session.php: New test.

	* PROTOCOL.TXT: Renamed Unref to Destroy.

	* client.c (setResultFromException, setResultFromObject): Do not
	store head of resource list but the object handle so that we can
	store java values in the $_SESSION var. Remove obsolete resoure
	list.
	
	* java_bridge.c (php_java_destructor): No longer necessary.
	
	* java.c (le_jobject): No longer necessary.

	* client.c (is_java_type, is_type): New functions.
	(java_get_jobject_from_object): Use is_type, return 0 if object is not a java object.
	(php_java_invoke): Issue a warning if received a non-java object.
	
	* java.c (check_type): Renamed to is_type and moved to client.c
	(java_session_get): New function.
	(MINIT): register_list_destructors no longer necessary.
	
	* parser.c (parse): Renamed VOID to VOJD. Reason: winsock2.h
	exports a VOID type... oh billy boy...
	(parse): Use ssize_t for socket operations.
	(parse): Use recv instead of read (for winsock2).
	(parse): Add Solaris' errno=EINTR nonsense.
	(parse): Correct typo in blob handling.

	* server/php/java/bidge/Parser.java (parse): Updated with code from parser.c.
	
	* server/php/java/bridge/*.java: Replaced all Hashtables by HashMap in order
	to store null values.

	* server/php/java/bridge/JavaBridge.java (getSession): New method

	* server/php/java/bridge/JavaBridge.java
	(Invoke, GetSetProp, CreateObject): Removed obsolete "connection
	abort" handler. Store candidates instead of matches for error
	reporting.

	* server/php/java/bridge/GlobalRef.java (get): Throw NullPointer
	if value is null (we do not store null values in the global ref, a
	null is represented as id="0" or id="").

	* server/natcJavaBridge.c (send, recv): Add solaris' EINTR handling.

	* protocol.c (flush): Use send instead of write (for winsock2).
	(flush): Add slowlaris EINTR handling
	
	* bind.c, client.c, java_bridge.c: Add MINGW32 #ifdefs.

	* protocol.h: Default level is now 2 (on unix).

	* protocol.c (replaceQuote): Fixed typo; store correct len and terminate with 0.

	* update_policy.sh.in (EXTENSION_DIR): Replace all values in a line.

	* examples/clients/README, examples/clients/getProperties.py,
	examples/clients/getProperties.scm,
	examples/clients/listToArray.scm,
	examples/clients/formatArray.xsl: New client examples written in
	Scheme and Python.

	* server/RunJavaBridge.c.in (usage, main): Updated for 2.0.0
	
	
2005-02-13  Jost Boekemeier  <jostb@intern>

	* PROTOCOL.TXT: New file

	* bind.c (java_test_server): Removed reference to jni

	* java.c (PHP_RSHUTDOWN_FUNCTION): Removed jni.
	(java_last_exception_get): disabled
	(java_last_exception_clear): disabled
	(java_set_library_path): disabled
	(java_instanceof): disabled 
	(php_java_alloc_globals_ctor): Removed jni

	* java_bridge.h, php_java.h: Removed jni

	* java_bridge.c, client.c: Removed jni, new protocol added

	* protocol.c, parser.c, parser.h: New files.

	* protocol.h: Removed JNI protocol, added new XML protocol.

	* proxyenv.c: Removed

	* config.m4: Added protocol.c, parser.c
	
	* server/JavaBridge: Removed

	* server/natcJavaBridge.c: Removed JNI protocol.
	
	* server/php/java/bridge/GlobalRef.java,
	server/php/java/bridge/IDocHandler.java,
	server/php/java/bridge/JavaBridge.java,
	server/php/java/bridge/JavaBridgeClassLoader.java,
	server/php/java/bridge/Parser.java,
	server/php/java/bridge/ParserString.java,
	server/php/java/bridge/ParserTag.java,
	server/php/java/bridge/PhpMap.java,
	server/php/java/bridge/Request.java,
	server/php/java/bridge/Response.java,
	server/php/java/bridge/Util.java: New files

	* server/Makefile_unix.am: Compile new bridge classes.

2005-02-05  Jost Boekemeier  <jostb@intern>
	
        * php-java-bridge 1.0.8 released
	
2005-02-04  Jost Boekemeier  <jostb@intern>

	* INSTALL: document worker MPM

	* client.c, java.c: ZTS

2005-02-03  Jost Boekemeier  <jostb@intern>

	* server/JavaBridge.java (load, findClass): Store reason for
	failure.
	
	* tests.php5/ArrayArray.java, tests.php5/arrayArray.jar,
	arrayArray.php: New tests.

	* php-java-bridge.fc: Removed

	* php-java-bridge.fc.in: New from php-java-bridge.fc

	* Makefile.frag (install_policy): Removed

	* update_policy.sh.in: New from Makefile.frag

	* INSTALL, README: Section about SELinux updated.

	* config.m4: Create php-java-bridge.fc and update_policy.sh.

	* php-java-bridge.te: Updated.

	* php-java-bridge.spec: Updated SELinux section.

	* examples/j2ee/globals.php, examples/j2ee/README: Cleaned up.
	
	* tests.m4/function_checks.m4 (sem_init): Add real-time lib if
	necessary (solaris x86).
	
2005-02-01  Jost Boekemeier  <jostb@intern>

	* server/JavaBridge.java (findResources): New method.
	
	* java.c (iterator_current_key, init_current_data): PHP does not
	necessarily return "clean" zvals. Zero out the allocated zval so
	that setResultFromObject can initialize it properly.  This fixes a
	bug in the iterator interface which was not able to iterate over
	arrays of non-primitive types.

	* java.c (javaclass): New method for jsr223 compatibility.
	(java_class_functions): Terminate array with a NULL entry.
	(create_exception_object): New from parent in order to implement
	object casting.
	(PHP_MINIT_FUNCTION): Use create_exception_object.
	
	
2005-01-28  Jost Boekemeier  <jostb@intern>
	
	* java.c (PHP_MINIT_FUNCTION): For java_class, javaclass and
	javaexception: Do not override parent methods with themselfs. PHP
	5.0.3 doesn't like that...
	
	* README: Updated windows install description.
	
	* config.m4: Embedding into PHP works again.  Use m4_include so
	that autoheader scans the included files.
	
	
2005-01-27  Jost Boekemeier  <jostb@intern>
	
	* tests.php5/exception.php: Extract cause.
	
	* README: Note about 5.0.3 dl() issue added.

	* test.php: Output phpinfo().

	* bind.c (use_wrapper): New function; we must call the SELinux
	wrapper if it exists.
	(java_get_server_string): New function.

	* java.c (get_server_args): Removed.
	(PHP_MINFO_FUNCTION): Use java_get_server_string instead of
	get_server_args.

	* php_java.h (java_get_server_args): Replaced by
	java_get_server_string.
	
	
2005-01-26  Jost Boekemeier  <jostb@intern>

	* INSTALL, README: Security Enhanced Linux (SEL) supported.

	* README: Removed support for Mac OSX. Recommend RHEL/IBM JDK1.4.1
	on Mac/PPC instead.
	
	* unsupported/gcc3.4-broken-jni-method-lookup.patch: New file.
	
	* unsupported/php5-crash-in-evaluator-shutdown_workaround.patch:
	Moved here.
	
	* examples/bench/bench.php, examples/bench/excel_antitest.php,
	examples/bench/exceltest.jar, examples/bench/ExcelTest.java,
	examples/bench/README: New files

	* examples/j2ee/documentBean.jar,
	examples/j2ee/documentClient.php, examples/j2ee/globals.php,
	examples/j2ee/README, examples/j2ee/src/DocumentBean.java,
	examples/j2ee/src/DocumentHome.java,
	examples/j2ee/src/DocumentRemote.java,
	examples/j2ee/src/Page.java, examples/j2ee/src/README,
	examples/j2ee/src/META-INF/ejb-jar.xml,
	examples/j2ee/src/META-INF/sun-ejb-jar.xml: New files.
	
	* examples/languages/scheme-demo.php, examples/languages/README: New
	files.

	* scheme-demo.php: Removed, now in examples.

	* tests.php5/bench.php, tests.php5/excel_antitest.php,
	tests.php5/ExcelTest.java, tests.php5/exceltest.jar: Removed, now
	in examples.
	
2005-01-25  Jost Boekemeier  <jostb@intern>

	* bind.c (java_get_server_args): Append library path.
	
	* client.c, java_bridge.c (ZEND_DECLARE_MODULE_GLOBALS): Removed.
	(ZEND_EXTERN_MODULE_GLOBALS): Added.

	* client.c (check_error): Removed.
	(java_connect_to_server): Do not call check_error, assume out of
	memory when the server cannot return global refs.
	
	* config.m4: Removed obsolete checks.

	* server/autogen.sh: Removed.
	
	* server/configure.gnu.in: New file, from autogen.sh.
	
	* config.m4: Create server/configure.gnu from configure.gnu.in

	* php-java-bridge: Only change LD_LIBRARY_PATH and PATH if the
	script is installed in one of the standard directories.  Invoke
	RunJavaBridge which is tagged with the SEL security context.

2005-01-24  Jost Boekemeier  <jostb@intern>

	* php-java-bridge.te, php-java-bridge.fc, RunJavaBridge.c.in: New
	files for Security Enhanced Linux.

	* server/Makefile_unix.am: Create RunJavaBridge.
	
	* Makefile.frag (install_policy): New target to install the
	SELinux policy files.

	* php-java-bridge.spec: Install SELinux policy files.

	* README: Update from index.html

	* README.GNU_JAVA: New file.

	* README: Note about UTF-8 added.

	* server/acinclude.m4: No longer include tests from PHP

	* server/JavaBridge.java (run, handleRequests): Pass down Hash.
	server/natcJavaBridge.c
	(connection_startup): Obsolete.

	* server/natcJavaBridge.c: Avoid calling JNI when logLevel is too
	low.
	(getObjectHash): New function.
	(handleRequest): Use getObjectHash() in order to avoid allocating
	a hash too often.

2005-01-07  Jost Boekemeier  <jostb@intern>

	* server/JavaBridge.java
	(CreateObject, Invoke, GetSetProp): The server must survive a out
	of memory conditions. Check for OutOfMemoryError and abort the
	client-connection immediately, release all memory the client has
	allocated without client-notification.

	* server/natcJavaBridge.c
	(Java_JavaBridge_handleRequest): Release object hash after
	OutOfMemoryError.
	
2005-01-05  Jost Boekemeier  <jostb@intern>

	* server/JavaBridge.java
	(setException): Store method name, object, and arguments, print
	original cause.
	(Invoke, GetSetProp, CreateObject): Pass name, object and
	arguments.

	* server/JavaBridge.java (argsToString): Check if args is null.

	* server/JavaBridge.java (GetSetProp): Invocation or field access
	may fail if object is class and getter/setter/field is not static.
	Throw a NoSuchFieldException if no getter/setter or field was
	found.

	* php-java-bridge: Do not destroy LANG, which is needed by the VM
	to select the default file.encoding (usually UTF-8).  If LANG is
	not set, use en_US.UTF-8 as default.
	
2005-01-04  Jost Boekemeier  <jostb@intern>

	* server/JavaBridge.java: Changed indent.
	
	* server/JavaBridge.java (getResource, findResource): New methods
	needed to load resources from the private classloader.
	
2005-01-02  Jost Boekemeier  <jostb@intern>

	* server/configure.in, config.m4: follow symlinks to find the
	include directories.
	
	* README: Updated documentation from index.html
	
	* php_java.h: Use php_config.h.

	* tests.m4/function_checks.m4: Removed checks already provided by
	php/php_config.h
	
	* init_cfg.c.in, bind.c, client.c, java.c, java_bridge.c,
	php_java.h: cfg is now a true global.
	
	* bind.c (java_start_server): Check server, start, wait.
	(java_wait_server): New function
	(java_test_server): New function
	
	* php_java.h (java_start_server, java_test_server): New functions.

	* client.c (java_do_test_server, java_test_server): Removed.

	* java.c (init_server): Removed.
	(PHP_MINIT_FUNCTION): Call java_start_server instead of
	init_server.

	* init_cfg.c.in (init_socket): Generate a unique socketname in the
	Linux abstract namespace.
	
	* server/configure.in: AC_CONFIG_AUX_DIR before AM_INIT_AUTOMAKE,
	required by automake 1.8

	* tests.m4/threads.m4, tests.m4/function_checks.m4: Avoid
	"underquoted" warnings.
	
2004-12-19  Jost Boekemeier  <jostb@intern>

	* client.c, bind.c, server/natcJavaBridge.c, server/JavaBridge.java, server/acinclude.m4, server/configure.in, config.m4, java.c: 
	Support credentials on Linux, only.

	* client.c (java_connect_to_server): Connect if not already
	connected. Replaces all old init checks.
	
	* java.c (PHP_RINIT_FUNCTION): Don't connect until a java method
	is called.
	
	* client.c, bind.c, java.c: Use java_connect_to_server.

	* init_cfg.c.in (init_socket): Fixed typo.

	* php-java-bridge: Require sh instead of bash. Create PID in /tmp
	if /var/run does not exist.

	* README: Require GNU make.

	* README: Removed documentation about secure mode. Privilege
	dropping cannot be supported in java. Users should use java
	security instead.  In the future we'll use our bridge JVM as a
	relay to access beans deployed in WebSphere, WebLogic or 9iAS and
	these AS have their own policy anyway.

	* server/configure.in: Use links instead of modifying the include
	path. Require versions for automake and autoconf.

	* server/JavaBridge.java (now): New function to workaround a bug
	in GNU java (calendar not available).

	* server/JavaBridge.java (println): New function.

	* server/JavaBridge.java (select): enum is a keyword since 1.5
	
	
2004-12-12  Jost Boekemeier  <jostb@intern>

	* tests.m4/java_check_abstract_namespace.m4,
	tests.m4/java_check_struct_ucred.m4: New tests.
	
	* client.c, bind.c, server/natcJavaBridge.c, server/JavaBridge.java, server/acinclude.m4, server/configure.in, config.m4, java.c: 
	Use abstract namespace and struct ucred, if available.  This means
	that a) the communication channel is no longer visible and b) that
	only authorised users can connect to the server (checked by the
	kernel). 

	* server/JavaBridge.java (println): New procedure.
	(HandleRequests): Log the user ID and the group ID of the user
	that connects to the PHP/Java Bridge.  

	* tests.m4/function_checks.m4: Check for AF_LOCAL and PF_LOCAL.
	
	
2004-12-05  Jost Boekemeier  <jostb@intern>

	* php-java-bridge 1.0.7 released
	

2004-12-04  Jost Boekemeier  <jostb@intern>

	* java.c (function_entry): Set the arginfo for __call, __get, __set.

	* php5-crash-in-evaluator-shutdown_workaround.patch: New file.

2004-12-03  Jost Boekemeier  <jostb@intern>

	* server/natcJavaBridge.c (Java_JavaBridge_startNative): Do not
	catch SIGPWR, which is used by the Boehm GC.
	(post): Next kill should kill.

	* bind.c (wait_for_daemon): kill three times, if necessary.

	* client. (handle_request): Do not discard retval for PHP 4.

2004-12-01  Jost Boekemeier  <jostb@intern>

	* php_wrapper.h: New file 

	* java.c, bind.c, client.c, java.c, java_bridge.c, java_bridge.h,
	php_java.h, proxyenv.c: Do not use php.h directly but include
	php_wrapper.h to avoid problems with NDEBUG.

	* README: Replaced NDEBUG with JAVA_COMPILE_DEBUG

	* proxyenv.c, protocol.h
	(CallObjectMethod, CallVoidMethod, NewObject): Functions removed.
	(CallObjectMethodA, CallVoidMethodA, NewObjectA): New functions.
	
	* java.c, client.c, java.c, java_bridge.c: Use new functions in
	order to avoid varargs problems.

	* client.c (setResultFromException, setResultFromObject): Fix
	memory leak.

	* client.c (setException): correctly set the result, then throw
	and exception.

	* client.c (java_connect_to_server), java.c
	(PHP_RSHUTDOWN_FUNCTION): Global ref for the reflect_class.

	* php_java.h, java.c (php_java_class_class_entry): New global.
	
	* java.c (java__destruct): Issue a warning if PHP 5 calls the
	destructor after the module doesn't exist anymore.  -- PHP 5 first
	unmaps the module and then shuts down the evaluator which in turn
	calls the destructors for the objects it manages.  This is a bug
	because the classes and their handlers do not exist anymore.  If
	the module was loaded via dl(), PHP 5 will crash in shutdown.
	(java_instanceof): check for object class or class class.
	
	* java.c (create_object): Use ALLOC_HASHTABLE instead of
	ALLOC_HASHTABLE_REL.
	(iterator_current_key): PHP 5 wants the string length +1.

	* java_bridge.c (php_java_getset_property): Remove transaction
	(php_java_get_property_handler): Protect by transaction.
	(php_java_getset_property): Protect by transaction.

	* php-java-bridge.service: Changed description.

	* protocol.h (LOGFILE): New constant

	* server/natcJavaBridge.c, server/JavaBridge.java (trampoline):
	Return if communication is broken.
	(openLog): New function.

	* server/JavaBridge.java (coerce): Better error reporting.
	(argsToString): New function.
	(select): Identify component type.

	* tests.php/ArrayToString, tests.php5/ExcelTest.java,
	tests.php5/arrayToString.php, tests.php5/arrayToString.jar,
	tests.php5/bench.php, tests.php5/excel_antitest.php: New files.
	
2004-11-28  Jost Boekemeier  <jostb@intern>

	* test.php: use <br>
	
	* php-java-bridge.spec: test.php added
	
	* java_bridge.c (java_get_jobject_from_object): new function.
	
	* server/JavaBridge.java (handleRequest, HandleRequest,
	trampoline, Trampoline): New methods.
	(getPhpMap): Cast null to (Object)null in order to appease gnu
	java. Pass value, not this.
	(printStackTrace): Print trace if fatal or level >=2

	* client.c (java_instanceof): rewritten.
	(java__destruct): new function.


	Until now local variables were not deallocated until script
	termination.  A long running php script could provoke out of
	memory conditions on the server side. In order to allow long
	running scripts and in order to make client side programming
	easier and more robust, the server now maintains both, global
	_and_ local refs.  The JNI DeleteLocalRef should not be used
	anymore. To protect variables from beeing garbage collected, the
	new protocol requests BEGIN/END_TRANSACTION(env) must be used.  If
	the client does not call END_TRANSACTION, the server will
	automatically terminate all transactions at the end of the
	script. If the client does not call BEGIN_TRANSACTION and calls a
	method that creates and returns a new object, the object will be
	reclaimed immediately after the client has received it
	(i.e. the received object becomes invalid). Server replies
	(protocol #101..110) are an exception; the values they return
	remain valid until client acknowledges the reply (as usual).
	
	* protocol.h, proxyenv.c (DELETELOCALREF, DeleteLocalRef): Removed
	(BEGIN_TRANSACTION, END_TRANSACTION): New macros
	(TRANSACTION_BEGIN, TRANSACTION_END): New constants

	* server/natcJavaBridge.c (trampoline, handleRequest): New globals.
	(DELETEGLOBALREF): Removed.
	(TRANSACTION_BEGIN, TRANSACTION_END): New protocol requests.
	(handle_request_impl): Removed. (replaced by handleRequest)
	(handleRequest): New function
	(trampoline): New function
	(handleRequests): Rewritten (code moved to trampoline)
	(javabridge): Define handleRequest and trampoline
	
	* client.c (java_connect_to_server, java_set_library_path,
	java_instanceof, offsetExists, offsetGet, offsetSet, offsetUnset,
	cast, iterator_move_forward, get_iterator,
	php_java_call_function_handler, php_java_makeObject,
	php_java_getset_property): Use TRANSACTION_BEGIN/END instead of
	DeleteLocalRef. Use java_get_jobject_from_object.
	
	
2004-11-26  Jost Boekemeier  <jostb@intern>

	* php-java-bridge: use sh to start the sub-process so that only
	one "php-java-bridge" process appears in the process list.

	* java.c, php_java.h (php_java_handlers, create_object, cast): New
	functions/globals for PHP 5.
	* tests.php5/toString.php: New test

	* server/JavaBridge.java (getPhpMap): correct documentation.

	* server/natcJava.c, server/JavaBridge.java, client.c
	(nextElement, hashUpdate, hashIndexUpdate, setResultFromArray):
	Replaced by the new PHP 5 iterator and array interfaces. -- These
	functions should have never been written, they copied entire
	arrays or hash tables from java to PHP.  But we have to keep them
	for PHP 4 for backward compatibility with ext/java.  They even
	caused trouble in the past, see change log entries from 2004-09-09
	and 2004-09-19, where we had to correct a problem interited from
	the original PHP 4 ext/java extension.
	
2004-11-24  Jost Boekemeier  <jostb@timon.intern>

	* instanceof.php, iteratorInterface.php, arrayInterface.php,
	array.php, Array.java, array.jar: new files in tests.php5
	
	* client.c (handle_request): Do not discard null results for PHP 5

	
	PHP 5 Iterator interface:
	
	* php_java.h (clearEx, lastEx, setJarPath, getPhpMap, invoke, gsp,
	co, hasMore, getType, moveForward): New globals.
	
	* client.c (java_connect_to_server): Init globals
	
	* java_bridge.c, java_bridge.h (php_java_invoke): New function.
	
	* java_bridge.c (php_java_call_function_handler): Use globals
	
	* java.c (java_iterator, iterator_dtor, iterator_valid,
	iterator_current_key, init_current_data, iterator_move_forward,
	java_iterator_funcs, get_iterator): New functions/structures.
	(PHP_MINIT_FUNCTION): Rewritten.
	
	* server/JavaBridge.java (PhpMap): New abstract class.
	(getPhpMap): Factory.
	
	* protocol.h, proxyenv.c, server/handleRequest.c (IsInstanceOf):
	New protocol request.
	
	* php-java-bridge.spec, server/MakefileUnix.am: Fiddle with the
	new generated JavaBridge$$foo1,2,3xyz output classes. Fortunately
	they don't have slashes or backslashes in their names ...

	
	PHP 5 array interface:
	
	* java.c (offsetExists, offsetGet, offsetSet, offsetUnset,
	arginfo_array_offsetSet, arginfo_array_offsetGet): New
	functions/structures for PHP 5.
	(PHP_MINIT_FUNCTION): Rewritten.
	
	
	* server/natcJavaBridge.c (handle_request): Fixed typo.
	
2004-11-21  Jost Boekemeier  <jostb@intern>

	* README, server/natcJavaBridge.c, server/JavaBridge.java,
	INSTALL, client.c, java_bridge.c, java_bridge.h, java_bridge,
	protocol.h, proxyenv.c, java.c: New "java_class" constructor.
	
2004-11-20  Jost Boekemeier  <jostb@intern>

	* server/JavaBridge.c (findClass): Use String.valueOf instead of
	.toString so that we get the proper ClassNotFoundException instead
	of a null pointer exception.
	
2004-11-18  Jost Boekemeier  <jostb@intern>

	* README: Removed sections about Sun's JSR 223 and outdated notes
	from Sam Ruby.

	* VERSION, php-java-bridge.spec: Version

	True try/catch handling.
	* client.c, server/natcJavaBridge.c, server/JavaBridge.java: Pass
	jthrowable to client.
	* client.c (setResultFromException): New method
	(setException): Call setResultFromException with the jthrowable object

	New class: java_exception
	* java.c, php_java.h (php_java_exception_class_entry): New variable
	* java.c (PHP_MINIT_FUNCTION): New class
	
	Display java objects
	* java.c (java_class_functions): New entry
	(java__tostring): New function

	* java_bridge.c (checkError): Disable for PHP5

	* tests.php5/exception.php: Rewritten

	* tests.php5/printStackTrace.php: New file
	
2004-11-16  Jost Boekemeier  <jostb@intern>
	
	PHP 5 supported
	* java_bridge.h, java_bridge.c (php_java_call_function_handler,
	php_java_set_property_handler, php_java_get_property_handler),
	php_java.h (php_java_class_entry): rewritten to use PHP 5 style
	* java.c (javajava, java__call, java__set, java__get, make_lambda): New functions (PHP 5)
	(call_function_handler, get_property_handler, set_property_handler): New functions (PHP 4)
	(java_class_functions): New structure
	(PHP_MINIT_FUNCION): rewritten
	(PHP_MSHUTDOWN_FUNCTION): rewritten

	* java_bridge.c (wait_for_daemon, php_java_shutdown_library): removed
	* bind.c (wait_for_daemon, php_java_shutdown_library): new from java_bridge.c
	* client.c (swrite, sread, id): removed
	* proxyenv.c (java_swrite, java_sread, java_id): new from client.c

	* client.c (CFG_JAVA_SOCKET_INET): Fixed typo

	The PHP 5 object system revealed a bug in the core protocol: If
	someone managed to send a PHP array with an PHP OBJ type in it, the
	client stopped working immediately.
	* server/natcJavaBridge.c (handle_request NEWOBJECT): Accept a count
	(short), not a length (size_t).
	
	
2004-11-11  Boekemeier  <jost2345@intern>

	* server/natcJavaBridge.c, sio.c, sio.h, protocol.h, java.c, init_cfg.c.in, client.c: 
	Disable threads and use TCP sockets on windows.
	
2004-11-03  Boekemeier  <jost2345@intern>

	* init_cfg.c.in (java_destroy_cfg): Free the memory _we_ have
	allocated, not the memory that apache has allocated. Otherwise
	apache 2.0 will loop in malloc_consolidate.
	* java.c (PHP_MSHUTDOWN_FUNCTION): Code re-enabled.

	* server/JavaBridge.java (init): Log the log file name only if
	level >= logdebug

2004-11-02  Jost Boekemeier  <jostb@intern>

	* java.c (PHP_MSHUTDOWN_FUNCTION): Reverted last change (code
	disabled). This caused a loop in malloc_consolidate in apache 2.0.
	
	* php-java-bridge 1.0.6a released
	
	
2004-10-31  Jost Boekemeier  <jostb@intern>

	* bind.c (java_start_server): Protect guard; a dead guard isn't
	really useful.
	
	* server/natcJavaBridge.c 
	(Java_JavaBridge_startNative): Removed debug code.
	(Java_JavaBridge_handleRequests): Cleanup.

	* php-java-bridge 1.0.6 released.

2004-10-30  Boekemeier  <jost2345@intern>

	* server/natJavaBridge.c (java_bridge_main_gcj): Correct typo.
	
	* server/natcJavaBridge.java (readChunks, read): New functions
	(load): Use these to work around a bug in GNU java

	* server/java.c (usage): New function

2004-10-28  Boekemeier  <jost2345@intern>

	* README: Document java.log_level
	
	* server/natcJavaBridge.java: log jars as info, not debug.

	* server/Makefile.am: Removed
	* server/Makefile.in: New file

	* server/java.c: Print usage().
	
2004-10-26  Boekemeier  <jost2345@intern>

	Split the unix and windows functionality into two makefiles to
	work around a problem in autoconf
	* server/Makefile_unix.am, server/Makefile_windows.am: New files
	* server/Makefile.am: Rewritten
	* server/autogen.sh: return value from autoconf

2004-10-24  Jost Boekemeier  <jostb@diego.intern>

	* README: Document java_set_library_path
	* java.c, scheme_demo.php: Renamed java_set_jar_library_path to java_set_library_path
	
	* server/JavaBridge.java, server/natcJavaBridge.c, server/configure.in: Load libraries from /usr/share/java or from ext_dir/lib

	* ChangeLog: Changed order, latest at top

	* config.m4: Do not build DLLs for win98

	* server/acinclude.m4: rewritten.

	* server/configure.in: AC_PROG_LIBTOOL should recognize
	AM_PROG_GCJ
	
2004-10-23  Jost Boekemeier  <jostb@diego.intern>

	Added support for Solaris 64 and Solaris broken stdio.
	* protocol.h, proxyenv.c, client.c, natcJavaBridge.c: Use SFREAD ... instead of fread.
	* sio.c, sio.h: New files
	* tests.m4/function_checks.m4, tests.m4/java_check_broken_gcc_installation.m4, tests.m4/java_check_broken_stdio_buffering.m4, tets.m4/threads.m4: New files

	* LICENSE: Correct author.

	Correct classpath problem
	* natcJavaBridge.c, client.c: Client receives the bridge instance as first element.
	* JavaBridge.java: Start a new thread, set the context classloader on java level.
	* natcJavaBridge.c: Do not call attachCurrentThread, which is broken in gcj.

	Added support for static binaries.
	* natcJavaBridge.c, bind.c: Invoke jniRegisterNatives.

	Use GNU autoconf to configure the server part separately. Share the
	test macros from PHP and the java module with the server part.
	* Makefile.frag: rewritten
	* server/acinclude.m4, server/autogen.sh, server/configure.in: new files
	* config.m4: Include all tests in tests.m4.

	Win98 support.
	* sio.h: Do not depend on HAVE_CONFIG_H
	* natcJavaBridge: Win98 does not support sigwait

	* function_checks.m4 (lsocket): test rewritten

	* README: Solaris, 64 bit VM's and Win98 are supported
	
2004-09-27  Jost Boekemeier  <jost2345@mail.yahoo.de>

	* JavaBridge.java (findClass): Store the classes into a weak-value 
	hash so that classes don't get loaded multiple times (some JVM's
	don't have a class GC).

	* natcJavaBridge (handle_request, connection_cleanup): Count
	the # of handles the client has aquired.

	* java_bridge.c (wait_for_daemon): gcj uses the 2 internaly(!), we
	must send it twice to kill it. 
	
2004-09-26  Jost Boekemeier  <jost2345@mail.yahoo.de>

	* natcJavaBridge.c (Java_JavaBridge_startNative): do not restart
	when signal arrived, this caused problems on some OS.

	It is now possible to set the library path at run-time e.g.:
	java_set_jar_library_path(";file:c:/test.jar;http://foo.com/xy.jar");
	* Javabridge.java (setJarLibraryPath, load, findClass): New methods.
	(CreateObject): Load classes via our own classloader.
	* java.c (java_set_jar_library_path): New function.
	* client.c (java_connect_to_server): Call constructor.
	* sample.php: Use new function.

	* java.c (java_last_exception_clear, java_last_exception_get):
	Check if java is initialized.

	* client.c (abort_on_error): Renamed to check_error.

	* client.c (java_do_test_server): Check return value from close().

	* php-java-bridge 1.0.5 released.

2004-09-23  Jost Boekemeier  <jost2345@mail.yahoo.de>

	Use a guard thread instead of a async signal to shutdown the server.
	* natcJavaBridge.c (mutex, cond, count, block): New variables.
	(exit_sig): removed
	(block_sig, enter, leave, guard_requests): New functions.
	(initGlobals): initialization added
	(handle_requests): update thread count
	(Java_JavaBridge_startNative): terminate after guard has terminated.
	* README: Note about dynamic loading via dl() added.
		
        The bridge must do its own resource tracking because php4 calls 
	the php_java_destructor too late (*after* rshutdown!).
	* java_bridge.c (php_java_destructor): Code disabled.
	* natcJavaBridge.c (enumClass, hashKeys, enumMore, enumNext): New
	globals.
	(initGlobals): initialization
	(connection_startup, connection_cleanup): New functions.
	(handle_requests, handle_request_impl, handle_request): Trace global
	refs.
	
2004-09-21  Jost Boekemeier  <jost2345@mail.yahoo.de>

        * java.c (PHP_MINIT_FUNCTION): Fixed a typo that caused a massive
	memory leak on the java side of the bridge.  The DeleteGlobalRef
	was never called and since Java does not release the memory when
	a client detaches from the VM (thanks, Sun!) the memory remained
	locked until the VM ran out of memory.

	* natcJavaBridge.c (Java_JavaBridge_startNative): Linux handles
	accept different than the BSD variants.  Check errno.

	Starting java as a daemon should solve the sub-process problem.
	* bind.c (java_start_server): Start java as a daemon, if possible.
	(readpid): New function.
	* java_bridge.c (php_java_shutdown_library): Wait for daemon
	(wait_for_daemon): New function
	* README: Delete the note about Apache 1.3.
	
	Correctly shut down the connection in rshutdown
	* java.c (PHP_RSHUTDOWN_FUNCTION): Delete global refs and close
	file descriptors.
	
2004-09-19  Jost Boekemeier  <jostb@diego.intern>

        Allocate pval's correctly, part II -- the previous change for 1.0.2
	was incorrect: the php interpreter could not work reliable anymore if nextElement,
	hashIndexUpdate or hashUpdate was called.
	* client.c (nextElement, hashIndexUpdate, hashUpdate): Increment the refcount.

	* php-java-bridge.spec, php-java-bridge.service, php-java-bridge:
	New file.

	* php.ini: Removed (now in php-java-bridge.spec).

	* INSTALL, LICENSE: New file.
	
	Starting the JVM from the web-server caused several problems.  
	Apache 1.3 even killed the server-part of the bridge.
	* README: Recommend to start the JVM separately and to hardcode the 
	java.socketname.
	* bind.c (java_start_server): Do not start the server part of the
	bridge if the user has hardcoded the java.socketname in java.ini.
	(can_fork): New function.

	* natcJavaBridge.c (handle_request): If the JVM ran out of memory
	do nothing, send back null-pointer.
	(exit_sig): Workaround for a bug in the IBM JVM. This VM should
	not hang anymore when started as a sub-process from Apache --
	starting the VM as a sub-process of Apache is now deprecated
	anyway.

	* php-java-bridge 1.0.4 released.
	

2004-09-15  Jost Boekemeier  <jost2345@mail.yahoo.de>

	* JavaBridge.java: The bridge now catches errors and runtime
	exceptions such as "class not found" and reports them to the
	client.

2004-09-12  Jost Boekemeier  <jost2345@mail.yahoo.de>

	* README: GNU Java supported

	The SUN Java implementation may store objects on the stack.
	Objects on the heap may reference them. So in this JVM we cannot
	simply longjmp to clear the stack, because some heap objects may
	still refer to dead locations.  The result would be that the VM
	will barf when the GC tries to follow these phantom references.
	* natcJavaBridge.c: Longjmp to the last savepoint, then return
	back to java, throw an exception to return to one of the three
	native main methods and then jump back to the loop.  This fixes a
	crash in the SUN VM which occured after apache has aborted the
	connection.

	* php-java-bridge 1.0.3 released.
	
2004-09-10  Jost Boekemeier  <jost2345@mail.yahoo.de>

	* java.c: Display empty string as ''.

	REL3 or RH9 running a non-NPTL kernel require to set the
	environment variable LD_ASSUME_KERNEL=2.4.19 in order to run
	jdk1.4 correctly.
	* bind.c: Pass modified environment on to the child process.

2004-09-09  Jost Boekemeier  <jost2345@mail.yahoo.de>
	
	Initialize PVAL's so that they have a proper ref-count.  Otherwise 
	either the bridge or the JVM might crash (or both).
	* java.c: Allocate pval's correctly.

	* php-java-bridge 1.0.2 released.

2004-08-30  Jost Boekemeier  <jost2345@mail.yahoo.de>

	* bind.c: wait until the JVM is initialized

	Initialize the cfg vars correctly so that only one VM is started
	* java.c, init_cfg: set the defaults _after_ the cfg changes.

	* php-java-bridge 1.0.1 released.
	
2004-08-29  Jost Boekemeier  <jost2345@mail.yahoo.de>

	* php-java-bridge 1.0.0 released.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.