Я новичок в спецификации JDO и реализациях Datanucleus, и сейчас я борюсь в своем Проекте с ошибкой, описанной выше.
Какие шаги приведут к воспроизведению Проблемы:
1-Определение класса "DefaultDiffTask":
`@ PersistenceCapable открытый класс DefaultDiffTask реализует IDiffTask, Serializable {@Persistent protected IDiffTaskTarget diffTaskTarget;@Persistent protected String diffTaskId;
protected IDiffTaskPhasesMgr diffTaskPhasesMgr;
@Persistent
protected IDiffTaskType diffTaskType;
@Persistent
protected String taskCreationTime;
public DefaultDiffTask() {
this.diffTaskTarget = new DefaultDiffTaskTarget(
new DefaultPageStateLocation(""), new DefaultPageStateLocation(
""));
this.diffTaskPhasesMgr = new DefaultDiffTaskPhasesMgr(this); //
DiffTaskUtility.createTaskPhasesMgr(this);
this.diffTaskType = new DefaultDiffTaskType(
DiffTaskTypeEnum.CRAWLER_BASED_DIFF);
this.taskCreationTime = (new Date()).toString();
this.diffTaskId = this.generateDiffTaskId();
}
public DefaultDiffTask(IDiffTaskTarget diffTaskArea,
IDiffTaskType diffTaskType) {
this.diffTaskTarget = diffTaskArea;
this.diffTaskPhasesMgr = new DefaultDiffTaskPhasesMgr(this); // DiffTaskUtility.createTaskPhasesMgr(this);
this.diffTaskType = diffTaskType;
this.taskCreationTime = (new Date()).toString();
this.diffTaskId = this.generateDiffTaskId();
}
...........`
2 - попытаться получить ранее сохраненный объект с помощью:
PersistenceManagerFactory pmf = JDOHelper
.getPersistenceManagerFactory(.....);
// Persistence of a Product and a Book.
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
System.out.println("Retrieving Extent for Default");
Extent e = pm.getExtent(DefaultDiffTask.class, true);
Iterator iter = e.iterator();
while (iter.hasNext()) {
Object obj = iter.next();
System.out.println("> "
+ ((DefaultDiffTask) obj).getDiffTaskId());
}
tx.commit();
} catch (Exception e) {
System.out.println("Exception thrown during retrieval of Extent : "
+ e.getMessage());
} finally {
if (tx.isActive())
tx.rollback();
pm.close();
}
ожидаемый вывод:
Получение экстента по умолчанию:что-то здесь
Но я получаю следующее исключение:
Retrieving Extent for Default
Exception thrown during retrieval of Extent : Field "net.she.sw.diff2w3c.diff.tsk.DefaultDiffTask.diffTaskTarget" is declared as a reference type (interface/Object) but **no implementation classes** of "net.she.sw.diff2w3c.diff.tsk.target.IDiffTaskTarget" have been found!
Моя точка зрения, у меня есть некоторая реализация интерфейса net.she.sw.diff2w3c.diff.tsk.DefaultDiffTask.diffTaskTarget с пометкой "@PersistenceCapable", такой как:
@PersistenceCapable
public class DefaultDiffTaskTarget extends AbstractDiffTaskTarget {
public DefaultDiffTaskTarget(IDiffTaskTargetStateLocation firstLocation,
IDiffTaskTargetStateLocation secondLocation) {
super(firstLocation, secondLocation);
// TODO Auto-generated constructor stub
}
или
@PersistenceCapable
public class DefaultDiffTaskTarget extends AbstractDiffTaskTarget {
или
@PersistenceCapable
public class PageAreaTarget extends AbstractDiffTaskTarget {
, этот объект внедряется вконструкторы (по умолчанию и пользовательские), когда создается DefaulfDiffTask ...
, поэтому моя точка зрения
- Почему эта ошибка?
- это то, что мне не хватает?
- все реализации реализаций интерфейса IDiffTaskTargetare присутствуют в пути к классу И имеют аннотации для работы JDO / Datanucleus
я знаю, что проблема в моем коде ине на стороне JDO / Datanuclи буду благодарен за любую помощь