Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
  * JBoss, Home of Professional Open Source
  * Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual contributors
  * by the @authors tag. See the copyright.txt in the distribution for a
  * full listing of individual contributors.
  *
  * Licensed 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 org.hibernate.validator.internal.util;
 
 import java.net.URL;
 import java.util.List;
 import java.util.Map;
 
This class lazily initialize the ValidatorFactory on the first usage One benefit is that no domain class is loaded until the ValidatorFactory is really needed. Useful to avoid loading classes before JPA is initialized and has enhanced its classes. When no Configuration is passed, the provider is Hibernate Validator. This class is used by JBoss AS 6. Experimental, not considered a public API

Deprecated:
Will be removed in a future release.
Author(s):
Emmanuel Bernard
Hardy Ferentschik
 
 public class LazyValidatorFactory implements ValidatorFactory {
 	private static final Log log = LoggerFactory.make();
 	private final Configuration<?> configuration;
 	private volatile ValidatorFactory delegate//use as a barrier
 
Use the default ValidatorFactory creation routine
 
 	public LazyValidatorFactory() {
 		thisnull );
 	}
 
 	public LazyValidatorFactory(Configuration<?> configuration) {
 		this. = configuration;
 	}
 
 		if ( result == null ) {
 			synchronized ( this ) {
 				result = ;
 				if ( result == null ) {
 					 = result = initFactory();
 				}
 			}
 		}
 		return result;
 	}
 
 	public Validator getValidator() {
 		return getDelegate().getValidator();
 	}
 
 	//we can initialize several times that's ok
 
		if (  == null ) {
			return Validation
		}
		else {
		}
	}
	}
	}
	}
	}
	public <T> T unwrap(Class<T> clazz) {
		return getDelegate().unwrapclazz );
	}
	private static class HibernateProviderResolver implements ValidationProviderResolver {
		//cache per classloader for an appropriate discovery
		//keep them in a weak hash map to avoid memory leaks and allow proper hot redeployment
		private static final String SERVICES_FILE = "META-INF/services/" + ValidationProvider.class.getName();
			ClassLoader classloader = GetClassLoader.fromContext().run();
			if ( classloader == null ) {
				classloader = GetClassLoader.fromClassHibernateProviderResolver.class ).run();
			}
			List<ValidationProvider<?>> providers;
			synchronized (  ) {
				providers = .getclassloader );
			}
			if ( providers == null ) {
				List<StringproviderNames = loadProviderNamesFromServiceFileclassloader );
				providers = instantiateProvidersproviderNames );
			}
			synchronized (  ) {
				.putclassloader, Collections.unmodifiableListproviders ) );
			}
			return providers;
		}
		private List<ValidationProvider<?>> instantiateProviders(List<StringproviderNames) {
			List<ValidationProvider<?>> providers = new ArrayList<ValidationProvider<?>>();
			Class<?> providerClass;
			for ( String providerName : providerNames ) {
				try {
					providerClass = LoadClass.actionproviderNameHibernateProviderResolver.class ).run();
				}
				catch ( ValidationException e ) {
					// ignore - we don't want to  fail the whole loading because of a black sheep. Hibernate Validator
					// will be added either way
					.unableToLoadProviderClassproviderName );
					continue;
				}
				try {
					providers.add( (ValidationProviderproviderClass.newInstance() );
				}
				catch ( IllegalAccessException e ) {
				}
				catch ( InstantiationException e ) {
				}
			}
			return providers;
		}
			List<StringproviderNames = new ArrayList<String>();
			try {
				Enumeration<URLproviderDefinitions = classloader.getResources );
				while ( providerDefinitions.hasMoreElements() ) {
					URL url = providerDefinitions.nextElement();
					InputStream stream = url.openStream();
					try {
						BufferedReader reader = new BufferedReadernew InputStreamReaderstream ), 100 );
						String name = reader.readLine();
						while ( name != null ) {
							name = name.trim();
							if ( !name.startsWith"#" ) ) {
								providerNames.addname );
							}
							name = reader.readLine();
						}
					}
					finally {
						stream.close();
					}
				}
			}
			catch ( IOException e ) {
			}
			// we want to make sure that Hibernate Validator is in the list and on the first position. This
			// way Hibernate Validator will be always the default provider is nothing else is specified
			int index = providerNames.indexOf );
			if ( index < 0 ) {
				providerNames.add( 0,  );
			}
			else if ( index > 0 ) {
				providerNames.add( 0,  );
			}
			return providerNames;
		}
	}
New to GrepCode? Check out our FAQ X