You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by aj...@apache.org on 2009/01/13 07:06:52 UTC
svn commit: r734048 [1/2] - in /incubator/jspwiki/trunk: ./ etc/i18n/
src/com/ecyrd/jspwiki/ src/com/ecyrd/jspwiki/action/
src/com/ecyrd/jspwiki/auth/ src/com/ecyrd/jspwiki/auth/login/
src/com/ecyrd/jspwiki/preferences/ src/com/ecyrd/jspwiki/ui/admin/ ...
Author: ajaquith
Date: Mon Jan 12 22:06:39 2009
New Revision: 734048
URL: http://svn.apache.org/viewvc?rev=734048&view=rev
Log:
Localized UserDatabaseLoginModule so that it throws errors in the user's correct Locale. Changed the stop-the-presses RuntimeExceptions thrown by AdminBeanManager to an (milder) error that is logged. Halting the WikiEngine was proving to be too aggressive in test situations. Fixed b0rked jspwiki.css.
Added:
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/LocaleCallback.java
Modified:
incubator/jspwiki/trunk/ChangeLog
incubator/jspwiki/trunk/etc/i18n/CoreResources.properties
incubator/jspwiki/trunk/etc/i18n/CoreResources_de.properties
incubator/jspwiki/trunk/etc/i18n/CoreResources_nl.properties
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/LoginActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/package.html
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/AuthenticationManager.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModule.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/WikiCallbackHandler.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/preferences/Preferences.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/admin/AdminBeanManager.java
incubator/jspwiki/trunk/src/webdocs/templates/default/jspwiki.css
incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModuleTest.java
Modified: incubator/jspwiki/trunk/ChangeLog
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/ChangeLog?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/ChangeLog (original)
+++ incubator/jspwiki/trunk/ChangeLog Mon Jan 12 22:06:39 2009
@@ -1,4 +1,17 @@
-2009-01-12 Florian Holeczek <fl...@apache.org>
+202009-01-13 Andrew Jaquith <ajaquith AT apache DOT org>
+
+ * 3.0.0-svn-50
+
+ * Localized UserDatabaseLoginModule so that it throws errors in the
+ user's correct Locale.
+
+ * Changed the stop-the-presses RuntimeExceptions thrown by
+ AdminBeanManager to an (milder) error that is logged. Halting the
+ WikiEngine was proving to be too aggressive in test situations.
+
+ * Fixed b0rked jspwiki.css.
+
+09-01-12 Florian Holeczek <fl...@apache.org>
* 3.0.0-svn-49
Modified: incubator/jspwiki/trunk/etc/i18n/CoreResources.properties
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/etc/i18n/CoreResources.properties?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/etc/i18n/CoreResources.properties (original)
+++ incubator/jspwiki/trunk/etc/i18n/CoreResources.properties Mon Jan 12 22:06:39 2009
@@ -57,9 +57,8 @@
# Login.jsp
#login.error.capslock=Invalid login (please check your Caps Lock key) #obsolete
-login.error.password=Not a valid login.
+login.error.password=The username or password is incorrect.
login.error.noaccess=It seems you don't have access to that. Sorry.
-login.error=Login failed: {2}
# Lostpassword.jsp
Modified: incubator/jspwiki/trunk/etc/i18n/CoreResources_de.properties
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/etc/i18n/CoreResources_de.properties?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/etc/i18n/CoreResources_de.properties (original)
+++ incubator/jspwiki/trunk/etc/i18n/CoreResources_de.properties Mon Jan 12 22:06:39 2009
@@ -67,7 +67,6 @@
login.error.password=Ungültiges Passwort!
login.error.noaccess=Du hast offenbar keine Berechtigung hierzu. Sorry!
-login.error=Anmeldung fehlgeschlagen: {2}
# Lostpassword.jsp
Modified: incubator/jspwiki/trunk/etc/i18n/CoreResources_nl.properties
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/etc/i18n/CoreResources_nl.properties?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/etc/i18n/CoreResources_nl.properties (original)
+++ incubator/jspwiki/trunk/etc/i18n/CoreResources_nl.properties Mon Jan 12 22:06:39 2009
@@ -59,7 +59,7 @@
# Login.jsp
login.error.password=Geen geldige login.
-login.error.noaccess=U heeft geen toegang tot deze informatie.Sorry.
+login.error.noaccess=U heeft geen toegang tot deze informatie. Sorry.
# Lostpassword.jsp
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java Mon Jan 12 22:06:39 2009
@@ -77,7 +77,7 @@
* <p>
* If the build identifier is empty, it is not added.
*/
- public static final String BUILD = "49";
+ public static final String BUILD = "50";
/**
* This is the generic version string you should use
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/LoginActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/LoginActionBean.java?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/LoginActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/LoginActionBean.java Mon Jan 12 22:06:39 2009
@@ -2,6 +2,7 @@
import java.security.Principal;
import java.text.MessageFormat;
+import java.util.Locale;
import java.util.ResourceBundle;
import javax.mail.AuthenticationFailedException;
@@ -111,24 +112,28 @@
{
WikiSession wikiSession = getContext().getWikiSession();
ValidationErrors errors = getContext().getValidationErrors();
+ Locale locale = getContext().getLocale();
log.debug( "Attempting to authenticate user " + m_username );
// Log the user in!
try
{
- if( !getContext().getEngine().getAuthenticationManager().login( wikiSession, m_username, m_password ) )
+ if( !getContext().getEngine().getAuthenticationManager().login( wikiSession, locale, m_username, m_password ) )
{
}
}
catch ( LoginException e )
{
+ // Message is already localized
log.info( "Failed to authenticate user " + m_username + ", reason: " + e.getMessage());
- errors.addGlobalError( new LocalizableError( "login.error.password" ) );
+ errors.addGlobalError( new SimpleError( e.getMessage() ) );
}
catch( WikiSecurityException e )
{
- errors.addGlobalError( new LocalizableError( "login.error", e.getMessage() ) );
+ // Message is already localized
+ log.info( "Failed to authenticate user " + m_username + ", reason: " + e.getMessage());
+ errors.addGlobalError( new SimpleError( e.getMessage() ) );
}
}
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/package.html
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/package.html?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/package.html (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/package.html Mon Jan 12 22:06:39 2009
@@ -90,7 +90,7 @@
{@link
com.ecyrd.jspwiki.ui.stripes.WikiActionBeanContext#getWikiSession()}.</p>
WikiActionBeanContext also implements the {@link
-org.apache.jspwiki.api.WikiContext} interface, so any methods that
+com.ecyrd.jspwiki.WikiContext} interface, so any methods that
normally operate on WikiContext will work with WikiActionBeanContext
also.
<em>Note: WikiActionBean method {@link
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/AuthenticationManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/AuthenticationManager.java?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/AuthenticationManager.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/AuthenticationManager.java Mon Jan 12 22:06:39 2009
@@ -369,6 +369,27 @@
/**
* Attempts to perform a WikiSession login for the given username/password
+ * combination using JSPWiki's custom authentication mode, using the system default Locale.
+ * The operation is otherwise identical to {@link #login(WikiSession, Locale, String, String)}.
+ * @param session the current wiki session; may not be <code>null</code>.
+ * @param username The user name
+ * @param password the password
+ * @return <code>true</code> if the username/password is valid; <code>false</code>
+ * if the LoginModule should be ignored, or the WikiSession was <code>null</code>
+ * @throws LoginException
+ * if the LoginModule's <code>login()</code> or <code>commit()</code> phases
+ * failed for any reason, including invalid credentials.
+ * @throws WikiSecurityException
+ * if the login failed for any other reason. The root-cause exception can
+ * be retrieved via {@link java.lang.Throwable#getCause()}
+ */
+ public final boolean login( WikiSession session, String username, String password ) throws WikiSecurityException, LoginException
+ {
+ return login( session, Locale.getDefault(), username, password );
+ }
+
+ /**
+ * Attempts to perform a WikiSession login for the given username/password
* combination using JSPWiki's custom authentication mode. In order to log in,
* the JAAS LoginModule supplied by the WikiEngine property {@link #PROP_LOGIN_MODULE}
* will be instantiated, and its
@@ -391,7 +412,7 @@
* if the login failed for any other reason. The root-cause exception can
* be retrieved via {@link java.lang.Throwable#getCause()}
*/
- public final boolean login( WikiSession session, String username, String password ) throws WikiSecurityException, LoginException
+ public final boolean login( WikiSession session, Locale locale, String username, String password ) throws WikiSecurityException, LoginException
{
if ( session == null )
{
@@ -405,9 +426,9 @@
delayLogin(username);
}
- UserManager userMgr = m_engine.getUserManager();
CallbackHandler handler = new WikiCallbackHandler(
- userMgr.getUserDatabase(),
+ m_engine,
+ locale,
username,
password );
Added: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/LocaleCallback.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/LocaleCallback.java?rev=734048&view=auto
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/LocaleCallback.java (added)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/LocaleCallback.java Mon Jan 12 22:06:39 2009
@@ -0,0 +1,58 @@
+/*
+ JSPWiki - a JSP-based WikiWiki clone.
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+package com.ecyrd.jspwiki.auth.login;
+
+import java.util.Locale;
+
+import javax.security.auth.callback.Callback;
+
+/**
+ * Callback for requesting and supplying a {@link java.util.Locale}. This callback is
+ * used by LoginModules that need access to a Locale for creating localized
+ * messages.
+ * @author Andrew Jaquith
+ * @since 3.0
+ */
+public class LocaleCallback implements Callback
+{
+
+ private Locale m_locale;
+
+ /**
+ * Returns the Locale. LoginModules call this method after a
+ * CallbackHandler sets the Locale.
+ * @return the locale
+ */
+ public Locale getLocale()
+ {
+ return m_locale;
+ }
+
+ /**
+ * Sets the Locale. CallbackHandler objects call this method.
+ * @param locale the user locale
+ */
+ public void setLocale( Locale locale )
+ {
+ m_locale = locale;
+ }
+
+}
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModule.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModule.java?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModule.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/UserDatabaseLoginModule.java Mon Jan 12 22:06:39 2009
@@ -21,6 +21,7 @@
package com.ecyrd.jspwiki.auth.login;
import java.io.IOException;
+import java.util.Locale;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.NameCallback;
@@ -29,13 +30,14 @@
import javax.security.auth.login.FailedLoginException;
import javax.security.auth.login.LoginException;
-import com.ecyrd.jspwiki.log.Logger;
-import com.ecyrd.jspwiki.log.LoggerFactory;
-
+import com.ecyrd.jspwiki.WikiEngine;
import com.ecyrd.jspwiki.auth.NoSuchPrincipalException;
import com.ecyrd.jspwiki.auth.WikiPrincipal;
import com.ecyrd.jspwiki.auth.user.UserDatabase;
import com.ecyrd.jspwiki.auth.user.UserProfile;
+import com.ecyrd.jspwiki.i18n.InternationalizationManager;
+import com.ecyrd.jspwiki.log.Logger;
+import com.ecyrd.jspwiki.log.LoggerFactory;
/**
* <p>
@@ -48,8 +50,13 @@
* username</li>
* <li>{@link javax.security.auth.callback.PasswordCallback}- supplies the
* password</li>
- * <li>{@link com.ecyrd.jspwiki.auth.login.UserDatabaseCallback}- supplies the
- * {@link com.ecyrd.jspwiki.auth.user.UserDatabase}</li>
+ * <li>{@link com.ecyrd.jspwiki.auth.login.LocaleCallback}- supplies the
+ * HTTP request, from which the user's {@link java.util.Locale} is obtained
+ * (used for constructing localized error messages)</li>
+ * <li>{@link com.ecyrd.jspwiki.auth.login.WikiEngineCallback}- supplies the
+ * {@link com.ecyrd.jspwiki.WikiEngine}, from which the
+ * {@link com.ecyrd.jspwiki.i18n.InternationalizationManager} is obtained
+ * (used for constructing localized error messages)</li>
* </ol>
* <p>
* After authentication, a Principals based on the login name will be created
@@ -64,30 +71,48 @@
private static final Logger log = LoggerFactory.getLogger( UserDatabaseLoginModule.class );
/**
- * @see javax.security.auth.spi.LoginModule#login()
- *
- * {@inheritDoc}
+ * {@inheritDoc}
+ * <p>Note: this method will throw a
+ * {@link javax.security.auth.login.FailedLoginException} if the
+ * username or password does not match what is contained in the
+ * database. The text of this message will be looked up in the
+ * {@link com.ecyrd.jspwiki.i18n.InternationalizationManager#CORE_BUNDLE}
+ * using the key <code>login.error.password</code>. Any other
+ * Exceptions thrown by this method will <em>not</em> be localized,
+ * because they represent exceptional error conditions that should not
+ * occur unless the wiki is configured incorrectly.</p>
*/
public boolean login() throws LoginException
{
- UserDatabaseCallback ucb = new UserDatabaseCallback();
NameCallback ncb = new NameCallback( "User name" );
PasswordCallback pcb = new PasswordCallback( "Password", false );
- Callback[] callbacks = new Callback[]
- { ucb, ncb, pcb };
+ LocaleCallback lcb = new LocaleCallback();
+ WikiEngineCallback wcb = new WikiEngineCallback();
+ Callback[] callbacks = new Callback[] { ncb, pcb, lcb, wcb };
try
{
m_handler.handle( callbacks );
- UserDatabase db = ucb.getUserDatabase();
String username = ncb.getName();
String password = new String( pcb.getPassword() );
+ Locale locale = lcb.getLocale();
+ WikiEngine engine = wcb.getEngine();
+ UserDatabase db = engine.getUserManager().getUserDatabase();
+ InternationalizationManager i18n = engine.getInternationalizationManager();
// Look up the user and compare the password hash
if ( db == null )
{
- throw new FailedLoginException( "No user database: check the callback handler code!" );
+ throw new LoginException( "No user database: check the callback handler code!" );
+ }
+ UserProfile profile;
+ try
+ {
+ profile = db.findByLoginName( username );
+ }
+ catch( NoSuchPrincipalException e )
+ {
+ throw new FailedLoginException( i18n.get( InternationalizationManager.CORE_BUNDLE, locale, "login.error.password" ) );
}
- UserProfile profile = db.findByLoginName( username );
String storedPassword = profile.getPassword();
if ( storedPassword != null && db.validatePassword( username, password ) )
{
@@ -101,7 +126,7 @@
return true;
}
- throw new FailedLoginException( "The username or password is incorrect." );
+ throw new FailedLoginException( i18n.get( InternationalizationManager.CORE_BUNDLE, locale, "login.error.password" ) );
}
catch( IOException e )
{
@@ -115,10 +140,6 @@
log.error( message, e );
throw new LoginException( message );
}
- catch( NoSuchPrincipalException e )
- {
- throw new FailedLoginException( "The username or password is incorrect." );
- }
}
}
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/WikiCallbackHandler.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/WikiCallbackHandler.java?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/WikiCallbackHandler.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/auth/login/WikiCallbackHandler.java Mon Jan 12 22:06:39 2009
@@ -21,11 +21,12 @@
package com.ecyrd.jspwiki.auth.login;
import java.io.IOException;
+import java.util.Locale;
import javax.security.auth.callback.*;
+import com.ecyrd.jspwiki.WikiEngine;
import com.ecyrd.jspwiki.WikiSession;
-import com.ecyrd.jspwiki.auth.user.UserDatabase;
import com.ecyrd.jspwiki.log.Logger;
import com.ecyrd.jspwiki.log.LoggerFactory;
@@ -34,7 +35,7 @@
* container. This handler is instantiated in
* {@link com.ecyrd.jspwiki.auth.AuthenticationManager#login(WikiSession, String, String)}.
* If container-managed authentication is used, the
- * {@link WebContainerCallbackHandler}is used instead. This callback handler is
+ * {@link WebContainerCallbackHandler} is used instead. This callback handler is
* designed to be used with {@link UserDatabaseLoginModule}.
* @author Andrew Jaquith
* @since 2.3
@@ -43,22 +44,26 @@
{
private static final Logger log = LoggerFactory.getLogger(WikiCallbackHandler.class);
- private final UserDatabase m_database;
+ private final WikiEngine m_engine;
private final String m_password;
private final String m_username;
+
+ private final Locale m_locale;
/**
* Create a new callback handler.
*
- * @param database The Userdatabase to use
- * @param username The username
- * @param password The password
+ * @param engine the WikiEngine for this wiki
+ * @param locale the Locale to use, for localizing messages
+ * @param username the username
+ * @param password the password
*/
- public WikiCallbackHandler( UserDatabase database, String username, String password )
+ public WikiCallbackHandler( WikiEngine engine, Locale locale, String username, String password )
{
- m_database = database;
+ m_engine = engine;
+ m_locale = locale;
m_username = username;
m_password = password;
}
@@ -73,9 +78,9 @@
for( int i = 0; i < callbacks.length; i++ )
{
Callback callback = callbacks[i];
- if ( callback instanceof UserDatabaseCallback )
+ if ( callback instanceof WikiEngineCallback )
{
- ( (UserDatabaseCallback) callback ).setUserDatabase( m_database );
+ ( (WikiEngineCallback) callback ).setEngine( m_engine );
}
else if ( callback instanceof NameCallback )
{
@@ -85,6 +90,10 @@
{
( (PasswordCallback) callback ).setPassword( m_password.toCharArray() );
}
+ else if ( callback instanceof LocaleCallback )
+ {
+ ( (LocaleCallback) callback ).setLocale( m_locale );
+ }
else if( callbacks[i] instanceof TextOutputCallback )
{
TextOutputCallback textOutputCb = (TextOutputCallback) callbacks[i];
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/preferences/Preferences.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/preferences/Preferences.java?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/preferences/Preferences.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/preferences/Preferences.java Mon Jan 12 22:06:39 2009
@@ -407,14 +407,4 @@
}
return cookieValue == null ? defaultValue : cookieValue;
}
-
- public static void main( String[] args )
- {
- Orientation r = Orientation.LEFT;
- System.out.println( r.toString() );
- System.out.println( r.name() );
- r = Orientation.valueOf( "LEFT" );
- System.out.println( r.name() );
- r = Orientation.valueOf( "foo" );
- }
}
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/admin/AdminBeanManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/admin/AdminBeanManager.java?rev=734048&r1=734047&r2=734048&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/admin/AdminBeanManager.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/admin/AdminBeanManager.java Mon Jan 12 22:06:39 2009
@@ -116,9 +116,9 @@
}
else
{
- throw new RuntimeException( "JMX bean named " + name +
- " is already registered. Hint: are you running 2 webapps with the same " +
- WikiEngine.PROP_APPNAME + "?" );
+ log.error( "JMX bean named " + name +
+ " is already registered. Hint: are you running 2 webapps with the same " +
+ WikiEngine.PROP_APPNAME + "?" );
}
}