[jboss-user] [JBoss Portal] - Trouble creating user on the fly programatically

david.hoffman do-not-reply at jboss.com
Fri Apr 20 14:42:14 EDT 2007


Using: jboss-portal-2.6-BETA1-bundled, configured to use MySQL as the datastore

I have a custom auth module that authenticates a user against Active Directory Server and drops a user into roles that are derived from ADS attributes.  

Upon successful authentication, as long as a user exists in the jbp_users table, I am able to log in successfully.  

However, if the user does not already exist in the jbp_users table, the following error occurs:


  | HTTP Status 500 - 
  | 
  | --------------------------------------------------------------------------------
  | 
  | type Exception report
  | 
  | message 
  | 
  | description The server encountered an internal error () that prevented it from fulfilling this request.
  | 
  | exception 
  | 
  | javax.servlet.ServletException
  | 	org.jboss.portal.server.servlet.PortalServlet.service(PortalServlet.java:407)
  | 	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
  | 	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  | 
  | 
  | root cause 
  | 
  | java.lang.NullPointerException
  | 	org.jboss.portal.core.aspects.controller.PageCustomizerInterceptor.injectDashboardNav(PageCustomizerInterceptor.java:192)
  | 
  |  { snip }
  | 
  | 	org.jboss.portal.common.invocation.Invocation.invoke(Invocation.java:157)
  | 	org.jboss.portal.server.servlet.PortalServlet.service(PortalServlet.java:381)
  | 	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
  | 	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  | 
  | 
  | 

I have made the following attempt to create the user on the fly:


  | 		try {
  | 			UserModule userModule = (UserModule) new InitialContext().lookup("java:portal/UserModule");
  | 			User user = null;
  | 			try{
  | 				user = userModule.findUserByUserName("username");
  | 			} catch (IdentityException nsue) {
  | 				//User Does Not Exist, so we need to create
  | 				try {
  | 					user = userModule.createUser("username", "password");
  | 				} catch (IdentityException ie) {
  | 					//This should not happen
  | 					log.error("Error creating user", ie);
  | 				}
  | 			}
  | 			
  | 			try {
  | 				UserProfileModule userProfileModule = (UserProfileModule) new InitialContext().lookup("java:portal/UserProfileModule");
  | 				userProfileModule.setProperty(user, User.INFO_USER_EMAIL_REAL, new StringBuffer("username").append("@email.com"));
  | 				userProfileModule.setProperty(user, User.INFO_USER_ENABLED, true);
  | 				userProfileModule.setProperty(user, User.INFO_USER_VIEW_EMAIL_VIEW_REAL, true);
  | 				userProfileModule.setProperty(user, User.INFO_USER_NAME_FAMILY, lastName);
  | 				userProfileModule.setProperty(user, User.INFO_USER_NAME_GIVEN, firstName);
  | 			} catch (IdentityException ie) {
  | 				log.error("Unable to update identity.", ie); 
  | 			}
  | 			
  | 		} catch (NamingException e) {
  | 			log.error("Error in Create UserModule", e);
  | 		}
  | 
  | 

When I execute this code, the following exception is thrown in the logs:


  | 2007-04-20 12:56:07,656 ERROR [com.workscape.auth.modules.ads.ADSAuth] Error creating user
  | org.jboss.portal.identity.IdentityException: Cannot create user username
  | 	at org.jboss.portal.identity.db.HibernateUserModuleImpl.createUser(HibernateUserModuleImpl.java:179)
  | 	at com.workscape.auth.modules.ads.ADSAuth.createLdapInitContext(ADSAuth.java:233)
  | 	at com.workscape.auth.modules.ads.ADSAuth.validatePassword(ADSAuth.java:137)
  | 	at org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:210)
  | 	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:585)
  | 	at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
  | 	at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
  | 	at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
  | 	at java.security.AccessController.doPrivileged(Native Method)
  | 	at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
  | 	at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
  | 	at org.jboss.security.plugins.JaasSecurityManager.defaultLogin(JaasSecurityManager.java:601)
  | 	at org.jboss.security.plugins.JaasSecurityManager.authenticate(JaasSecurityManager.java:535)
  | 	at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:344)
  | 	at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.authenticate(JBossSecurityMgrRealm.java:491)
  | 	at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:257)
  | 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:416)
  | 	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  | 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  | 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  | 	at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
  | 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  | 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  | 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  | 	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  | 	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  | 	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  | 	at java.lang.Thread.run(Thread.java:595)
  | Caused by: org.hibernate.HibernateException: Unable to locate current JTA transaction
  | 	at org.hibernate.context.JTASessionContext.currentSession(JTASessionContext.java:61)
  | 	at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:542)
  | 	at org.jboss.portal.identity.db.HibernateUserModuleImpl.getCurrentSession(HibernateUserModuleImpl.java:291)
  | 	at org.jboss.portal.identity.db.HibernateUserModuleImpl.createUser(HibernateUserModuleImpl.java:167)
  | 	... 30 more
  | 
  | 

It looks as if there might be some sort of configuration issue, or perhaps some preperatory coding, that I have missed because the error message states that it is "Caused by: org.hibernate.HibernateException: Unable to locate current JTA transaction"

If there is any additional information required to help resolve this issue, please let me know and I will attach it to this thread. 

Thank you in advance for any assistance in this matter.

 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4039384#4039384

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4039384



More information about the jboss-user mailing list