Fra min erfaring har pl/java nogle store problemer:
- Det er svært at installere det på en postgresql-server. Selvom du finder binær build til din postgresql-version (hvilket også er svært) - det har brug for nogle konfigurations- og bibliotekssti-jonglering.
- Første kald til den lagrede Java-procedure vil resultere i en ny JVM-proces. JVM-processer er forbindelsesbaserede og kræver en vis mængde hukommelse til java-heap, så hvis du bruger forbindelsespulje, ender du med 10-20 JVM'er, der er startet og ubrugte det meste af tiden, hvilket forbruger din server-RAM
- pl/java kan kommunikere med postgresql-databasen ved hjælp af selvfremstillet JDBC-driver, som emulerer almindelig JDBC-brug, men har nogle implementeringsproblemer, som kan overraske dig. Især hvis du vil bruge JDBC cusrors eller andre ikke så almindelige ting.
- pl/java-logning er ret speciel - det er på grund af postgresql intern fejlhåndteringsimplementering. For eksempel - hvis du logger noget med java logging api på ERROR log niveau - vil det afslutte din serverforbindelse.
- pl/java har en meget god databehandlingsydelse sammenlignet med applikationsserver-baseret java-logik, men den er fuldstændig uskalerbar - pl/java-procedurer er fuldt enkelt-trådede - postgresql forbyder flertrådede procedurer
- Hvis du bruger intern JDBC-driver, og din SQL-sætning indeholder fejl - vil du ende med en kryptisk fejlmeddelelse i postgresql-loggen - fuldstændig uden relation til det virkelige problem.
Som et resultat - du kan bruge pl/java-procedurer med en vis succes, men du skal gøre det meget omhyggeligt, og du skal sandsynligvis tænke på at forbedre dit applikationsdesign.