You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2008/04/30 00:35:32 UTC
svn commit: r652177 - in /ofbiz/trunk/framework:
appserver/config/appserver.properties appserver/templates/wasce2/README
base/src/base/org/ofbiz/base/container/ContainerLoader.java
webapp/src/org/ofbiz/webapp/control/ContextFilter.java
Author: jleroux
Date: Tue Apr 29 15:35:32 2008
New Revision: 652177
URL: http://svn.apache.org/viewvc?rev=652177&view=rev
Log:
This add the possiblity to run RMI services under WASCE or Geronimo.
There is only one small drawback : so far if you restart the OFBiz EAR from the console you loose the RMI Dispatcher. However stopping and starting (even after a restart) is OK. I guess it's the same for the commande redeploy, I will test tomorrow.
Modified:
ofbiz/trunk/framework/appserver/config/appserver.properties
ofbiz/trunk/framework/appserver/templates/wasce2/README
ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java
Modified: ofbiz/trunk/framework/appserver/config/appserver.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/appserver/config/appserver.properties?rev=652177&r1=652176&r2=652177&view=diff
==============================================================================
--- ofbiz/trunk/framework/appserver/config/appserver.properties (original)
+++ ofbiz/trunk/framework/appserver/config/appserver.properties Tue Apr 29 15:35:32 2008
@@ -24,10 +24,12 @@
### Linux
#geronimoHome=/home/jacques/IBM/WebSphere/AppServerCommunityEdition
#geronimoHome=/home/jacques/Apache Software Foundation/geronimo-tomcat6-jee5-2.0.3
-### Windows *** Note that under Windows you must use / here in place of \ (or put \\) ***
-#geronimoHome=C:/Program Files/IBM/WebSphere/AppServerCommunityEdition
-# Beware for geronimo-2.0.3 snapshot, under Windows some files have a path longer than 256 chars. Hence I put it directly under c:
-#geronimoHome=C:/geronimo-tomcat6-jee5-2.0.3
+### Windows
+#*** Note that under Windows you must use / here in place of \ (or put \\)
+#*** Beware for geronimo-2.0.3 snapshot, under Windows some files have a path longer than 256 chars. Hence I put it directly under c:
+#*** Beware also if you use RMI you can't have spaces in path
+#geronimoHome=C:/wasce
+#geronimoHome=C:/geronimo-tomcat6-jee5-2.0.3
### user login
user=system
Modified: ofbiz/trunk/framework/appserver/templates/wasce2/README
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/appserver/templates/wasce2/README?rev=652177&r1=652176&r2=652177&view=diff
==============================================================================
--- ofbiz/trunk/framework/appserver/templates/wasce2/README (original)
+++ ofbiz/trunk/framework/appserver/templates/wasce2/README Tue Apr 29 15:35:32 2008
@@ -73,4 +73,26 @@
Replace the line
-jar "$GERONIMO_HOME"/bin/server.jar $LONG_OPT "$@"
by
- -classpath ".":"$GERONIMO_HOME"/bin/server.jar:"$CLASSPATH" org.apache.geronimo.cli.daemon.DaemonCLI $LONG_OPT "$@"
\ No newline at end of file
+ -classpath ".":"$GERONIMO_HOME"/bin/server.jar:"$CLASSPATH" org.apache.geronimo.cli.daemon.DaemonCLI $LONG_OPT "$@"
+
+
+=======================================================================================================================================================
+ If you want to use RMI (RMIDispatcher) you will need to put the following lines in the limited-containers.xml file (set the values as you want)
+ <property name="bound-host" value="127.0.0.1"/>
+ <property name="bound-port" value="1099"/>
+
+ You will need also to change the value of use-initial-context to false and to put the complete path for ssl-keystore.
+
+ Finally you will have to pass a client policy to the application server using the -Djava.security.policy=client.policy parameter,
+ simply put it at the end of JAVA_OPTS above.
+ Indeed to load the RMIDispatcher under the application server it needs a RMI Security Manager.
+ For my test I used a very simple client.policy file with all permissions that I put in the bin directory of the application server.
+ Its content is :
+ grant{
+ permission java.security.AllPermission;
+ };
+
+ *** Also beware, you can't have spaces in the path where the application server is installed ***
+ And last but not least you may appreciate http://docs.ofbiz.org/display/OFBIZ/FAQ+-+Tips+-+Tricks+-+Cookbook+-+HowTo#FAQ-Tips-Tricks-Cookbook-HowTo-HowtouseRMIwithoutSSL
+=======================================================================================================================================================
+
Modified: ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java?rev=652177&r1=652176&r2=652177&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java (original)
+++ ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java Tue Apr 29 15:35:32 2008
@@ -42,6 +42,7 @@
protected List<Container> loadedContainers = new LinkedList<Container>();
protected String configFile = null;
+ public static Container rmiLoadedContainer = null; // used in Geronimo/WASCE to allow to deregister
/**
* @see org.ofbiz.base.start.StartupLoader#load(Start.Config, String[])
@@ -62,7 +63,28 @@
if (containers != null) {
for (ContainerConfig.Container containerCfg: containers) {
- loadedContainers.add(loadContainer(containerCfg, args));
+ Container tmpContainer = loadContainer(containerCfg, args);
+ loadedContainers.add(tmpContainer);
+
+ // This is only used in case of OFBiz running in Geronimo or WASCE. It allows to use the RMIDispatcher
+ if (containerCfg.name.equals("rmi-dispatcher") && configFile.equals("limited-containers.xml")) {
+ try {
+ ContainerConfig.Container.Property initialCtxProp = containerCfg.getProperty("use-initial-context");
+ String useCtx = initialCtxProp == null || initialCtxProp.value == null ? "false" : initialCtxProp.value;
+ if (!useCtx.equalsIgnoreCase("true")) {
+ //system.setProperty("java.security.policy", "client.policy"); maybe used if needed...
+ if (System.getSecurityManager() == null) { // needed by WASCE with a client.policy file.
+ System.setSecurityManager(new java.rmi.RMISecurityManager());
+ }
+ tmpContainer.start();
+ rmiLoadedContainer = tmpContainer; // used in Geronimo/WASCE to allow to deregister
+ }
+ } catch (ContainerException e) {
+ throw new StartupException("Cannot start() " + tmpContainer.getClass().getName(), e);
+ } catch (java.lang.AbstractMethodError e) {
+ throw new StartupException("Cannot start() " + tmpContainer.getClass().getName(), e);
+ }
+ }
}
}
}
@@ -175,14 +197,16 @@
return containerObj;
}
- public static synchronized boolean loadContainers(String config, String[] args) throws StartupException {
+ public static synchronized Container loadContainers(String config, String[] args) throws StartupException {
if (!loaded) {
ContainerLoader loader = new ContainerLoader();
Start.Config cfg = new Start.Config();
cfg.containerConfig = config == null ? "limited-containers.xml" : config;
loader.load(cfg, args);
- return true;
+ if (rmiLoadedContainer != null) { // used in Geronimo/WASCE to allow to deregister
+ return rmiLoadedContainer;
+ }
}
- return false;
+ return null;
}
}
Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java?rev=652177&r1=652176&r2=652177&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java Tue Apr 29 15:35:32 2008
@@ -37,6 +37,8 @@
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
+import org.ofbiz.base.container.Container;
+import org.ofbiz.base.container.ContainerException;
import org.ofbiz.base.container.ContainerLoader;
import org.ofbiz.base.start.StartupException;
import org.ofbiz.base.util.CachedClassLoader;
@@ -64,6 +66,8 @@
protected ClassLoader localCachedClassLoader = null;
protected FilterConfig config = null;
protected boolean debug = false;
+ protected Container rmiLoadedContainer = null; // used in Geronimo/WASCE to allow to deregister
+
/**
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
@@ -85,7 +89,10 @@
}
// load the containers
- getContainers();
+ Container container = getContainers();
+ if (container != null) {
+ rmiLoadedContainer = container; // used in Geronimo/WASCE to allow to deregister
+ }
// check the serverId
getServerId();
// initialize the delegator
@@ -253,6 +260,11 @@
*/
public void destroy() {
getDispatcher().deregister();
+ try {
+ destroyRmiContainer(); // used in Geronimo/WASCE to allow to deregister
+ } catch (ServletException e) {
+ Debug.logError("Error when stopping containers, this exception should not arise...", module);
+ }
config = null;
}
@@ -366,13 +378,26 @@
return serverId;
}
- protected boolean getContainers() throws ServletException {
+ protected Container getContainers() throws ServletException {
+ Container rmiLoadedContainer = null;
try {
- ContainerLoader.loadContainers(CONTAINER_CONFIG, null);
+ rmiLoadedContainer = ContainerLoader.loadContainers(CONTAINER_CONFIG, null); // used in Geronimo/WASCE to allow to deregister
} catch (StartupException e) {
Debug.logError(e, module);
throw new ServletException("Unable to load containers; cannot start ContextFilter");
}
- return true;
+ return rmiLoadedContainer;
+ }
+
+ // used in Geronimo/WASCE to allow to deregister
+ protected void destroyRmiContainer() throws ServletException {
+ if (rmiLoadedContainer != null) {
+ try {
+ rmiLoadedContainer.stop();
+ } catch (ContainerException e) {
+ Debug.logError(e, module);
+ throw new ServletException("Error when stopping the RMI loaded container");
+ }
+ }
}
}
Re: svn commit: r652177 - in /ofbiz/trunk/framework: appserver/config/appserver.properties appserver/templates/wasce2/README base/src/base/org/ofbiz/base/container/ContainerLoader.java webapp/src/org/ofbiz/webapp/control/ContextFilter.java
Posted by Jacopo Cappellato <ja...@hotwaxmedia.com>.
There are a series of issues in this commit.
I know this is a rather old one, and a review at this point may seem too late. But since, as we discussed in the dev list recently, I am going to revert most of this code today, I wanted to highlight some of the reasons more clearly.
Please see my remarks inline:
On Apr 30, 2008, at 12:35 AM, jleroux@apache.org wrote:
> Author: jleroux
> Date: Tue Apr 29 15:35:32 2008
> New Revision: 652177
>
> URL: http://svn.apache.org/viewvc?rev=652177&view=rev
> Log:
> This add the possiblity to run RMI services under WASCE or Geronimo.
> There is only one small drawback : so far if you restart the OFBiz EAR from the console you loose the RMI Dispatcher. However stopping and starting (even after a restart) is OK. I guess it's the same for the commande redeploy, I will test tomorrow.
>
> Modified:
> ofbiz/trunk/framework/appserver/config/appserver.properties
> ofbiz/trunk/framework/appserver/templates/wasce2/README
> ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java
> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java
>
> Modified: ofbiz/trunk/framework/appserver/config/appserver.properties
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/appserver/config/appserver.properties?rev=652177&r1=652176&r2=652177&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/appserver/config/appserver.properties (original)
> +++ ofbiz/trunk/framework/appserver/config/appserver.properties Tue Apr 29 15:35:32 2008
> @@ -24,10 +24,12 @@
> ### Linux
> #geronimoHome=/home/jacques/IBM/WebSphere/AppServerCommunityEdition
> #geronimoHome=/home/jacques/Apache Software Foundation/geronimo-tomcat6-jee5-2.0.3
> -### Windows *** Note that under Windows you must use / here in place of \ (or put \\) ***
> -#geronimoHome=C:/Program Files/IBM/WebSphere/AppServerCommunityEdition
> -# Beware for geronimo-2.0.3 snapshot, under Windows some files have a path longer than 256 chars. Hence I put it directly under c:
> -#geronimoHome=C:/geronimo-tomcat6-jee5-2.0.3
> +### Windows
> +#*** Note that under Windows you must use / here in place of \ (or put \\)
> +#*** Beware for geronimo-2.0.3 snapshot, under Windows some files have a path longer than 256 chars. Hence I put it directly under c:
> +#*** Beware also if you use RMI you can't have spaces in path
> +#geronimoHome=C:/wasce
> +#geronimoHome=C:/geronimo-tomcat6-jee5-2.0.3
>
> ### user login
> user=system
>
> Modified: ofbiz/trunk/framework/appserver/templates/wasce2/README
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/appserver/templates/wasce2/README?rev=652177&r1=652176&r2=652177&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/appserver/templates/wasce2/README (original)
> +++ ofbiz/trunk/framework/appserver/templates/wasce2/README Tue Apr 29 15:35:32 2008
> @@ -73,4 +73,26 @@
> Replace the line
> -jar "$GERONIMO_HOME"/bin/server.jar $LONG_OPT "$@"
> by
> - -classpath ".":"$GERONIMO_HOME"/bin/server.jar:"$CLASSPATH" org.apache.geronimo.cli.daemon.DaemonCLI $LONG_OPT "$@"
> \ No newline at end of file
> + -classpath ".":"$GERONIMO_HOME"/bin/server.jar:"$CLASSPATH" org.apache.geronimo.cli.daemon.DaemonCLI $LONG_OPT "$@"
> +
> +
> +=======================================================================================================================================================
> + If you want to use RMI (RMIDispatcher) you will need to put the following lines in the limited-containers.xml file (set the values as you want)
> + <property name="bound-host" value="127.0.0.1"/>
> + <property name="bound-port" value="1099"/>
> +
> + You will need also to change the value of use-initial-context to false and to put the complete path for ssl-keystore.
> +
> + Finally you will have to pass a client policy to the application server using the -Djava.security.policy=client.policy parameter,
> + simply put it at the end of JAVA_OPTS above.
> + Indeed to load the RMIDispatcher under the application server it needs a RMI Security Manager.
> + For my test I used a very simple client.policy file with all permissions that I put in the bin directory of the application server.
> + Its content is :
> + grant{
> + permission java.security.AllPermission;
> + };
> +
> + *** Also beware, you can't have spaces in the path where the application server is installed ***
> + And last but not least you may appreciate http://docs.ofbiz.org/display/OFBIZ/FAQ+-+Tips+-+Tricks+-+Cookbook+-+HowTo#FAQ-Tips-Tricks-Cookbook-HowTo-HowtouseRMIwithoutSSL
> +=======================================================================================================================================================
> +
>
> Modified: ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java?rev=652177&r1=652176&r2=652177&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java (original)
> +++ ofbiz/trunk/framework/base/src/base/org/ofbiz/base/container/ContainerLoader.java Tue Apr 29 15:35:32 2008
> @@ -42,6 +42,7 @@
>
> protected List<Container> loadedContainers = new LinkedList<Container>();
> protected String configFile = null;
> + public static Container rmiLoadedContainer = null; // used in Geronimo/WASCE to allow to deregister
>
> /**
> * @see org.ofbiz.base.start.StartupLoader#load(Start.Config, String[])
> @@ -62,7 +63,28 @@
The code that follows is really an hack, based on hardcoded container and file names; makes the code difficult to read; most of all it breaks a contract: it starts a container from the load method, instead of simply loading it as it does with all the other containers.
>
> if (containers != null) {
> for (ContainerConfig.Container containerCfg: containers) {
> - loadedContainers.add(loadContainer(containerCfg, args));
> + Container tmpContainer = loadContainer(containerCfg, args);
> + loadedContainers.add(tmpContainer);
> +
> + // This is only used in case of OFBiz running in Geronimo or WASCE. It allows to use the RMIDispatcher
> + if (containerCfg.name.equals("rmi-dispatcher") && configFile.equals("limited-containers.xml")) {
> + try {
> + ContainerConfig.Container.Property initialCtxProp = containerCfg.getProperty("use-initial-context");
> + String useCtx = initialCtxProp == null || initialCtxProp.value == null ? "false" : initialCtxProp.value;
> + if (!useCtx.equalsIgnoreCase("true")) {
> + //system.setProperty("java.security.policy", "client.policy"); maybe used if needed...
> + if (System.getSecurityManager() == null) { // needed by WASCE with a client.policy file.
> + System.setSecurityManager(new java.rmi.RMISecurityManager());
> + }
> + tmpContainer.start();
> + rmiLoadedContainer = tmpContainer; // used in Geronimo/WASCE to allow to deregister
> + }
> + } catch (ContainerException e) {
> + throw new StartupException("Cannot start() " + tmpContainer.getClass().getName(), e);
> + } catch (java.lang.AbstractMethodError e) {
> + throw new StartupException("Cannot start() " + tmpContainer.getClass().getName(), e);
> + }
> + }
> }
> }
> }
> @@ -175,14 +197,16 @@
> return containerObj;
> }
>
The following code makes the loadContainers method really ugly:
> - public static synchronized boolean loadContainers(String config, String[] args) throws StartupException {
> + public static synchronized Container loadContainers(String config, String[] args) throws StartupException {
> if (!loaded) {
> ContainerLoader loader = new ContainerLoader();
> Start.Config cfg = new Start.Config();
> cfg.containerConfig = config == null ? "limited-containers.xml" : config;
> loader.load(cfg, args);
> - return true;
> + if (rmiLoadedContainer != null) { // used in Geronimo/WASCE to allow to deregister
> + return rmiLoadedContainer;
> + }
> }
> - return false;
> + return null;
> }
> }
>
> Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java?rev=652177&r1=652176&r2=652177&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java (original)
> +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ContextFilter.java Tue Apr 29 15:35:32 2008
> @@ -37,6 +37,8 @@
> import javax.servlet.http.HttpServletResponse;
> import javax.servlet.http.HttpServletResponseWrapper;
>
> +import org.ofbiz.base.container.Container;
> +import org.ofbiz.base.container.ContainerException;
> import org.ofbiz.base.container.ContainerLoader;
> import org.ofbiz.base.start.StartupException;
> import org.ofbiz.base.util.CachedClassLoader;
> @@ -64,6 +66,8 @@
> protected ClassLoader localCachedClassLoader = null;
> protected FilterConfig config = null;
> protected boolean debug = false;
The changes below are causing some issues during shutdown: the system attempts to shutdown the RMIContainer several times; they also add a lot of Geronimo specific code to a framework class.
Regards,
Jacopo
> + protected Container rmiLoadedContainer = null; // used in Geronimo/WASCE to allow to deregister
> +
>
> /**
> * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
> @@ -85,7 +89,10 @@
> }
>
> // load the containers
> - getContainers();
> + Container container = getContainers();
> + if (container != null) {
> + rmiLoadedContainer = container; // used in Geronimo/WASCE to allow to deregister
> + }
> // check the serverId
> getServerId();
> // initialize the delegator
> @@ -253,6 +260,11 @@
> */
> public void destroy() {
> getDispatcher().deregister();
> + try {
> + destroyRmiContainer(); // used in Geronimo/WASCE to allow to deregister
> + } catch (ServletException e) {
> + Debug.logError("Error when stopping containers, this exception should not arise...", module);
> + }
> config = null;
> }
>
> @@ -366,13 +378,26 @@
> return serverId;
> }
>
> - protected boolean getContainers() throws ServletException {
> + protected Container getContainers() throws ServletException {
> + Container rmiLoadedContainer = null;
> try {
> - ContainerLoader.loadContainers(CONTAINER_CONFIG, null);
> + rmiLoadedContainer = ContainerLoader.loadContainers(CONTAINER_CONFIG, null); // used in Geronimo/WASCE to allow to deregister
> } catch (StartupException e) {
> Debug.logError(e, module);
> throw new ServletException("Unable to load containers; cannot start ContextFilter");
> }
> - return true;
> + return rmiLoadedContainer;
> + }
> +
> + // used in Geronimo/WASCE to allow to deregister
> + protected void destroyRmiContainer() throws ServletException {
> + if (rmiLoadedContainer != null) {
> + try {
> + rmiLoadedContainer.stop();
> + } catch (ContainerException e) {
> + Debug.logError(e, module);
> + throw new ServletException("Error when stopping the RMI loaded container");
> + }
> + }
> }
> }
>
>