كيفية الحصول على موقع EAR الحالي برمجيا مع جبوس

StackOverflow https://stackoverflow.com/questions/1234300

  •  22-07-2019
  •  | 
  •  

سؤال

لا أحد يعرف كيفية الحصول على برمجيا المسار المطلق في نظام الملفات لEAR المنتشرة في جبوس، من كود جافا في نفس EAR؟

وأنا في حاجة الى ذلك لأنني أريد أن نسخ بعض الملفات الموجودة داخل الأذن إلى جزء آخر من الملفات، على نشر الوقت.

وشكرا للجميع!

هل كانت مفيدة؟

المحلول

وأفعل بهذه الطريقة.
EAR لديه MyService الخدمة، حيث أعمل مع محتويات EAR:

import org.jboss.system.ServiceControllerMBean;
import org.jboss.system.ServiceMBeanSupport;

public class MyService extends ServiceMBeanSupport {

    public void workWithEar() 
    {
        ServiceControllerMBean serviceController = (ServiceControllerMBean) MBeanProxy.get(
                    ServiceControllerMBean.class,
                    ServiceControllerMBean.OBJECT_NAME, server);
        // server is ServiceMBeanSupport member

        ClassLoader cl = serviceController.getClass().getClassLoader();

        String path = cl.getResource("META-INF/jboss-service.xml").getPath()
        InputStream file = cl.getResourceAsStream("META-INF/jboss-service.xml");
    }
}

نصائح أخرى

ويمكنك القيام به لكم "System.getProperty ()" هنا هو صلة للحصول على الآخر الخصائص التي يمكن أن تستخدم

مثال:

String jBossPath = System.getProperty("jboss.server.base.dir")

ونتيجة

"/Users/ALL_THE_PATH/JBoss_7-1/standelone"

وبعد كل ما تحتاجه لإضافة "/deployments/YOUR_PROJECT_EAR/..."

لتحصل على ServletContext من التماس، يمكنك القيام به:

ServletLifecycle.getCurrentServletContext()

والذي يتوفر في أقرب وقت التماس أنشأت applicationContext. ثم getRealPath("/") يعمل بشكل جيد للمجلد نشر السياق الجذر. يمكن التوصل إلى أي بنية المجلد داخل الجذر السياق.

وهذا هو ذكي جدا، ولكن يمكنك القيام بذلك عن طريق الاستعلام عن MainDeployer جبوس MBean. تم العثور على MBean في jboss.system:service=MainDeployer، ولها listDeployments عملية JMX. هذا إرجاع مجموعة من الكائنات DeploymentInfo، واحدة منها ستكون نشر أذنك. أن DeploymentInfo له خاصية url وهو URL file:// يصف دليل النشر.

ونيس، إيه؟ يمكنك استخدام API JMX الخام للقيام بذلك، ولكنها توفر الربيع آلية أجمل بكثير، وذلك باستخدام MBeanProxyFactoryBean لفضح مثيل MainDeployerMBean.

وأود أن تجد طريقة أكثر بساطة، ولكن هذا هو أفضل وجدتها حتى الآن.

هل هذه الموارد المعينة أو إتاحتها تحت مسار على شبكة الإنترنت (داخل WAR)؟

وإذا كان الأمر كذلك، هل يمكن أن محاولة استخدام <لأ href = "http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String) "يختلط =" نوفولو noreferrer "> ServletContext.getRealPath() لترجمة مسار ظاهري إلى مسار حقيقي / الملفات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top