[Seasar-user:19575] [Dolteng]DatabaseViewでjdbc.diconが自動認識されない

堀川隆弘 [E-MAIL ADDRESS DELETED]
2010年 3月 28日 (日) 19:06:18 JST


お世話になります。
堀川と申します。

早速本題なのですが、Dolteng EclipseプラグインのDatabaseViewで
jdbc.diconが自動認識されないという問題があります。

このときeclipseのログファイルには、以下のような例外を出力しています。
---
!ENTRY org.seasar.dolteng.eclipse 4 4 2010-03-28 13:11:56.285
!MESSAGE java.lang.NullPointerException
!STACK 0
java.lang.NullPointerException
	at org.seasar.dolteng.eclipse.util.JavaProjectClassLoader.toURL(JavaProjectClassLoader.java:99)
	at org.seasar.dolteng.eclipse.util.JavaProjectClassLoader.addClasspathEntries(JavaProjectClassLoader.java:77)
	at org.seasar.dolteng.eclipse.util.JavaProjectClassLoader.<init>(JavaProjectClassLoader.java:42)
	at org.seasar.dolteng.eclipse.util.JdbcDiconResourceVisitor$1.<init>(JdbcDiconResourceVisitor.java:59)
	at org.seasar.dolteng.eclipse.util.JdbcDiconResourceVisitor.visit(JdbcDiconResourceVisitor.java:59)
	at org.eclipse.core.internal.resources.Resource.accept(Resource.java:123)
	at org.eclipse.core.internal.resources.Resource.accept(Resource.java:137)
	at org.eclipse.core.internal.resources.Resource.accept(Resource.java:97)
	at org.seasar.dolteng.eclipse.model.impl.ProjectNode.loadFromProject(ProjectNode.java:130)
	at org.seasar.dolteng.eclipse.model.impl.ProjectNode.findChildren(ProjectNode.java:117)
	at org.seasar.dolteng.eclipse.action.FindChildrenAction$FindChildrenThread.run(FindChildrenAction.java:104)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3885)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3506)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
---

当方でデバッグしてみたところ、どうもMavenの個人用レポジトリ(~/.m2)以下の
jarファイルをJavaProjectClassLoaderに追加しようとする際に、
存在しないjarファイルを追加しようとしており、そこでNullPointerExceptionが
発生しているようでした。

存在しないjarファイルというのは、jarのMANIFEST.MFのClasspath属性に記述された
jarファイルで、たとえば、mayaa-1.1.26.jarの場合だと
---
Class-Path: commons-beanutils-core-1.7.0.jar commons-logging-1.0.4.jar
  commons-collections-3.1.jar jaxen-1.1.1.jar xml-apis-1.3.03.jar neko
 html-0.9.5.jar js-1.7R1.jar xercesImpl-2.7.1.jar
---
のように記述されています。

JavaProjectClassLoaderがIProject.getResolvedClasspath(true)で、
クラスパスの一覧を取得する際に、これらのjarファイルは元のjarの
相対パスと認識して返ってきますが、mayaa-1.1.26と同じフォルダに
commons〜.jarなどが配置してあるわけではないので、
存在しないjarを参照してしまうことになります。

一応この問題を回避すべく、JavaProjectClassLoaderの処理中に
存在しないjarがClasspathEntryに含まれていた場合、
例外が発生しないように処理をスキップするパッチを作成致してみました。
これで当方の環境では問題なくDatabaseViewにjdbc.diconが
認識されるようになっております。

こちら問題ないようでしたら、本家の方でも確認と検討を
お願いできませんでしょうか。
もし当方の見当違いであるようでしたら、お手数ですが、
その旨、ご指摘頂ければ幸いです。

よろしくお願いします。

環境:
Windows XP Pro SP3
Eclipse Build id: 20100218-1602 (eclipse-jee-galileo)
Dolteng Eclipse プラグイン	0.40.0
Dolteng オフライン用依存ライブラリ 0.40.0
Seasar 2.4.40
SAStruts 1.0.4-sp7

---jdbc.diconの内容---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components namespace="jdbc">
	<include path="jta.dicon"/>
	<include path="env.dicon"/>

	<component name="xaDataSource"
		class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
		<property name="driverClassName">
			"org.postgresql.Driver"
        </property>
        <property name="URL">
          "jdbc:postgresql://xxxxx/xxxxx"
        </property>
        <property name="user">"xxxxx"</property>
        <property name="password">"xxxxx"</property>
    </component>

	<component name="connectionPool"
		class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
		<property name="timeout">env.jdbc["timeout"]</property>
		<property name="maxPoolSize">env.jdbc["maxPoolSize"]</property>
		<property name="allowLocalTx">env.jdbc["allowLocalTx"]</property>
		<destroyMethod name="close"/>
	</component>

	<component name="DataSource"
		class="org.seasar.extension.dbcp.impl.DataSourceImpl"
	/>
</components>
------

-- 
堀川隆弘(Horikawa Takahiro)
[E-MAIL ADDRESS DELETED]
http://twitter.com/thorikawa
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dolteng.patch
Type: application/octet-stream
Size: 1136 bytes
Desc: 無し
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20100328/6db11322/attachment.obj>


Seasar-user メーリングリストの案内