DeploymentException & - Klasse, die Nicht auf WebLogic Admin Server 11g
Verwandte: Laden Sie externe properties-Dateien in EJB 3 app läuft auf WebLogic 11
Mithilfe von Oracle Enterprise Pack für Eclipse erstellte ich ein Enterprise-Projekt und nannte Sie:
PropertiesDemoEAR
Schuf auch eine PropertiesDemoEARWeb Modul, in dem ich diesen code
(innen PropertiesDemoEARWeb /Java Resources /src /com.Projekt.util):
package com.project.util;
public class PropertiesFileHandler extends ApplicationLifecycleListener {
private static final String FILE = "C:/etc/error.properties";
public void preStart(ApplicationLifecycleEvent evt) {
System.out.println("\n\n\t\tInside preStart() method\n\n");
InputStream is =
evt.getApplicationContext().getAppClassLoader().getResourceAsStream(FILE);
try {
Properties convertedProps =
convertStreamToProperties(is);
String userMissingError =
convertedProps.getProperty("USER_MISSING_ERROR");
System.out.println("\n\n\t\tuserMissingError = "
+ userMissingError + "\n\n");
} catch (Throwable e) {
e.printStackTrace();
}
}
public Properties convertStreamToProperties(InputStream is) throws IOException {
System.out.println("\n\n\t\tInside convertStreamToProperties() method\n\n");
Properties props = new Properties();
if (is == null) {
throw new FileNotFoundException("property file '" + FILE + "' not found");
} else {
props.load(is);
return props;
}
}
}
Innen PropertiesDemoEAR/EarContent/META-INF/weblogic-application.xml
Habe ich noch folgenden listener-deklarativ:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" >
<!--weblogic-version:10.3.5-->
<wls:application-param>
<wls:param-name>webapp.encoding.default</wls:param-name>
<wls:param-value>UTF-8</wls:param-value>
</wls:application-param>
<wls:listener>
<wls:listener-class>
com.project.util.PropertiesFileHandler
</wls:listener-class>
</wls:listener>
</wls:weblogic-application>
Rechten Maustaste auf die PropertiesDemoEAR /Export /EAR-Datei /Ziel:
C:\Oracle\Middleware\user_projects\domains\MyDomain\autodeploy
Wenn ich WebLogic 11g durch Eclipse, bekomme ich diese Fehlermeldung in der Konsole:
[ERROR] AdapterManager - ServletContainerAdapter manager not initialized correctly.
<oracle.tip.adapter.apps.AppsConnectionFactory>
ConnectionManager cm: weblogic.connector.outbound.ConnectionManagerImpl@12433e7-eis/Apps/Apps
ManagedConnectionFactory mcf:
oracle.tip.adapter.apps.AppsManagedConnectionFactory@4303022b
<Jun 30, 2011 5:50:24 PM PDT> <Error> <Deployer> <BEA-149265>
<Failure occurred in the execution of deployment request
with ID '1309481424487' for task '0'. Error is:
'weblogic.management.DeploymentException: '
weblogic.management.DeploymentException: at
weblogic.application.internal.flow.
BaseLifecycleFlow$CreateListenerAction.run(BaseLifecycleFlow.java:176) at
weblogic.security.acl.internal.
AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at
weblogic.application.internal.flow.
BaseLifecycleFlow$BaseAction.invoke(BaseLifecycleFlow.java:104) at
weblogic.application.internal.
flow.HeadLifecycleFlow.createListener(HeadLifecycleFlow.java:117)
Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException:
com.project.util.PropertiesFileHandler
at weblogic.utils.classloaders.
GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
Frage(N):
(1) Was mache ich eventuell falsch mache? Warum kann es nicht finden, meine PropertiesFileHandler Klasse?
(2) Ist der Standort (c:/etc/error.properties) meine properties-Datei geeignet oder sollte es sein, innerhalb MyDomain-Verzeichnis?
(3) gibt es einen Standard-Verzeichnis oder einfach nur Bereich Konfiguration des WebLogic-Lasten Eigenschaften-Dateien, die zugänglich sind, jede Anwendung, die läuft in WebLogic?
- Aus meiner Sicht scheint es, dass Sie deutlich über-komplizieren das problem. Sind Sie gerade versuchen zu bekommen, preStart() zu arbeiten, oder gibt es spezifische Anforderungen, die Sie haben, um es auf diese Weise funktionieren?
- Wollen Sie wirklich zu binden, die Art und Weise, die Sie laden Eigenschaften in Ihrer Anwendung auf die Weise, dass WebLogic handhabt der EJB-Lebenszyklus, oder ist das eine rein Akademische übung?
- Nein, das ist eine echte Profi-Aufgabe... Wir haben eine Reihe von verschiedenen app-Servern und wir sehen, dass die beste Methode zum bereitstellen einer EAR-Datei, die Lesen würden, die unterschiedlichen Eigenschaften von Dateien aus den verschiedenen app-Servern. Nicht die selben properties-Datei wird von allen genutzt. Es könnte den gleichen Namen, aber unterschiedliche Inhalte haben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, machen Sie sicher, dass die Klasse in der /lib Ordner für den Rechner, auf dem die Anwendung bereitgestellt wird.
Habe es funktioniert... Das Problem war, dass ich es als Web-Projekt eher als ein Java-EE-Utility-Projekt in Oracle Enterprise Edition für Eclipse.
Als web-Projekt war die Umsetzung .class-Dateien in WEB-INF/classes statt APP-INF.
Auch, die benötigt werden, um Fehler.Eigenschaften innerhalb meiner eigentlichen domain.
C:\Oracle\Middleware\user_projects\domains\MyDomain
In Bezug auf meine eigene Frage:
Gibt es einen Standard-Verzeichnis oder einfach nur Bereich Konfiguration des WebLogic-Lasten Eigenschaften-Dateien, die zugänglich sind, jede Anwendung, die läuft in WebLogic?
Wenn -Dweblogic.ext.dirs nicht festgelegt ist, wird standardmäßig $DOMAIN/lib;$WL_HOME/common/lib/ext;$WL_HOME/server/lib/ext
Also, wenn Sie speichern Fehler.Eigenschaften in $DOMAIN/lib wird es auf dem CLASSPATH und Sie sollten in der Lage sein, um es zu laden mit getResourceAsStream("Fehler.Eigenschaften")