in jspwiki-main/src/main/java/org/apache/wiki/auth/user/JDBCUserDatabase.java [416:509]
public void initialize( final Engine engine, final Properties props ) throws NoRequiredPropertyException, WikiSecurityException {
final String jndiName = props.getProperty( PROP_DB_DATASOURCE, DEFAULT_DB_JNDI_NAME );
try {
final Context initCtx = new InitialContext();
final Context ctx = (Context) initCtx.lookup( "java:comp/env" );
m_ds = (DataSource) ctx.lookup( jndiName );
// Prepare the SQL selectors
final String userTable = props.getProperty( PROP_DB_TABLE, DEFAULT_DB_TABLE );
m_email = props.getProperty( PROP_DB_EMAIL, DEFAULT_DB_EMAIL );
m_fullName = props.getProperty( PROP_DB_FULL_NAME, DEFAULT_DB_FULL_NAME );
m_lockExpiry = props.getProperty( PROP_DB_LOCK_EXPIRY, DEFAULT_DB_LOCK_EXPIRY );
m_loginName = props.getProperty( PROP_DB_LOGIN_NAME, DEFAULT_DB_LOGIN_NAME );
m_password = props.getProperty( PROP_DB_PASSWORD, DEFAULT_DB_PASSWORD );
m_uid = props.getProperty( PROP_DB_UID, DEFAULT_DB_UID );
m_wikiName = props.getProperty( PROP_DB_WIKI_NAME, DEFAULT_DB_WIKI_NAME );
m_created = props.getProperty( PROP_DB_CREATED, DEFAULT_DB_CREATED );
m_modified = props.getProperty( PROP_DB_MODIFIED, DEFAULT_DB_MODIFIED );
m_attributes = props.getProperty( PROP_DB_ATTRIBUTES, DEFAULT_DB_ATTRIBUTES );
m_findAll = "SELECT * FROM " + userTable;
m_findByEmail = "SELECT * FROM " + userTable + " WHERE " + m_email + "=?";
m_findByFullName = "SELECT * FROM " + userTable + " WHERE " + m_fullName + "=?";
m_findByLoginName = "SELECT * FROM " + userTable + " WHERE " + m_loginName + "=?";
m_findByUid = "SELECT * FROM " + userTable + " WHERE " + m_uid + "=?";
m_findByWikiName = "SELECT * FROM " + userTable + " WHERE " + m_wikiName + "=?";
// The user insert SQL prepared statement
m_insertProfile = "INSERT INTO " + userTable + " ("
+ m_uid + ","
+ m_email + ","
+ m_fullName + ","
+ m_password + ","
+ m_wikiName + ","
+ m_modified + ","
+ m_loginName + ","
+ m_attributes + ","
+ m_created
+ ") VALUES (?,?,?,?,?,?,?,?,?)";
// The user update SQL prepared statement
m_updateProfile = "UPDATE " + userTable + " SET "
+ m_uid + "=?,"
+ m_email + "=?,"
+ m_fullName + "=?,"
+ m_password + "=?,"
+ m_wikiName + "=?,"
+ m_modified + "=?,"
+ m_loginName + "=?,"
+ m_attributes + "=?,"
+ m_lockExpiry + "=? "
+ "WHERE " + m_loginName + "=?";
// Prepare the role insert SQL
final String roleTable = props.getProperty( PROP_DB_ROLE_TABLE, DEFAULT_DB_ROLE_TABLE );
final String role = props.getProperty( PROP_DB_ROLE, DEFAULT_DB_ROLE );
m_insertRole = "INSERT INTO " + roleTable + " (" + m_loginName + "," + role + ") VALUES (?,?)";
m_findRoles = "SELECT * FROM " + roleTable + " WHERE " + m_loginName + "=?";
// Prepare the user delete SQL
m_deleteUserByLoginName = "DELETE FROM " + userTable + " WHERE " + m_loginName + "=?";
// Prepare the role delete SQL
m_deleteRoleByLoginName = "DELETE FROM " + roleTable + " WHERE " + m_loginName + "=?";
// Prepare the rename user/roles SQL
m_renameProfile = "UPDATE " + userTable + " SET " + m_loginName + "=?," + m_modified + "=? WHERE " + m_loginName
+ "=?";
m_renameRoles = "UPDATE " + roleTable + " SET " + m_loginName + "=? WHERE " + m_loginName + "=?";
} catch( final NamingException e ) {
LOG.error( "JDBCUserDatabase initialization error: " + e.getMessage() );
throw new NoRequiredPropertyException( PROP_DB_DATASOURCE, "JDBCUserDatabase initialization error: " + e.getMessage() );
}
// Test connection by doing a quickie select
try( final Connection conn = m_ds.getConnection(); final PreparedStatement ps = conn.prepareStatement( m_findAll ) ) {
} catch( final SQLException e ) {
LOG.error( "DB connectivity error: " + e.getMessage() );
throw new WikiSecurityException("DB connectivity error: " + e.getMessage(), e );
}
LOG.info( "JDBCUserDatabase initialized from JNDI DataSource: {}", jndiName );
// Determine if the datasource supports commits
try( final Connection conn = m_ds.getConnection() ) {
final DatabaseMetaData dmd = conn.getMetaData();
if( dmd.supportsTransactions() ) {
m_supportsCommits = true;
conn.setAutoCommit( false );
LOG.info( "JDBCUserDatabase supports transactions. Good; we will use them." );
}
} catch( final SQLException e ) {
LOG.warn( "JDBCUserDatabase warning: user database doesn't seem to support transactions. Reason: {}", e.getMessage() );
}
}