جافا تطبيق قاعدة بيانات الربيع لن يستقيل إشارة إلى org.enhydra.jdbc.pool.PoolKeeper لا يزال نشطا لماذا؟

StackOverflow https://stackoverflow.com/questions/1445503

سؤال

ومرحبا بكم جميعا عندي طلب بسيط الربيع التي لن تنتهي كما لا يزال هناك إشارة اليسار إلى org.enhydra.jdbc.pool.PoolKeeper. I تشمل كافة المراجع أشعر هي متحملة دونه لا تبدو طيب وأي شخص من ذوي الخبرة هذا من قبل؟

وركضت jstack لنرى ما المواضيع غير الخفي حيث يعمل وجدت ما يلي:

"Thread-1" prio=10 tid=0x00007f89b03d8000 nid=0x755 in Object.wait() [0x00007f89bc243000]    java.lang.Thread.State: TIMED_WAITING (on object monitor)  at java.lang.Object.wait(Native Method)
    - waiting on <0x00007f89ec57de00> (a org.enhydra.jdbc.pool.PoolKeeper)  at org.enhydra.jdbc.pool.PoolKeeper.run(PoolKeeper.java:55)
    - locked <0x00007f89ec57de00> (a org.enhydra.jdbc.pool.PoolKeeper)  at java.lang.Thread.run(Thread.java:619)

والآن أنا في حيرة لماذا هذا يحدث I تشمل الأجزاء ذات الصلة من تكوين النقابة بلدي

<bean id="innerDataSource" class="org.enhydra.jdbc.standard.StandardXADataSource"
    destroy-method="shutdown">
    <property name="transactionManager" ref="jotm" />
    <property name="driverName" value="${jdbc.driverClassName}"/>
    <property name="url" value ="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<bean id="dataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource"
    destroy-method="shutdown">
    <property name="dataSource" ref="innerDataSource"/>
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="maxSize" value="100" />
    <!-- test your jdbc connection before using it -->
    <property name="checkLevelObject" value="${jdbc.checkLevelObject}"/>
    <property name="jdbcTestStmt" value="${jdbc.jdbcTestStmt}"/>
</bean>

والشكر بول

هل كانت مفيدة؟

المحلول

وتطبيقات الويب عادة تكوين سياق التطبيق الربيع باستخدام <لأ href = "http://static.springsource.org/spring/docs/2.5.x/reference/web-integration.html#web-integration-common" يختلط = "نوفولو noreferrer"> ContextLoaderListener ، الذي يغلق سياق التطبيق عندما يتم إيقاف تطبيق ويب.

التطبيقات

والمستقلة جافا يجب أن ندعو في طريقة close على سياق التطبيق، التي تحتج طرق تكوينها في السمة destroy-method بينما هو يدمر الفاصوليا. بدلا من ذلك، استدعاء في registerShutdownHook طريقة لتسجيل ربط اغلاق يغلق سياق التطبيق على JVM الاغلاق.

نصائح أخرى

وملف الربيع الخاص بك يبدو الصحيح بالنسبة لي على أساس جافادوك enhydra (والذي هو متفرق على مزيد من التفاصيل). أرى طريقة stopPool() في API. ربما تحاول أن في destroy-method بك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top