Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Java] Constructor is undefined - Java Library

Pagina: 1
Acties:

  • Merethil
  • Registratie: December 2008
  • Laatst online: 22:17
Goeiemorgen allen,

Ik zit al een tijdje met een probleem waar ik nog geen oplossing voor heb verzonnen. Het is als volgt:

Wij hebben op onze Middleware data staan die naar ons SAP-backend moet. Dit doen we door functies in SAP aan te roepen met de SapJCo library. Deze functies roepen we aan, geven een import/export-parameter (of meerdere) mee en daarmee gaat SAP aan de haal met de gegevens die wij aangeven.
Niets nieuws voor ons en zeker niets zwaars. Nu gaan we echter over op meerdere servers naar meerdere SAP-servers, waarbij ook nog meerdere users gebruikt moeten gaan worden voor de verbindingen. Op deze manier kunnen we in SAP goed onderscheid maken tussen de verschillende functies en waar de calls vandaan komen of waar de listeners voor functies vanuit SAP staan en welke specifieke bij welke functie hoort.

Nu het technische gedeelte. Wat ik probeer te doen is het maken van een library die verschillende instanties van de "EaiSAPServer" kan maken. Deze instanties zorgen ervoor dat we via verschillende wegen contact kunnen leggen met SAP en we data over kunnen gooien.

In mijn library heb ik het volgende (vereenvoudigd):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class EaiSAPServer {
    private static JCoServer serverEaiSap = null;
    public static String serverName = "";
    
    public EaiSAPServer(String serverName) {
        EaiSAPServer.serverName = serverName;
        readProperties();
        try {
            serverEaiSap = JCoServerFactory.getServer(serverName);
        } catch (Exception e) {
            logger.logEai(e.getStackTrace(), errorCode, serverName, "Server could not be found or initialized by EaiSAPServer library", "Server does not exist or could not be made");
        }
        
    }

        ...<rest code>...
}


Ik roep deze code aan met het volgende:

Java:
1
2
3
4
5
6
public class E3ListenerServices {

    private static EaiSAPServer eaiSapServer = new EaiSAPServer("EaiSAPServer");   //Blijkbaar de defecte code
    
    ...<rest code>...
}


Bij het aanroepen van de code lokaal gaat het helemaal goed en kan ik meerdere servers instantieren vanuit verschillende classes zonder problemen. De servers werken en kunnen listeners toegevoegd krijgen zodat alles kan communiceren.
Echter, zodra ik 'm op de server gooi krijg ik de volgende melding:

code:
1
2
3
4
Exception:
java.lang.Error: Unresolved compilation problem: 
The constructor EaiSAPServer(String) is undefined
at com.hs.eai.sap.e3.E3ListenerServices.<init>(E3ListenerServices.java:9)


Het lijkt erop alsof de server niet de juiste library pakt, dus heb ik geprobeerd een andere library ervan te maken na de standaard reboots e.d. Helaas wil dit ook niet werken.

Heeft iemand enig idee wat ik mis doe? Ik loop er al een tijdje mee rond en op de één of andere manier werkt het niet zoals ik het in m'n hoofd heb.
In het vorige ontwerp was alles in de library static zodat het makkelijk aangeroepen kon worden en je geen constructors hoefde te gebruiken maar dit gaf interferentie tussen twee servers aangezien dan de servernamen dubbel voorkwamen (wat vrij logisch is, vandaar hopelijk deze work-around).

Hopelijk kan iemand 't zien! ...En hopelijk heb ik voldoende info gegeven :+

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Is jouw regel 3 in E3ListenerServices hetzelfde als regel 9 in de echte code? De foutmelding gaat nl.over regel 9...

"Any sufficiently advanced technology is indistinguishable from magic."


  • Merethil
  • Registratie: December 2008
  • Laatst online: 22:17
Jep, regel drie in het tweede codevak is regel 9 in de originele code.
Sorry voor de onduidelijkheid!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 22-11 15:51

Gerco

Professional Newbie

"Unresolved compilation problem" klinkt alsof je de .class files die door je IDE gegenereerd zijn hebt opgepakt en daar een jar van hebt gebakken. Die files kunnen best out-of-date zijn en gegenereerd terwijl je code aan het kloppen was.

Als je dat nog niet doet, bouw je jar dan eens buiten de IDE van source. Gebruik Ant of Maven of iets dergelijks.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Lijkt me duidelijk dat je op de server een andere versie hebt van EaiSAPServer dan lokaal.. Dus je moet zorgen dat ten minste deze constructor-interface van die class gelijk is om deze foutmelding te voorkomen. Met de libraries (jar-bestanden) die op de server worden gebruikt zou je al bij compilatie van de java-bestanden een fout gekregen hebben.

Of wellicht compileerde deze class lokaal ook al niet goed en gebruik je Eclipse en heb je de jar niet geupdate nadat het wel werkte.

[ Voor 16% gewijzigd door pedorus op 07-08-2013 17:36 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Merethil
  • Registratie: December 2008
  • Laatst online: 22:17
Gerco schreef op woensdag 07 augustus 2013 @ 16:56:
"Unresolved compilation problem" klinkt alsof je de .class files die door je IDE gegenereerd zijn hebt opgepakt en daar een jar van hebt gebakken. Die files kunnen best out-of-date zijn en gegenereerd terwijl je code aan het kloppen was.

Als je dat nog niet doet, bouw je jar dan eens buiten de IDE van source. Gebruik Ant of Maven of iets dergelijks.
Ik gebruik Eclipse, als het goed is zijn de class files gewoon up to date geweest voor ik een jar ging bakken aangezien daar voor gewaakt wordt in Eclipse. Heb net geprobeerd de jar buiten mijn IDE te bakken en ook dat gaf helaas geen soelaas.
pedorus schreef op woensdag 07 augustus 2013 @ 17:29:
Lijkt me duidelijk dat je op de server een andere versie hebt van EaiSAPServer dan lokaal.. Dus je moet zorgen dat ten minste deze constructor-interface van die class gelijk is om deze foutmelding te voorkomen. Met de libraries (jar-bestanden) die op de server worden gebruikt zou je al bij compilatie van de java-bestanden een fout gekregen hebben.

Of wellicht compileerde deze class lokaal ook al niet goed en gebruik je Eclipse en heb je de jar niet geupdate nadat het wel werkte.
Het gekke is dat ik degene op de server weer heb terug gekopieerd naar mijn lokale setup en ook daar draait de library vlekkeloos. Ik heb het dus na creëeren van de Jar geprobeerd en na het lokaal gebruiken van die op de server (eerst dus naar server gekopieerd, dan geprobeerd op server, dan die jar weer teruggenomen naar lokaal en daar weer getest).

Ik ga morgen (nu niet meer op 't werk) weer eens kijken, ik heb glassfish 3 al een paar maal opnieuw moeten herstarten en dat hielp niet... Kijken hoe het gaat als ik de jar onder een andere naam nogmaals op de server gooi. Helaas had ik er geen tijd meer voor en bedacht ik het me pas laat :+

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Merethil schreef op woensdag 07 augustus 2013 @ 17:57:
Ik gebruik Eclipse, als het goed is zijn de class files gewoon up to date geweest voor ik een jar ging bakken aangezien daar voor gewaakt wordt in Eclipse.
Vraag ik me af. Het kan natuurlijk bijna geen toeval zijn dat vrijwel alleen mensen die Eclipse gebruiken wel eens de melding "Unresolved compilation problem" zien. Sinds ik Netbeans gebruik heb ik die melding gelukkig nooit meer gezien, stomme feature wat mij betreft.

Dus doe eens clean project, of build eens vanaf de command line/andere IDE. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Merethil
  • Registratie: December 2008
  • Laatst online: 22:17
Ik zou 'm dan lokaal ook niet goed moeten kunnen gebruiken toch?
Als ik het project delete in mijn IDE en alleen de library include in een ander project dan hoort hij dezelfde foutmelding te geven als op de server lijkt me...

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Inderdaad, dus als het lokaal werkt, werkt het ook op de server toch? Wat is het probleem dan? :+

Alternatief komen bijvoorbeeld de .class bestanden niet overeen met hoe ze in de .jar staan, beiden kun je gebruiken bij het uitvoeren.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Merethil
  • Registratie: December 2008
  • Laatst online: 22:17
Ik heb het uiteindelijk maar opgelost door het project te hernoemen en een andere jarfile te bouwen. Toen ging de server over z'n nek en heb ik die ook mogen herstarten.
Ergens in die handelingen is 't goed gegaan want het werkt nu :+

Ik had eigenlijk verwacht dat het een fout zou zijn met iets als een static class die ik verkeerd aanroep ofzo. Lang leve tunnelvisie.

Bedankt voor de antwoorden! :)
Pagina: 1