Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * JBoss, Home of Professional Open Source
   * Copyright 2008, Red Hat, Inc., 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
  * 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.jboss.weld.serialization;
 import static org.jboss.weld.util.reflection.Reflections.cast;
Implementation of org.jboss.weld.serialization.spi.ContextualStore

Pete Muir
 public class ContextualStoreImpl implements ContextualStore {
     private static final String GENERATED_ID_PREFIX = ContextualStoreImpl.class.getName();
     // The map containing container-local contextuals
     private final ConcurrentMap<Contextual<?>, BeanIdentifiercontextuals;
     // Inverse mapping of container-local contextuals
     // The map containing passivation capable contextuals
     private final AtomicInteger idGenerator;
     private final String contextId;
     private final BeanIdentifierIndex beanIdentifierIndex;
     public ContextualStoreImpl(String contextIdBeanIdentifierIndex beanIdentifierIndex) {
         this. = contextId;
         this. = beanIdentifierIndex;
         this. = new AtomicInteger(0);
         this. = new ConcurrentHashMap<Contextual<?>, BeanIdentifier>();
         this. = new ConcurrentHashMap<BeanIdentifierContextual<?>>();

Given a particular id, return the correct contextual. For contextuals which aren't passivation capable, the contextual can't be found in another container, and null will be returned.

id An identifier for the contextual
the contextual
     public <C extends Contextual<I>, I> C getContextual(String id) {
         return this.<C, I>getContextual(new StringBeanIdentifier(id));
     public <C extends Contextual<I>, I> C getContextual(BeanIdentifier identifier) {
         if (identifier.asString().startsWith()) {
             return (C) .get(identifier);
         } else {
             return (C) .get(identifier);

Add a contextual (if not already present) to the store, and return it's id. If the contextual is passivation capable, it's id will be used, otherwise an id will be generated

contextual the contextual to add
the current id for the contextual
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED", justification = "Using non-standard semantics of putIfAbsent")
    public BeanIdentifier putIfAbsent(Contextual<?> contextual) {
        if (contextual instanceof CommonBean<?>) {
            // this is a Bean<?> created by Weld
            CommonBean<?> bean = (CommonBean<?>) contextual;
            .putIfAbsent(bean.getIdentifier(), contextual);
            return bean.getIdentifier();
        if (contextual instanceof PassivationCapable) {
            // this is an extension-provided passivation capable bean
            PassivationCapable passivationCapable = (PassivationCapablecontextual;
            String id = passivationCapable.getId();
            BeanIdentifier identifier = new StringBeanIdentifier(id);
            return identifier;
        } else {
            BeanIdentifier id = .get(contextual);
            if (id != null) {
                return id;
            } else {
                synchronized (contextual) {
                    id = .get(contextual);
                    if (id == null) {
                        id = new StringBeanIdentifier(new StringBuilder().append().append(.incrementAndGet()).toString());
                    return id;
    public <C extends Contextual<I>, I> SerializableContextual<C, I> getSerializableContextual(Contextual<I> contextual) {
        if (contextual instanceof SerializableContextual<?, ?>) {
            return cast(contextual);
        return SerializableContextualFactory.create(, Reflections.<C> cast(contextual), this);
    public <C extends Contextual<I>, I> SerializableContextualInstance<C, I> getSerializableContextualInstance(Contextual<I> contextual, I instanceCreationalContext<I> creationalContext) {
        return new SerializableContextualInstanceImpl<C, I>(Reflections.<C>cast(contextual), instancecreationalContextthis);
    public void cleanup() {
New to GrepCode? Check out our FAQ X