Как я могу использовать bean-компонент области запроса в компоненте и вернуться к значению по умолчанию за пределами облJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу использовать bean-компонент области запроса в компоненте и вернуться к значению по умолчанию за пределами обл

Сообщение Anonymous »

У меня есть два разных класса: TenantContext, который является областью запроса, и TenantIdentfierResolver, который является компонентом. Во время областей запроса TenantIdentifierResolver должен получить текущее имя клиента из TenantContext, за пределами областей запроса он должен просто возвращать значение по умолчанию. (Контекст клиента будет установлен функцией контроллера в конечных точках, которые этого требуют). Вот как это выглядит.

Код: Выделить всё

    @Component
@RequestScope
public class TenantContext  {
@Getter @Setter
private String currentTenant=null;

}

@Component
@RequiredArgsConstructor
public class TenantIdentifierResolver implements CurrentTenantIdentifierResolver, HibernatePropertiesCustomizer {
private final TenantContext tenantContext;
private static String defaultValue="default";

@Override
public String resolveCurrentTenantIdentifier() {
return tenantContext==null?defaultValue:tenantContext.getCurrentTenant();
}

@Override
public void customize(Map hibernateProperties) {
hibernateProperties.put(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER, this);
}

@Override
public boolean validateExistingCurrentSessions() {
return false;
}
}
Но это всегда возвращает исключения следующего вида:

Код: Выделить всё

Error creating bean with name 'scopedTarget.tenantContext': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton
Я уже пробовал

Код: Выделить всё

@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyModel = ScopedProxyMode.TARGET_CLASS)
А также ObjectProvider и аннотация @Optional, но все они приводят к одному и тому же исключению. Итак, как я могу вызывать tenantContext только тогда, когда он действительно доступен? Кажется, что ObjectProviders getIfAvailable будет идеальным решением (возвращает ноль, если объект недоступен), но он просто выдает исключение.

Подробнее здесь: https://stackoverflow.com/questions/793 ... efault-val
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»