Regarding the jansi issue on Windows, Comments in-line at bottom…

From: John Blum [mailto:[email protected]]
Sent: Wednesday, November 16, 2016 8:06 PM
To: Thacker, Dharam <[email protected]>
Cc: [email protected]
Subject: Re: Issues with spring-data-geode[1.0.0.APACHE-GEODE-INCUBATING-M3/M3+]

Hi Dharam-

Sorry no one, including myself, responded to you sooner.

Comments in-line below...


On Thu, Nov 10, 2016 at 3:04 AM, Thacker, Dharam 
<[email protected]<mailto:[email protected]>> wrote:
Hi Jon & Team,

We found few more issues while bootstrapping with latest spring-data-geode 
version. We don’t see the same with spring-data-gemfire though. I would request 
you to give it a try from your side as well.

1) Using log4j2 within Spring data geode, I get this problem for 
jansi-64-1.8.dll

Steps to Reproduce:

Machine: Windows 8, 64 bit
Java: java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)

Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

>> POM Dependancy:

<dependency>
       <groupId>org.springframework.data</groupId>
       <artifactId>spring-data-geode</artifactId>
       <version>1.0.0.APACHE-GEODE-INCUBATING-M3</version>
</dependency>


NOTE - the latest version of Spring Data Geode is not 1.0.0.INCUBATING-RELEASE.


>> Open a gfsh prompt and run
gfsh > start locator –name=locator1 –bind-address=localhost –port=10334

>> Simple Spring Boot Jar with following at minimum,

<util:properties id="inlineGeodeProperties">
       <prop key="locators">localhost[10334]</prop>
</util:properties>

<gfe:cache properties-ref="inlineGeodeProperties"
              critical-heap-percentage="${geode.cache.critical-heap-percentage}"
              eviction-heap-percentage="${geode.cache.eviction-heap-percentage}"
              pdx-serializer-ref="pdxSerializer" />

<gfe:cache-server
              auto-startup="true" 
bind-address="${geode.cache.server.bind-address}"
              port="${geode.cache.server.port}" 
host-name-for-clients="${geode.cache.server.hostname-for-clients}"
              max-connections="${geode.cache.server.max-connections}"/>

java –jar SPRING-BOOT.jar

Error log:

Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no 
jansi64-1.8 in java.library.path, no jansi-1.8 in java.library.path, no jansi 
in java.library.path, C:\Users\NAME\AppData\Local\Temp\jansi-64-1.8.dll (The 
process cannot access the file because it is being used by another process)]
       at org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:184) 
~[jansi-1.8.jar!/:1.8]
       at org.fusesource.hawtjni.runtime.Library.load(Library.java:142) 
~[jansi-1.8.jar!/:1.8]
       at org.fusesource.jansi.internal.Kernel32.<clinit>(Kernel32.java:37) 
~[jansi-1.8.jar!/:1.8]
       at 
org.fusesource.jansi.WindowsAnsiOutputStream.<clinit>(WindowsAnsiOutputStream.java:52)
 ~[jansi-1.8.jar!/:1.8]
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
~[na:1.8.0_74]
       at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
 ~[na:1.8.0_74]
       at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 ~[na:1.8.0_74]
       at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
~[na:1.8.0_74]
       at 
org.apache.logging.log4j.core.appender.ConsoleAppender.getOutputStream(ConsoleAppender.java:275)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.appender.ConsoleAppender.getDefaultManager(ConsoleAppender.java:238)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.appender.ConsoleAppender.createDefaultAppenderForLayout(ConsoleAppender.java:154)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.config.AbstractConfiguration.setToDefault(AbstractConfiguration.java:552)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.config.DefaultConfiguration.<init>(DefaultConfiguration.java:47)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:74) 
~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.createContext(ClassLoaderContextSelector.java:171)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:145)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:74)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:227)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at 
org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
 ~[log4j-core-2.6.2.jar!/:2.6.2]
       at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174) 
~[log4j-api-2.6.2.jar!/:2.6.2]
       at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:631) 
~[log4j-api-2.6.2.jar!/:2.6.2]
       at 
com.gemstone.gemfire.internal.logging.LogService.init(LogService.java:73) 
~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at 
com.gemstone.gemfire.internal.logging.LogService.<clinit>(LogService.java:70) 
~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at 
com.gemstone.gemfire.internal.ClassPathLoader.<clinit>(ClassPathLoader.java:71) 
~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at 
com.gemstone.gemfire.internal.i18n.AbstractStringIdResourceBundle.initData(AbstractStringIdResourceBundle.java:62)
 ~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at 
com.gemstone.gemfire.internal.i18n.AbstractStringIdResourceBundle.getBundle(AbstractStringIdResourceBundle.java:150)
 ~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at com.gemstone.gemfire.i18n.StringId.getBundle(StringId.java:85) 
~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at com.gemstone.gemfire.i18n.StringId.setLocale(StringId.java:72) 
~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at com.gemstone.gemfire.i18n.StringId.<clinit>(StringId.java:54) 
~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at 
com.gemstone.gemfire.internal.i18n.LocalizedStrings.<clinit>(LocalizedStrings.java:45)
 ~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at com.gemstone.gemfire.cache.Scope.fromString(Scope.java:162) 
~[geode-core-1.0.0-incubating.M3.jar!/:na]
       at 
org.springframework.data.gemfire.ScopeConverter.convert(ScopeConverter.java:49) 
~[spring-data-geode-1.0.0.APACHE-GEODE-INCUBATING-M3.jar!/:na]
       at 
org.springframework.data.gemfire.ScopeConverter.convert(ScopeConverter.java:32) 
~[spring-data-geode-1.0.0.APACHE-GEODE-INCUBATING-M3.jar!/:na]
       at 
org.springframework.data.gemfire.support.AbstractPropertyEditorConverterSupport.setAsText(AbstractPropertyEditorConverterSupport.java:64)
 ~[spring-data-geode-1.0.0.APACHE-GEODE-INCUBATING-M3.jar!/:na]
       at 
org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:468)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:441)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:216)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1532)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1491)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1231)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
 ~[spring-beans-4.3.3.RELEASE.jar!/:4.3.3.RELEASE]
       ... 62 common frames omitted


[Not sure if there is any way to avoid this error]

I guess the most obvious question maybe, what does your CLASSPATH look like?  
And...

Also, have you downloaded and installed a full binary distribution of Apache 
Geode?  If so, you could try setting the $GEODE (%GEODE% on Windows) 
environment variable to the installation directory.

It seems you are running your Spring Boot-based Geode Server as a Spring Boot 
application fat JAR, which will contain all the dependencies required by the 
application at runtime.  As you may already know, Spring Boot uses a special 
Java ClassLoader contained in Spring Boot application (fat) JAR file that knows 
how to resolve classes from within embedded JAR/libs bundled in the application 
(fat) JAR.  I am not sure how this may work for DLL files, but I would think it 
also partially depends on jansi knowing how to resolve the DDL as a "JAR file 
resource" if it too were bundled in the application (fat) JAR.  This may work, 
or it maybe able to resolve the DLL if the %GEODE%/lib as on the (System) 
classpath as well.



Looks like the DLL is getting locked on use.

In version 1.8, jansi copies the dll to the user’s AppData\Local\temp as 
“jansi-64-1.8.dll”.
In the newer versions, it appears they copy the dll to AppData\Local\temp with 
a random hash in the name: “jansi-64-903216579516516988.dll”.

A potential workaround is to bump version up where it uses the name mangling:

    runtime "org.fusesource.jansi:jansi:1.13"

Downside of running like this is you get a copy in \temp each time you restart, 
so you’d need to monitor and clean up over time.


[munch]

Reply via email to