Hi!
Also ich habe eine Klasse OfflineProcessor, von jener sind folgende 2 Klassen eine Spezialisierung: FileSystemProcessor und DatabaseProccesor. Die beiden Spezialisierungen wiederum besitzen eine Klassenvariable welche ein Interface (ITrackParser) implementieren sollte.
Also grafisch ungefähr so:
OfflineProcessor
^ ^
| |
FileSystemProcessor DatabaseProcessor
| |
use use
| |
ITrackParser ITrackParser <-------NMEAParser (Beispiel Implementation)
Nun liegt mein Problem darin dass es möglich sein sollte dass man die Klasse welche ITrackParser implementiert auch von dritten implementiert werden können. Nun brauche ich irgendeine Möglichkeit dass, wenn ich der Klasse OfflineProcessor den Pfad zum JAR File der Implementation zu ITrackParser angebe, dass ich dann jenen Parser in FileSystemProcessor benutze.
Kann mir hier jemand weiterhelfen bzw. ist es überhaupt möglich zur Laufzeit externe JARS zu benutzen?
OfflineProcessor:
FileSystemProcessor:
ITrackParser:
mfg
Also ich habe eine Klasse OfflineProcessor, von jener sind folgende 2 Klassen eine Spezialisierung: FileSystemProcessor und DatabaseProccesor. Die beiden Spezialisierungen wiederum besitzen eine Klassenvariable welche ein Interface (ITrackParser) implementieren sollte.
Also grafisch ungefähr so:
OfflineProcessor
^ ^
| |
FileSystemProcessor DatabaseProcessor
| |
use use
| |
ITrackParser ITrackParser <-------NMEAParser (Beispiel Implementation)
Nun liegt mein Problem darin dass es möglich sein sollte dass man die Klasse welche ITrackParser implementiert auch von dritten implementiert werden können. Nun brauche ich irgendeine Möglichkeit dass, wenn ich der Klasse OfflineProcessor den Pfad zum JAR File der Implementation zu ITrackParser angebe, dass ich dann jenen Parser in FileSystemProcessor benutze.
Kann mir hier jemand weiterhelfen bzw. ist es überhaupt möglich zur Laufzeit externe JARS zu benutzen?
OfflineProcessor:
Code:
public class OfflineProcessor {
/**
* implementing class name
* must implement interface
* @see {@link org.pcd.wam.gegenstandsbereich.streetDetection.locating.parser.ITrackParser}
*/
private String className;
/**
* path to jar libary path which contains <code>{@link #className}</code>
* if <code>{@link #className}</code> is already implemented, value is null
*/
private String libPath;
/** */
private String name;
/**
* empty constructor
*/
public OfflineProcessor() {
// nothing to do
}
/**
* getter method
* dynamically instantiate a certain processor class
* @return processor class
*/
protected ITrackParser getTrackInterface() {
//FIXME wie implementieren?
return null;
}
/**
* process <code>track</code>
* @param track track
*/
protected void processTrack(final Track track) {
}
}
FileSystemProcessor:
Code:
public class FileSystemProcessor extends OfflineProcessor {
/** file path */
private String filePath;
/**
*
* get closed files with a length greater than 0
* @return list of file names
*/
public List<String> getFiles() {
return null;
}
}
ITrackParser:
Code:
public interface ITrackParser {
/**
* returns all tracks depending on parameter <code>fileName</code>
* @param s file path name or a jdbc connection string
* @return tracks
*/
public List<Track> getTracks(final String s);
/**
* returns a device id which corresponds with already definded devices
* if not available return null
* @return receiver id
*/
public String getReceiverId();
}