java.net.UnknownHostException: Тест: Тест: неизвестная ошибка Не удалось получить локальный InetAddress для VMID

Я использую c3p0 для пула соединений в моем спокойном веб-сервисе spring-jersey1.8. При запуске приложения я получаю следующую ошибку:

[com.mchange.v2.c3p0.impl.C3P0ImplUtils] INFO - Failed to get local InetAddress for VMID. This is unlikely to matter. At all. We'll add some extra randomness
java.net.UnknownHostException: Test: Test: unknown error
    at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
    at com.mchange.v2.c3p0.impl.C3P0ImplUtils.generateVmId(C3P0ImplUtils.java:120)
    at com.mchange.v2.c3p0.impl.C3P0ImplUtils.<clinit>(C3P0ImplUtils.java:98)
    at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.<init>(PoolBackedDataSourceBase.java:227)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.<init>(AbstractPoolBackedDataSource.java:62)
    at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:109)
    at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:105)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.UnknownHostException: Test: unknown error
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
    at java.net.InetAddress.getLocalHost(InetAddress.java:1479)
    ... 35 more

Кто-нибудь знает, о чем эта ошибка?

В моем файле spring-datasource.xml есть:

<!-- <context:property-placeholder location="/WEB-INF/spring.properties"></context:property-placeholder> -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close"
    p:driverClass="com.mysql.jdbc.Driver"
    p:jdbcUrl="jdbc:mysql://localhost:3306/test2" 
    p:user="root" 
    p:password="root"
    p:acquireIncrement="5" 
    p:idleConnectionTestPeriod="60" 
    p:maxPoolSize="100"
    p:maxStatements="50" 
    p:minPoolSize="10" />

и пом.xml:

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

person user3608352    schedule 07.07.2014    source источник


Ответы (2)


Таким образом, в приступе чрезмерной инженерии, направленной на предотвращение коллизий в маловероятном случае, многие источники данных c3p0 сериализуются в распределенное хранилище, c3p0 пытается дать каждому источнику данных глобально уникальный «identityToken», что частично достигается путем добавления префикса «VMID». предназначен (возможно, неудивительно) как уникальный идентификатор для текущей JVM.

VMID частично определяется интернет-адресом хоста, на котором он работает. Итак, c3p0 вызывает java.net.InetAddress.getLocalHost(), чтобы найти это. Но вызовы java.net.InetAddress.getLocalHost() могут неожиданно завершиться неудачей, возможно, из-за соображений безопасности или из-за неправильной настройки.

Все это ужасно, ужасный перебор. Написав это, я застенчив, но я потерял сон из-за самой возможности того, что в теории identityTokens могут конфликтовать, нарушая инвариант, согласно которому один identityToken должен отображаться в уникальный пул. Итак, вот оно.

Итак, мы не можем найти местный адрес. Упс. Мы возвращаемся к добавлению множества случайностей в VMID, который мы сгенерируем для вашей работающей виртуальной машины, чтобы уменьшить и без того бесконечно малую вероятность конфликта на практике. И тогда мы идем дальше. Как говорится в сообщении об ошибке, «Это вряд ли имеет значение. Вообще».

Если вы хотите, чтобы ошибка исчезла, вам нужно решить проблему, которая вызывает сбой вызовов getLocalHost() в вашей среде. Но вы действительно можете просто игнорировать это.

(Похоже, что ваша среда — это IPv6, что может быть связано с этим. Я должен проверить, достаточно ли устойчив этот код для включения адресов IPv6 в VMID. Но ваш код не зашел достаточно далеко, чтобы это имело значение. )

person Steve Waldman    schedule 07.07.2014
comment
спасибо я понял в чем проблема но не нашел решения - person user3608352; 07.07.2014
comment
Решение состоит в том, чтобы просто игнорировать Exception. если вы действительно ненавидите это, вы можете установить регистратор с именем com.mchange.v2.c3p0.impl.C3P0ImplUtils на уровень ПРЕДУПРЕЖДЕНИЯ, но я не рекомендую этого. c3p0 предназначен для регистрации в INFO. вы увидите это исключение только один раз при запуске, и в остальном оно не причинит вреда. Было бы хорошо понять, почему InetAddress.getLocalHost() не работает в вашей среде. Но я не уверен, как это отладить. - person Steve Waldman; 07.07.2014
comment
немного осмотревшись, см. 1) предложение о переполнении стека unkno" title="исключение java в потоке main java net unknownhostexception test test unkno">stackoverflow.com/questions/24612100/ и 2) ошибка JDK7, исправленная несколько дней (!) назад: bugs.java.com/bugdatabase/view_bug.do?bug_id=7180557 возможно обновление до устаревшего JDK - это путь (если последняя выпущенная версия содержит исправление). - person Steve Waldman; 07.07.2014
comment
спасибо @Steve, который решил мою проблему. я добавил запись в файл hosts - person user3608352; 08.07.2014

Как указано в другом потоке ( ссылка в комментариях Стива Уолдмана) решение состоит в том, чтобы добавить отсутствующую запись

java.net.UnknownHostException: Test: Test: unknown error

в данном случае это Тест в /etc/hosts

127.0.0.1    Test
person Jeremy S.    schedule 05.02.2015