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");
+ }
+ }
}
}