dev@glassfish.java.net

Re: Embedded EJB container

From: Kumar Jayanti <Vbkumar.Jayanti_at_Sun.COM>
Date: Fri, 05 Jun 2009 16:07:56 +0530

Ron Monzillo wrote:
> Hi Jerome,
>
> I have been away, so I am just catching up on my email.
>
> On the chance that it was not resolved, the PolicyConfigurationFactory
> implementation class is configued via the system property:
>
> javax.security.jacc.PolicyConfigurationFactory.provider
>
> The factory is used to find the policy configuration interface for the
> associated policy provider. The configuration interface is used by the
> deployment system to convey the ee application security policy to the
> pluggabble policy subsystem (for subsquent enforcement by the policy
> subsystem).
>
> both the factory and the policy implementation classes must be must be
> defined (using different properties), and it looks like you were
> testing in an environment where the factory property had not been
> defined.
>
Sorry i missed seeing this thread earlier....
It seems like in the Embedded case the SecuritySniffer is never called
so in the EJBDeployer when the SecurityManager is being initialized it
does not find the properties set. The fix is simple i can commit the
fix but i am currently stuck on building the workspace. If it is urgent
then please use the following patch for EJBApplication.java

Index: EjbApplication.java
===================================================================
--- EjbApplication.java (revision 27701)
+++ EjbApplication.java (working copy)
@@ -32,17 +32,14 @@
 import com.sun.ejb.ContainerFactory;
 import com.sun.ejb.containers.AbstractSingletonContainer;
 import com.sun.enterprise.deployment.EjbDescriptor;
-import com.sun.enterprise.security.SecurityUtil;
 import org.glassfish.ejb.security.application.EJBSecurityManager;
 import org.glassfish.ejb.security.factory.EJBSecurityManagerFactory;

 import org.glassfish.api.deployment.ApplicationContainer;
 import org.glassfish.api.deployment.ApplicationContext;
 import org.glassfish.api.deployment.DeploymentContext;
 import org.glassfish.api.deployment.UndeployCommandParameters;
 import org.glassfish.api.deployment.DeployCommandParameters;
 import org.glassfish.api.deployment.OpsParams;
 import org.glassfish.deployment.common.DeploymentException;

 import org.jvnet.hk2.annotations.Scoped;
 import org.jvnet.hk2.annotations.Service;
@@ -53,6 +50,7 @@
 import com.sun.ejb.containers.EjbContainerUtil;
 import com.sun.ejb.containers.EjbContainerUtilImpl;
 import com.sun.ejb.containers.EJBTimerService;
+import com.sun.enterprise.security.PolicyLoader;
 import org.glassfish.api.ActionReport;
 import org.glassfish.internal.api.ServerContext;
 import org.glassfish.internal.deployment.Deployment;
@@ -61,6 +59,7 @@
 import java.io.File;
 import java.io.IOException;
 // For auto-deploying EJBTimerService
+import org.jvnet.hk2.annotations.Inject;

 /**
  * This class represents a logical collection of EJB components
contained in on
e ejb-jar
@@ -87,6 +86,9 @@
     private SingletonLifeCycleManager singletonLCM;

     boolean usesEJBTimerService = false;
+
+ @Inject
+ private PolicyLoader policyLoader;

     // TODO: move restoreEJBTimers to correct location
     private static boolean restored = false;
@@ -169,7 +171,7 @@
         singletonLCM = new SingletonLifeCycleManager();

         try {
-
+ policyLoader.loadPolicy();
             String moduleName = null;

             for (EjbDescriptor desc : ejbs) {


===============================

regards,
kumar

> Ron
>
> Jerome Dochez wrote:
>> In my test, I am not doing any transaction, so I could not care less
>> which one is used so far as long as it runs my simple EJB. The
>> dependency list is not final yet, I am just trying to get basic EJBs
>> working.
>>
>> On May 28, 2009, at 11:57 PM, Marina Vatkina wrote:
>>
>>> Hi Jerome,
>>>
>>> I can't speak for the security, but I do see that you are using
>>> JavaEETransactionManagerSimplifiedDelegate which means that e.g.
>>> jts.jar is not present in your setup. Is it expected?
>>>
>>> thanks,
>>> -marina
>>>
>>> Jerome Dochez wrote:
>>>
>>>> Kumar, Ken, Marina
>>>> I am making progress on the embedded EJB container, I now have a
>>>> test trying to deploy a simple ejb jar file within maven. It seems
>>>> to work until the ejb container tries to setup the security.
>>>> I have placed inmemory.jacc.provider in the classpath (remember no
>>>> OSGi in such env). Why is it complaining that the jacc.factory is
>>>> not found ? isn't it SimplePolicyProvider ?
>>>> part of the classpath :
>>>> [DEBUG] /Users/dochez/.m2/repository/org/glassfish/security/
>>>> inmemory.jacc.provider/3.0-SNAPSHOT/inmemory.jacc.provider-3.0-
>>>> SNAPSHOT.jar I get the following exception :
>>>> -------------------------------------------------------
>>>> T E S T S
>>>> -------------------------------------------------------
>>>> Running org.glassfish.tests.ejb.EmbeddedTest
>>>> May 28, 2009 9:57:20 PM AppServerStartup start
>>>> INFO: Starting GlassFish Kernel
>>>> May 28, 2009 9:57:20 PM
>>>> com.sun.enterprise.v3.server.AppServerStartup run
>>>> INFO: GlassFish v3 startup time : Embedded(271ms) startup
>>>> services(287ms) total(558ms)
>>>> May 28, 2009 9:57:20 PM AppServerStartup run
>>>> INFO: [Thread[GlassFish Kernel Main Thread,5,main]] started
>>>> Deployment expansion took 11
>>>> May 28, 2009 9:57:20 PM
>>>> com.sun.enterprise.transaction.JavaEETransactionManagerSimplified
>>>> initDelegates
>>>> INFO: Using com .sun
>>>> .enterprise.transaction.JavaEETransactionManagerSimplifiedDelegate
>>>> as the delegate
>>>> >>Started EJB Container Service....: server
>>>> >>EjbContainerUtil:
>>>> com.sun.ejb.containers.EjbContainerUtilImpl_at_3aca6da2
>>>> DOL Loading time52
>>>> May 28, 2009 9:57:21 PM
>>>> org.glassfish.ejb.security.application.EJBSecurityManager
>>>> getPolicyFactory
>>>> SEVERE: jaccfactory.notfound
>>>> May 28, 2009 9:57:21 PM org.glassfish.api.ActionReport failure
>>>> SEVERE: Exception while invoking class
>>>> org.glassfish.ejb.startup.EjbDeployer load method
>>>> java.lang.RuntimeException: EJB Container initialization error
>>>> at org .glassfish
>>>> .ejb.startup.EjbApplication.loadContainers(EjbApplication.java:
>>>> 198) at
>>>> org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:160)
>>>> at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:57)
>>>> at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:152)
>>>> at org
>>>> .glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:
>>>> 174)
>>>> at com .sun .enterprise
>>>> .v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:
>>>> 282) at org .glassfish .kernel
>>>> .embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:
>>>> 65) at
>>>> org.glassfish.tests.ejb.EmbeddedTest.test(EmbeddedTest.java:24)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun .reflect
>>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>>> 39) at sun .reflect .DelegatingMethodAccessorImpl
>>>> .invoke(DelegatingMethodAccessorImpl.java:25) at
>>>> java.lang.reflect.Method.invoke(Method.java:597)
>>>> at org .junit .internal
>>>> .runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:
>>>> 99) at org .junit .internal
>>>> .runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:
>>>> 81) at org .junit .internal .runners
>>>> .BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
>>>> at org .junit
>>>> .internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:
>>>> 75) at org
>>>> .junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:
>>>> 45)
>>>> at org .junit .internal .runners .TestClassMethodsRunner
>>>> .invokeTestMethod(TestClassMethodsRunner.java:66) at org .junit
>>>> .internal
>>>> .runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:
>>>> 35) at org.junit.internal.runners.TestClassRunner
>>>> $1.runUnprotected(TestClassRunner.java:42) at org .junit
>>>> .internal .runners
>>>> .BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
>>>> at
>>>> org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:
>>>> 52)
>>>> at org .apache
>>>> .maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:
>>>> 62) at org .apache .maven .surefire .suite
>>>> .AbstractDirectoryTestSuite
>>>> .executeTestSet(AbstractDirectoryTestSuite.java:140) at org
>>>> .apache .maven .surefire .suite
>>>> .AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:
>>>> 127) at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun .reflect
>>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>>> 39) at sun .reflect .DelegatingMethodAccessorImpl
>>>> .invoke(DelegatingMethodAccessorImpl.java:25) at
>>>> java.lang.reflect.Method.invoke(Method.java:597)
>>>> at org .apache .maven .surefire
>>>> .booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:
>>>> 345) at org .apache
>>>> .maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:
>>>> 241) at org .apache
>>>> .maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:
>>>> 537) at org .apache .maven
>>>> .plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:
>>>> 483) at org .apache .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeGoals(DefaultLifecycleExecutor.java:678) at org .apache
>>>> .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeGoalWithLifecycle(DefaultLifecycleExecutor.java:540) at
>>>> org .apache .maven .lifecycle
>>>> .DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:
>>>> 519) at org .apache .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371)
>>>> at org .apache .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeTaskSegments(DefaultLifecycleExecutor.java:332) at org
>>>> .apache .maven .lifecycle
>>>> .DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:
>>>> 181) at
>>>> org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356)
>>>> at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137)
>>>> at org.apache.maven.cli.MavenCli.main(MavenCli.java:356)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun .reflect
>>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>>> 39) at sun .reflect .DelegatingMethodAccessorImpl
>>>> .invoke(DelegatingMethodAccessorImpl.java:25) at
>>>> java.lang.reflect.Method.invoke(Method.java:597)
>>>> at
>>>> org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java: 315)
>>>> at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>>>> at
>>>> org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
>>>> at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
>>>> Caused by: java.lang.RuntimeException:
>>>> javax.security.jacc.PolicyContextException:
>>>> java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : cannot find class : null
>>>> at org .glassfish .ejb .security .factory
>>>> .EJBSecurityManagerFactory
>>>> .createManager(EJBSecurityManagerFactory.java:205) at org
>>>> .glassfish
>>>> .ejb.startup.EjbApplication.loadContainers(EjbApplication.java:
>>>> 182) ... 50 more
>>>> Caused by: javax.security.jacc.PolicyContextException:
>>>> java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : cannot find class : null
>>>> at org .glassfish .ejb .security .application
>>>> .EJBSecurityManager.getPolicyFactory(EJBSecurityManager.java:
>>>> 220) at org .glassfish .ejb .security .application
>>>> .EJBSecurityManager.loadPolicyConfiguration(EJBSecurityManager.java:
>>>> 235) at org .glassfish .ejb .security
>>>> .application.EJBSecurityManager.initialize(EJBSecurityManager.java:
>>>> 299) at org .glassfish .ejb .security
>>>> .application.EJBSecurityManager.<init>(EJBSecurityManager.java:
>>>> 183) at org .glassfish .ejb .security .factory
>>>> .EJBSecurityManagerFactory
>>>> .createManager(EJBSecurityManagerFactory.java:198) ... 51 more
>>>> Caused by: java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : cannot find class : null
>>>> at javax .security .jacc .PolicyConfigurationFactory
>>>> .getPolicyConfigurationFactory(PolicyConfigurationFactory.java:
>>>> 172) at org .glassfish .ejb .security .application
>>>> .EJBSecurityManager.getPolicyFactory(EJBSecurityManager.java:
>>>> 217) ... 55 more
>>>> Caused by: java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : property not set :
>>>> javax.security.jacc.PolicyConfigurationFactory.provider
>>>> at javax .security .jacc .PolicyConfigurationFactory
>>>> .getPolicyConfigurationFactory(PolicyConfigurationFactory.java:
>>>> 157) ... 56 more
>>>> May 28, 2009 9:57:21 PM org.glassfish.api.ActionReport failure
>>>> SEVERE: Exception while loading the app
>>>> java.lang.RuntimeException: EJB Container initialization error
>>>> at org .glassfish
>>>> .ejb.startup.EjbApplication.loadContainers(EjbApplication.java:
>>>> 198) at
>>>> org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:160)
>>>> at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:57)
>>>> at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:152)
>>>> at org
>>>> .glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:
>>>> 174)
>>>> at com .sun .enterprise
>>>> .v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:
>>>> 282) at org .glassfish .kernel
>>>> .embedded.EmbeddedDeployerImpl.deploy(EmbeddedDeployerImpl.java:
>>>> 65) at
>>>> org.glassfish.tests.ejb.EmbeddedTest.test(EmbeddedTest.java:24)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun .reflect
>>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>>> 39) at sun .reflect .DelegatingMethodAccessorImpl
>>>> .invoke(DelegatingMethodAccessorImpl.java:25) at
>>>> java.lang.reflect.Method.invoke(Method.java:597)
>>>> at org .junit .internal
>>>> .runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:
>>>> 99) at org .junit .internal
>>>> .runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:
>>>> 81) at org .junit .internal .runners
>>>> .BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
>>>> at org .junit
>>>> .internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:
>>>> 75) at org
>>>> .junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:
>>>> 45)
>>>> at org .junit .internal .runners .TestClassMethodsRunner
>>>> .invokeTestMethod(TestClassMethodsRunner.java:66) at org .junit
>>>> .internal
>>>> .runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:
>>>> 35) at org.junit.internal.runners.TestClassRunner
>>>> $1.runUnprotected(TestClassRunner.java:42) at org .junit
>>>> .internal .runners
>>>> .BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
>>>> at
>>>> org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:
>>>> 52)
>>>> at org .apache
>>>> .maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:
>>>> 62) at org .apache .maven .surefire .suite
>>>> .AbstractDirectoryTestSuite
>>>> .executeTestSet(AbstractDirectoryTestSuite.java:140) at org
>>>> .apache .maven .surefire .suite
>>>> .AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:
>>>> 127) at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun .reflect
>>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>>> 39) at sun .reflect .DelegatingMethodAccessorImpl
>>>> .invoke(DelegatingMethodAccessorImpl.java:25) at
>>>> java.lang.reflect.Method.invoke(Method.java:597)
>>>> at org .apache .maven .surefire
>>>> .booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:
>>>> 345) at org .apache
>>>> .maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:
>>>> 241) at org .apache
>>>> .maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:
>>>> 537) at org .apache .maven
>>>> .plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:
>>>> 483) at org .apache .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeGoals(DefaultLifecycleExecutor.java:678) at org .apache
>>>> .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeGoalWithLifecycle(DefaultLifecycleExecutor.java:540) at
>>>> org .apache .maven .lifecycle
>>>> .DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:
>>>> 519) at org .apache .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371)
>>>> at org .apache .maven .lifecycle .DefaultLifecycleExecutor
>>>> .executeTaskSegments(DefaultLifecycleExecutor.java:332) at org
>>>> .apache .maven .lifecycle
>>>> .DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:
>>>> 181) at
>>>> org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356)
>>>> at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137)
>>>> at org.apache.maven.cli.MavenCli.main(MavenCli.java:356)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at sun .reflect
>>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>>> 39) at sun .reflect .DelegatingMethodAccessorImpl
>>>> .invoke(DelegatingMethodAccessorImpl.java:25) at
>>>> java.lang.reflect.Method.invoke(Method.java:597)
>>>> at
>>>> org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java: 315)
>>>> at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>>>> at
>>>> org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
>>>> at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
>>>> Caused by: java.lang.RuntimeException:
>>>> javax.security.jacc.PolicyContextException:
>>>> java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : cannot find class : null
>>>> at org .glassfish .ejb .security .factory
>>>> .EJBSecurityManagerFactory
>>>> .createManager(EJBSecurityManagerFactory.java:205) at org
>>>> .glassfish
>>>> .ejb.startup.EjbApplication.loadContainers(EjbApplication.java:
>>>> 182) ... 50 more
>>>> Caused by: javax.security.jacc.PolicyContextException:
>>>> java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : cannot find class : null
>>>> at org .glassfish .ejb .security .application
>>>> .EJBSecurityManager.getPolicyFactory(EJBSecurityManager.java:
>>>> 220) at org .glassfish .ejb .security .application
>>>> .EJBSecurityManager.loadPolicyConfiguration(EJBSecurityManager.java:
>>>> 235) at org .glassfish .ejb .security
>>>> .application.EJBSecurityManager.initialize(EJBSecurityManager.java:
>>>> 299) at org .glassfish .ejb .security
>>>> .application.EJBSecurityManager.<init>(EJBSecurityManager.java:
>>>> 183) at org .glassfish .ejb .security .factory
>>>> .EJBSecurityManagerFactory
>>>> .createManager(EJBSecurityManagerFactory.java:198) ... 51 more
>>>> Caused by: java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : cannot find class : null
>>>> at javax .security .jacc .PolicyConfigurationFactory
>>>> .getPolicyConfigurationFactory(PolicyConfigurationFactory.java:
>>>> 172) at org .glassfish .ejb .security .application
>>>> .EJBSecurityManager.getPolicyFactory(EJBSecurityManager.java:
>>>> 217) ... 55 more
>>>> Caused by: java.lang.ClassNotFoundException: JACC:Error
>>>> PolicyConfigurationFactory : property not set :
>>>> javax.security.jacc.PolicyConfigurationFactory.provider
>>>> at javax .security .jacc .PolicyConfigurationFactory
>>>> .getPolicyConfigurationFactory(PolicyConfigurationFactory.java:
>>>> 157) ... 56 more
>>>> Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed:
>>>> 1.108 sec
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>