Java10, Java11 ready ?

142 views
Skip to first unread message

Y Watanabe

unread,
Jun 22, 2018, 1:11:02 AM6/22/18
to DBFluteユーザの集い
渡辺です。
DBFluteのJava10, Java11 対応状況はいかがでしょうか?

こちらでごく簡単に検証しましたところ、
DBFLuteが自動生成するJavaクラスのコード上の@Resourceなどのアノテーションが、
JDK10だとコンパイルエラーになりました。
gradleのコンパイラーオプションに --add-moduleでいくつか追加が必要でした。
(が、ごく雑な手作業をしたので上の情報が間違いである可能性も高い)

ぼちぼち、既存システムのJava10,11へのアップデートを考えなければならないので、
DBFluteとしての対応状況or対応方法の情報がどこかにあるとありがたいです。


kubo

unread,
Jun 22, 2018, 1:27:30 AM6/22/18
to DBFluteユーザの集い
jfluteです

渡辺さん、こんにちは

> gradleのコンパイラーオプションに --add-moduleでいくつか追加が必要でした。
そういう話をわりと最近、別のところで聞いたところです。
"いつか時間とってちゃんとアプローチしないといけないなぁ"
という段階で自分の方では現時点ではそれ以上の情報はほとんどないです。
(とある現場でJava10使うためのアプローチしてるのを耳にはしているので、
もしかしたらフィードバックなど出てくる可能性もありますが)

もし、よければですが、他のユーザーの方のためにも、
"gradleのコンパイラーオプションに --add-moduleでいくつか追加"
この辺の情報など提供(公開)して頂けると嬉しいですm(_ _)m。


一方で、Spring Frameworkの場合ですよね?
@Resourceを使っているのは一箇所だけっぽいので、
使わないように修正しちゃったほうがいいのかもしれませんね。
(複数DB対応のためのコンポーネント名を指定するために
使っていたのですが別の方法があれば...)

@Resource(name="dataSource")
protected DataSource _dataSource; // name basis here for multiple DB

kubo

unread,
Jun 22, 2018, 1:40:05 AM6/22/18
to DBFluteユーザの集い
jfluteです

せっかくなので、Java9関連の話をこちらのスレッドで。

論理的に不安に思っていた、sun.misc.Unsafe ですが、
もともとDBFluteで直接的に使っているところはないです。

リフレクションの setAccessbile(true) は、
DBFlute内部でよく利用されている DfBeanDescImpl において、
以前GAE環境のために使わないように回避はしています。
ただ、別の箇所で幾つか使っている箇所もあるのでそちらはまた要検証。
(早いところ、テスト環境を作らないとですね...)

DfBeanDescImpl:

protected void addFields(Class<?> clazz) {
final Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
final String fieldName = field.getName();
if (_fieldMap.containsKey(fieldName)) { // target class's
fields have priority
continue;
}

if (isFieldPrivateAccessible()) {
field.setAccessible(true);
}

_fieldMap.put(fieldName, field);
if (DfReflectionUtil.isInstanceVariableField(field)) {
if (hasPropertyDesc(fieldName)) {
final DfPropertyDesc pd = getPropertyDesc(fieldName);
pd.setField(field);
} else if (DfReflectionUtil.isPublicField(field)) {
final DfPropertyDesc pd =
createPropertyDesc(fieldName, field.getType(), null, null, field);
_propertyDescMap.put(fieldName, pd);
}
}
}
}

protected boolean isFieldPrivateAccessible() {
// GAE does not support private access, and DBFlute does not
use private access
// so it does not use private access as default
return false;
}

kubo

unread,
Jul 12, 2018, 2:57:15 AM7/12/18
to DBFluteユーザの集い
jfluteです

> 一方で、Spring Frameworkの場合ですよね?
> @Resourceを使っているのは一箇所だけっぽいので、
> 使わないように修正しちゃったほうがいいのかもしれませんね。
> (複数DB対応のためのコンポーネント名を指定するために
> 使っていたのですが別の方法があれば...)

こちらの件は、@Qualifierを使うことで@Resourceを使わないようにしました。
https://github.com/dbflute/dbflute-core/commit/454ddc2dc0c770049877ca8b6a002aba15f7dd67

1.1.8のパッチとしてすでに反映されています。
Reply all
Reply to author
Forward
0 new messages