Vanaf mijn ervaring heeft pl/java enkele grote problemen:
- Het is moeilijk om het op een postgresql-server te installeren. Zelfs als je binaire build voor je postgresql-versie vindt (wat ook moeilijk is) - het vereist wat jongleren met configuratie- en bibliotheekpaden.
- Eerste aanroep naar Java-opgeslagen procedure resulteert in een nieuw JVM-proces. JVM-processen hebben een verbindingsbereik en vereisen een bepaalde hoeveelheid geheugen voor java-heap, dus als u een verbindingspool gebruikt, krijgt u uiteindelijk 10-20 JVM's die zijn gestart en meestal ongebruikt, waardoor uw server-RAM wordt verbruikt
- pl/java kan communiceren met de postgresql-database met behulp van een zelfgemaakte JDBC-driver die algemeen JDBC-gebruik emuleert, maar heeft enkele implementatieproblemen die u misschien zullen verbazen. Vooral als je JDBC-cursors of andere niet-algemene dingen wilt gebruiken.
- pl/java-logging is nogal speciaal - het komt door de interne foutafhandelingsimplementatie van postgresql. Als u bijvoorbeeld iets logt met java logging api op ERROR-logniveau, wordt uw serververbinding verbroken.
- pl/java heeft zeer goede gegevensverwerkingsprestaties in vergelijking met op applicatieserver gebaseerde java-logica, maar het is totaal onschaalbaar - pl/java-procedures zijn volledig single-threaded - postgresql verbiedt multi-threaded procedures
- Als je een interne JDBC-driver gebruikt en je SQL-statement bevat fouten - je krijgt een cryptische foutmelding in het postgresql-logboek - totaal niet gerelateerd aan het echte probleem.
Als resultaat:je kunt pl/java-procedures met enig succes gebruiken, maar je moet het heel voorzichtig doen en waarschijnlijk moet je nadenken over het verbeteren van je applicatie-ontwerp.