[jboss-svn-commits] JBL Code SVN: r36131 - in labs/jbossrules/soa_branches/BRMS-5.1.x: drools-guvnor/src/test/java/org/drools/guvnor/server/repository and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Nov 30 17:14:27 EST 2010
Author: kurt.stam at jboss.com
Date: 2010-11-30 17:14:26 -0500 (Tue, 30 Nov 2010)
New Revision: 36131
Modified:
labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java
labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RulesRepositoryManager.java
labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MockRepositoryConfigurator.java
labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/drools-repository/src/main/java/org/drools/repository/RulesRepositoryConfigurator.java
labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-api/src/main/java/org/drools/repository/JCRRepositoryConfigurator.java
labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-jr-impl/src/main/java/org/drools/repository/jackrabbit/JackrabbitRepositoryConfigurator.java
labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-ms-impl/src/main/java/org/drools/repository/modeshape/ModeShapeRepositoryConfigurator.java
Log:
BRMS-451 reuse an active JAAS session. I've put the login in our JCR API since it seems to be different to do this for JR and MS.
Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java 2010-11-30 21:18:35 UTC (rev 36130)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RepositoryStartupService.java 2010-11-30 22:14:26 UTC (rev 36131)
@@ -44,7 +44,6 @@
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
import org.drools.repository.*;
import org.drools.repository.events.StorageEventManager;
@@ -100,11 +99,11 @@
@Create
public void create() {
repository = getRepositoryInstance();
- String username = "admin";
+ String username = ADMIN;
if (properties.containsKey(ADMIN_USER_PROPERTY)) {
username = properties.get(ADMIN_USER_PROPERTY);
}
- String password = "admin";
+ String password = "password";
if (properties.containsKey(ADMIN_PASSWORD_PROPERTY)) {
password = properties.get(ADMIN_PASSWORD_PROPERTY);
if ("true".equalsIgnoreCase(properties.get(SECURE_PASSWORDS_PROPERTY))) {
@@ -113,7 +112,7 @@
} else {
log.debug("Could not find property " + ADMIN_PASSWORD_PROPERTY + " for user " + ADMIN);
}
- sessionForSetup = newSession(ADMIN,password);
+ sessionForSetup = newSession(username,password);
create( sessionForSetup );
startMailboxService();
registerCheckinListener();
@@ -134,11 +133,11 @@
/** Start up the mailbox, flush out any messages that were left */
private void startMailboxService() {
- String username = "mailman";
+ String username = MAILMAN;
if (properties.containsKey(MAILMAN_USER_PROPERTY)) {
username = properties.get(MAILMAN_USER_PROPERTY);
}
- String password = "mailman";
+ String password = "password";
if (properties.containsKey(MAILMAN_PASSWORD_PROPERTY)) {
password = properties.get(MAILMAN_PASSWORD_PROPERTY);
if ("true".equalsIgnoreCase(properties.get(SECURE_PASSWORDS_PROPERTY))) {
@@ -147,7 +146,7 @@
} else {
log.debug("Could not find property " + MAILMAN_PASSWORD_PROPERTY + " for user " + MAILMAN);
}
- mailmanSession = new RulesRepository(newSession(MAILMAN, password));
+ mailmanSession = new RulesRepository(newSession(username, password));
MailboxService.getInstance().init(mailmanSession);
MailboxService.getInstance().wakeUp();
}
@@ -203,8 +202,23 @@
properties.put(RulesRepositoryConfigurator.CONFIGURATOR_CLASS, clazz);
}
}
+
+ /**
+ * This will create a new Session, based on the current user.
+ * @return
+ */
+ public Session newSession(String userName) {
+ try {
+ return configurator.login(userName);
+ } catch ( LoginException e ) {
+ throw new RulesRepositoryException( "Unable to login to JCR backend." );
+ } catch ( RepositoryException e ) {
+ throw new RulesRepositoryException( e );
+ }
+ }
+
/**
* This will create a new Session, based on the current user.
* @return
@@ -212,16 +226,18 @@
public Session newSession(String userName, String password) {
try {
- return repository.login( new SimpleCredentials(userName, password.toCharArray()) );
+ return configurator.login(userName, password);
} catch ( LoginException e ) {
- throw new RulesRepositoryException( "Unable to login to JCR backend." );
+ throw new RulesRepositoryException("UserName: [ " + userName + "] Unable to login to JCR backend." ,e);
} catch ( RepositoryException e ) {
throw new RulesRepositoryException( e );
}
}
+
+
private static String decode(String secret)
{
String decodedPassword = secret;
Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RulesRepositoryManager.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RulesRepositoryManager.java 2010-11-30 21:18:35 UTC (rev 36130)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/RulesRepositoryManager.java 2010-11-30 22:14:26 UTC (rev 36131)
@@ -31,8 +31,6 @@
* limitations under the License.
*/
-
-
import org.drools.repository.RulesRepository;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
@@ -44,6 +42,8 @@
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.security.Identity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This enhances the BRMS repository for lifecycle management.
@@ -54,6 +54,7 @@
@Name("repository")
public class RulesRepositoryManager {
+ private static final Logger log = LoggerFactory.getLogger(RulesRepositoryManager.class);
private static String READ_ONLY_USER = "anonymous";
@In
@@ -71,9 +72,7 @@
if (userName == null) {
userName = READ_ONLY_USER;
}
- //When using JAAS the user is already authenticated, so the password is not looked at.
- //When not using JAAS JR, will work fine, MS will fail
- repository = new RulesRepository(repositoryConfiguration.newSession(userName, "password") );
+ repository = new RulesRepository(repositoryConfiguration.newSession(userName) );
}
@Unwrap
Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MockRepositoryConfigurator.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MockRepositoryConfigurator.java 2010-11-30 21:18:35 UTC (rev 36130)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MockRepositoryConfigurator.java 2010-11-30 22:14:26 UTC (rev 36131)
@@ -35,6 +35,7 @@
import java.util.Properties;
+import javax.jcr.LoginException;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
@@ -67,5 +68,12 @@
// TODO Auto-generated method stub
}
+
+ @Override
+ public Session login(String userName) throws LoginException,
+ RepositoryException {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/drools-repository/src/main/java/org/drools/repository/RulesRepositoryConfigurator.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/drools-repository/src/main/java/org/drools/repository/RulesRepositoryConfigurator.java 2010-11-30 21:18:35 UTC (rev 36130)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/drools-repository/src/main/java/org/drools/repository/RulesRepositoryConfigurator.java 2010-11-30 22:14:26 UTC (rev 36131)
@@ -82,75 +82,83 @@
return rulesRepositoryConfigurator;
}
+ public Session login(String userName, String password) throws RepositoryException {
+ return jcrRepositoryConfigurator.login(userName, password);
+ }
+
+ public Session login(String userName) throws RepositoryException {
+ return jcrRepositoryConfigurator.login(userName);
+ }
+
-/**
- * Attempts to setup the repository. If the work that it tries to do has already been done, it will return without modifying
- * the repository. This will register any node types, and setup bootstrap nodes as needed. This will not erase any data.
- *
- * @throws RepositoryException
- */
-public void setupRepository(Session session) throws RepositoryException {
- log.info("Setting up the repository, registering node types etc.");
- try {
- Node root = session.getRootNode();
- Workspace ws = session.getWorkspace();
-
- //no need to set it up again, skip it if it has.
- boolean registered = RulesRepositoryAdministrator.isNamespaceRegistered( session );
-
- if (!registered) {
- ws.getNamespaceRegistry().registerNamespace("drools", RulesRepository.DROOLS_URI);
-
- //Note, the order in which they are registered actually does matter !
- jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/tag_node_type.cnd", session, ws);
- jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/state_node_type.cnd", session, ws);
- jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/versionable_node_type.cnd", session, ws);
- jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/versionable_asset_folder_node_type.cnd", session, ws);
-
- jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/rule_node_type.cnd", session, ws);
- jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/rulepackage_node_type.cnd", session, ws);
+ /**
+ * Attempts to setup the repository. If the work that it tries to do has already been done, it will return without modifying
+ * the repository. This will register any node types, and setup bootstrap nodes as needed. This will not erase any data.
+ *
+ * @throws RepositoryException
+ */
+ public void setupRepository(Session session) throws RepositoryException {
+ log.info("Setting up the repository, registering node types etc.");
+ try {
+ Node root = session.getRootNode();
+ Workspace ws = session.getWorkspace();
+
+ //no need to set it up again, skip it if it has.
+ boolean registered = RulesRepositoryAdministrator.isNamespaceRegistered( session );
+
+ if (!registered) {
+ ws.getNamespaceRegistry().registerNamespace("drools", RulesRepository.DROOLS_URI);
+
+ //Note, the order in which they are registered actually does matter !
+ jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/tag_node_type.cnd", session, ws);
+ jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/state_node_type.cnd", session, ws);
+ jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/versionable_node_type.cnd", session, ws);
+ jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/versionable_asset_folder_node_type.cnd", session, ws);
+
+ jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/rule_node_type.cnd", session, ws);
+ jcrRepositoryConfigurator.registerNodeTypesFromCndFile("/node_type_definitions/rulepackage_node_type.cnd", session, ws);
+ }
+
+ // Setup the rule repository node
+ Node repositoryNode = RulesRepository.addNodeIfNew(root, RulesRepository.RULES_REPOSITORY_NAME, "nt:folder");
+
+
+
+ // Setup the RulePackageItem area
+ Node packageAreaNode = RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.RULE_PACKAGE_AREA, "nt:folder");
+
+ // Setup the global area
+ if(!packageAreaNode.hasNode(RulesRepository.RULE_GLOBAL_AREA)){
+ Node globalAreaNode = RulesRepository.addNodeIfNew(packageAreaNode, RulesRepository.RULE_GLOBAL_AREA, PackageItem.RULE_PACKAGE_TYPE_NAME);
+ globalAreaNode.addNode( PackageItem.ASSET_FOLDER_NAME, "drools:versionableAssetFolder" );
+ globalAreaNode.setProperty( PackageItem.TITLE_PROPERTY_NAME, RulesRepository.RULE_GLOBAL_AREA);
+ globalAreaNode.setProperty( AssetItem.DESCRIPTION_PROPERTY_NAME, "the global area that holds sharable assets");
+ globalAreaNode.setProperty(AssetItem.FORMAT_PROPERTY_NAME, PackageItem.PACKAGE_FORMAT);
+ globalAreaNode.setProperty(PackageItem.CREATOR_PROPERTY_NAME, session.getUserID());
+ Calendar lastModified = Calendar.getInstance();
+ globalAreaNode.setProperty(PackageItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+ }
+
+ // Setup the Snapshot area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.PACKAGE_SNAPSHOT_AREA, "nt:folder");
+
+ //Setup the Category area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.TAG_AREA, "nt:folder");
+
+ //Setup the State area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.STATE_AREA, "nt:folder");
+
+ //and we need the "Draft" state
+ RulesRepository.addNodeIfNew( repositoryNode.getNode( RulesRepository.STATE_AREA ), StateItem.DRAFT_STATE_NAME, StateItem.STATE_NODE_TYPE_NAME );
+
+ session.save();
}
-
- // Setup the rule repository node
- Node repositoryNode = RulesRepository.addNodeIfNew(root, RulesRepository.RULES_REPOSITORY_NAME, "nt:folder");
-
-
-
- // Setup the RulePackageItem area
- Node packageAreaNode = RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.RULE_PACKAGE_AREA, "nt:folder");
-
- // Setup the global area
- if(!packageAreaNode.hasNode(RulesRepository.RULE_GLOBAL_AREA)){
- Node globalAreaNode = RulesRepository.addNodeIfNew(packageAreaNode, RulesRepository.RULE_GLOBAL_AREA, PackageItem.RULE_PACKAGE_TYPE_NAME);
- globalAreaNode.addNode( PackageItem.ASSET_FOLDER_NAME, "drools:versionableAssetFolder" );
- globalAreaNode.setProperty( PackageItem.TITLE_PROPERTY_NAME, RulesRepository.RULE_GLOBAL_AREA);
- globalAreaNode.setProperty( AssetItem.DESCRIPTION_PROPERTY_NAME, "the global area that holds sharable assets");
- globalAreaNode.setProperty(AssetItem.FORMAT_PROPERTY_NAME, PackageItem.PACKAGE_FORMAT);
- globalAreaNode.setProperty(PackageItem.CREATOR_PROPERTY_NAME, session.getUserID());
- Calendar lastModified = Calendar.getInstance();
- globalAreaNode.setProperty(PackageItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+ catch(Exception e) {
+ log.error("Caught Exception", e);
+ System.err.println(e.getMessage());
+ throw new RepositoryException(e);
}
-
- // Setup the Snapshot area
- RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.PACKAGE_SNAPSHOT_AREA, "nt:folder");
-
- //Setup the Category area
- RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.TAG_AREA, "nt:folder");
-
- //Setup the State area
- RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.STATE_AREA, "nt:folder");
-
- //and we need the "Draft" state
- RulesRepository.addNodeIfNew( repositoryNode.getNode( RulesRepository.STATE_AREA ), StateItem.DRAFT_STATE_NAME, StateItem.STATE_NODE_TYPE_NAME );
-
- session.save();
}
- catch(Exception e) {
- log.error("Caught Exception", e);
- System.err.println(e.getMessage());
- throw new RepositoryException(e);
- }
-}
public void shutdown() {
jcrRepositoryConfigurator.shutdown();
Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-api/src/main/java/org/drools/repository/JCRRepositoryConfigurator.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-api/src/main/java/org/drools/repository/JCRRepositoryConfigurator.java 2010-11-30 21:18:35 UTC (rev 36130)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-api/src/main/java/org/drools/repository/JCRRepositoryConfigurator.java 2010-11-30 22:14:26 UTC (rev 36131)
@@ -18,10 +18,13 @@
import java.util.Properties;
+import javax.jcr.Credentials;
+import javax.jcr.LoginException;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.RepositoryFactory;
import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
import javax.jcr.Workspace;
import org.drools.repository.util.ClassUtil;
@@ -39,6 +42,7 @@
public abstract class JCRRepositoryConfigurator {
protected RepositoryFactory factory;
+ protected Repository repository;
public static final String JCR_IMPL_CLASS = "org.drools.repository.jcr.impl";
protected static String defaultJCRImplClass = null;
@@ -71,11 +75,11 @@
// }
// }
- Class jcrFactory = ClassUtil.forName(jcrImplementationClass, this.getClass());
+ Class<?> jcrFactory = ClassUtil.forName(jcrImplementationClass, this.getClass());
RepositoryFactory factory = (RepositoryFactory) jcrFactory.newInstance();
- Repository repo = factory.getRepository(properties);
+ repository = factory.getRepository(properties);
this.factory = factory;
- return repo;
+ return repository;
} catch (Exception re) {
throw new RepositoryException(re);
@@ -84,6 +88,13 @@
// String msg = "Unable to find an appropriate JCR 2.0 RepositoryFactory; check the 'drools_repository.properties' configuration file.";
// throw new RepositoryException(msg);
}
+
+ public abstract Session login(String userName) throws LoginException,RepositoryException;
+
+ public Session login (String userName, String password) throws RepositoryException {
+ Credentials credentials = new SimpleCredentials(userName, password.toCharArray());
+ return repository.login( credentials );
+ }
public abstract void registerNodeTypesFromCndFile(String cndFileName, Session session, Workspace workspace) throws RepositoryException;
Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-jr-impl/src/main/java/org/drools/repository/jackrabbit/JackrabbitRepositoryConfigurator.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-jr-impl/src/main/java/org/drools/repository/jackrabbit/JackrabbitRepositoryConfigurator.java 2010-11-30 21:18:35 UTC (rev 36130)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-jr-impl/src/main/java/org/drools/repository/jackrabbit/JackrabbitRepositoryConfigurator.java 2010-11-30 22:14:26 UTC (rev 36131)
@@ -20,9 +20,12 @@
import java.io.Reader;
import java.util.Properties;
+import javax.jcr.Credentials;
+import javax.jcr.LoginException;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
import javax.jcr.Workspace;
import org.apache.jackrabbit.commons.cnd.CndImporter;
@@ -40,7 +43,6 @@
private static final Logger log = LoggerFactory.getLogger(JackrabbitRepositoryConfigurator.class);
- private static TransientRepository transientRepository = null;
public JackrabbitRepositoryConfigurator() {
super();
@@ -52,13 +54,18 @@
String repoRootDir = properties.getProperty(REPOSITORY_ROOT_DIRECTORY);
if (repoRootDir == null) {
- transientRepository = new TransientRepository();
+ repository = new TransientRepository();
} else {
- transientRepository = new TransientRepository(repoRootDir + "/repository.xml", repoRootDir);
+ repository = new TransientRepository(repoRootDir + "/repository.xml", repoRootDir);
}
- return transientRepository;
+ return repository;
}
+
+ public Session login (String userName) throws LoginException,RepositoryException {
+ Credentials credentials = new SimpleCredentials(userName, "password".toCharArray());
+ return repository.login( credentials );
+ }
public void registerNodeTypesFromCndFile(String cndFileName, Session session, Workspace workspace) throws RepositoryException {
try {
@@ -78,7 +85,9 @@
* @see org.drools.repository.JCRRepositoryConfigurator#shutdown()
*/
public void shutdown() {
- transientRepository.shutdown();
+ if (repository instanceof TransientRepository) {
+ ((TransientRepository)repository).shutdown();
+ }
}
}
Modified: labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-ms-impl/src/main/java/org/drools/repository/modeshape/ModeShapeRepositoryConfigurator.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-ms-impl/src/main/java/org/drools/repository/modeshape/ModeShapeRepositoryConfigurator.java 2010-11-30 21:18:35 UTC (rev 36130)
+++ labs/jbossrules/soa_branches/BRMS-5.1.x/drools-repo/jcr-ms-impl/src/main/java/org/drools/repository/modeshape/ModeShapeRepositoryConfigurator.java 2010-11-30 22:14:26 UTC (rev 36131)
@@ -1,5 +1,10 @@
package org.drools.repository.modeshape;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+import javax.jcr.LoginException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
@@ -28,8 +33,22 @@
}
}
+
+ public Session login(String userName) throws LoginException,RepositoryException {
+ Session session = null;
+ try {
+ session = AccessController.doPrivileged( new PrivilegedExceptionAction<Session>() {
+ public Session run() throws Exception {
+ return repository.login();
+ }
+ });
+ } catch (PrivilegedActionException pae) {
+ throw new RepositoryException(pae.getMessage(),pae);
+ }
+ return session;
+ }
- public void shutdown() {
+ public void shutdown() {
if (factory instanceof org.modeshape.jcr.api.RepositoryFactory) {
((org.modeshape.jcr.api.RepositoryFactory)factory).shutdown();
}
More information about the jboss-svn-commits
mailing list