Java kullanıcı dilini değiştirmek

Eğer işletim sisteminiz Türkçe ise, java da bu ayarı otomatik olarak okuyacaktır. Özellikle toUpperCase methodunda küçük i harfini büyük İ ve toLowerCase metodunda da büyük I harfini küçük ı yapmaktadır. Reflection youluyla metodlara erişen, dinamik kod çağıran, dosya sistemine erişen kodlarda kullanılan bu metotdar hataya neden olmaktadır.

JVM’i işletim sistemindeki dil ayarından farklı bir dil ile çalıştırmak için JAVA_TOOL_OPTIONS adındaki ortam ya da sistem değişkenine -Duser.language=en değerini ekleyerek java’ın her açılışında dil ayarını değiştirmesini sağlayabilirsiniz.

Komut oturumunda hızlıca test etmek için komut satırında aşağıdakileri uygulayarabilirsiniz. Yapmış olacağınız ayarın sadece içinde olduğunuz komut oturumu için geçerli olacağını unutmayınız. Kalıcı olması için yukarıdaki ayarı yapmalısınız.

set JAVA_TOOL_OPTIONS=-Duser.language=en
java -XshowSettings -version

Aşağıdaki gibi bir çıktı elde etmiş olmalısınız. Çıktıda Picked up bilgisi ile alınan parametreler yazılır, bir hata varsa Unrecognized option ifadesi çıkacaktır.

Picked up JAVA_TOOL_OPTIONS: -Dsuser.language=en
VM settings:
    Max. Heap Size (Estimated): 9.95G
    Using VM: OpenxJDK 64-Bit Server VM
. . .
Locale settings:
    default locale = English (United States)
    default display locale = English (United States)
    default format locale = English (United States)
    available locales = , af, af_NA, af_ZA, agq, agq_CM, ak, ak_GH,
. . .

Creating,updating or deleting other items in interceptor

public class MyCustomerPrepareInterceptor implements PrepareInterceptor {
private static final Logger LOG = Logger.getLogger(MyCustomerPrepareInterceptor.class);

@Override
public void onPrepare(CustomerModel customerModel, InterceptorContext interceptorContext) throws InterceptorException {
  . . .
  final MyItemModel myItem = 
  interceptorContext.getModelService().create(MyItemModel.class);
  interceptorContext.registerElement(myItem);
  //interceptorContext.registerElementFor(myItem, PersistenceOperation.DELETE);
  . . .
}

Using separate file for different class logging

Below example logging flexiblesearch class to separate file with time based trigger policy. Also we can add rollover strategy for removing old files.

log4j2.appender.FlexlogAppender.type=RollingFile log4j2.appender.FlexlogAppender.name=FlexlogAppender
log4j2.appender.FlexlogAppender.fileName=${HYBRIS_LOG_DIR}/Flexlog.log
log4j2.appender.FlexlogAppender.filePattern=${HYBRIS_LOG_DIR}/Flexlog.log-%d{yyyy-MM-dd}.log
log4j2.appender.FlexlogAppender.ImmediateFlush=true log4j2.appender.FlexlogAppender.layout.type=PatternLayout
log4j2.appender.FlexlogAppender.layout.pattern=%m%n log4j2.appender.FlexlogAppender.policies.type = Policies
log4j2.appender.FlexlogAppender.policies.time.type = TimeBasedTriggeringPolicy log4j2.appender.FlexlogAppender.policies.time.interval = 1000000
log4j2.appender.FlexlogAppender.policies.time.modulate = true log4j2.logger.flexible.name = de.hybris.platform.jalo.flexiblesearch
log4j2.logger.flexible.level = DEBUG log4j2.logger.flexible.appenderRef.stdout.ref = FlexlogAppender log4j2.logger.flexible.additivity = false

Update object private property with groovy

You can update private field an object with below sample code.

def myBean = spring.getBean("myBean");
def f = myBean.getClass().getDeclaredField("myField");
f.setAccessible(true);
f.set(myBean, "new string value");