rmid(1) Remote Method Invocation (RMI) Tools rmid(1)

rmid - دیمن سیستم فعال‌سازی RMI جاوا (نسخه ۱۱)

rmid [گزینه‌ها]
گزینه‌ها
گزینه‌های خط فرمان؛ بخش «گزینه‌ها» را ببینید.

دستور rmid دیمن سیستم فعال‌سازی را راه‌اندازی می‌کند. پیش از آنکه اشیاء قابل‌فعال‌سازی بتوانند در سیستم فعال‌سازی ثبت شوند یا درون یک JVM فعال گردند، دیمن سیستم فعال‌سازی باید اجرا شده باشد. برای جزئیات بیشتر درباره نحوه نوشتن برنامه‌هایی که از اشیاء قابل‌فعال‌سازی استفاده می‌کنند، راهنمای Using Activation را در نشانی http://docs.oracle.com/javase/8/docs/technotes/guides/rmi/activation/overview.html مشاهده کنید.

دیمن را با اجرای دستور rmid و تعیین یک فایل خط‌مشی امنیتی (Security Policy) به صورت زیر راه‌اندازی کنید:

rmid -J-Djava.security.policy=rmid.policy

هنگام اجرای پیاده‌سازی اوراکل از دستور rmid، به صورت پیش‌فرض باید یک فایل خط‌مشی امنیتی را مشخص کنید تا دستور rmid بتواند بررسی کند که آیا اطلاعات موجود در هر ActivationGroupDesc مجاز به استفاده برای راه‌اندازی یک JVM جهت گروه فعال‌سازی هست یا خیر. به‌طور خاص، دستور و گزینه‌های مشخص‌شده توسط CommandEnvironment و هر ویژگی (Property) ارسال‌شده به سازنده ActivationGroupDesc اکنون باید صریحاً در فایل خط‌مشی امنیتی دستور rmid مجاز شمرده شده باشند. مقدار ویژگی sun.rmi.activation.execPolicy مشخص‌کننده خط‌مشی‌ای است که دستور rmid برای تعیین امکان استفاده از اطلاعات یک ActivationGroupDesc در راه‌اندازی JVM گروه فعال‌سازی به کار می‌گیرد. برای اطلاعات بیشتر، توضیحات گزینه -J-Dsun.rmi.activation.execPolicy=policy را مشاهده کنید.

اجرای دستور rmid فعال‌کننده (Activator) و یک رجیستری داخلی را روی درگاه پیش‌فرض ۱۰۹۸ راه‌اندازی کرده و یک ActivationSystem را به نام java.rmi.activation.ActivationSystem در این رجیستری داخلی متصل (Bind) می‌کند.

برای مشخص کردن درگاهی دیگر برای رجیستری، هنگام اجرای دستور rmid باید گزینه -port را مشخص کنید. برای نمونه، دستور زیر دیمن سیستم فعال‌سازی و یک رجیستری را روی درگاه پیش‌فرض رجیستری (۱۰۹۹) راه‌اندازی می‌کند.

rmid -J-Djava.security.policy=rmid.policy -port 1099

یک جایگزین برای راه‌اندازی rmid از خط فرمان، پیکربندی inetd (در اوراکل سولاریس) یا xinetd (در لینوکس) برای راه‌اندازی rmid در صورت نیاز (On Demand) است.

هنگامی که RMID شروع به کار می‌کند، تلاش می‌کند با فراخوانی متد System.inheritedChannel کانال موروثی (به ارث رسیده از inetd/xinetd) را دریافت کند. اگر کانال موروثی تهی (null) باشد یا نمونه‌ای از java.nio.channels.ServerSocketChannel نباشد، RMID فرض می‌کند توسط inetd/xinetd اجرا نشده است و طبق روال توضیح‌داده‌شده قبلی آغاز به کار می‌کند.

اگر کانال موروثی نمونه‌ای از ServerSocketChannel باشد، RMID از java.net.ServerSocket به دست آمده از ServerSocketChannel به عنوان سوکت سروری استفاده می‌کند که درخواست‌های اشیاء راه دور صادرشده را می‌پذیرد: رجیستری‌ای که java.rmi.activation.ActivationSystem در آن متصل شده و شیء راه دور java.rmi.activation.Activator. در این حالت، رفتار RMID مشابه حالت راه‌اندازی از خط فرمان است، به استثنای موارد زیر:

•
خروجی ارسال‌شده به System.err به یک فایل هدایت می‌شود. این فایل در دایرکتوری مشخص‌شده با ویژگی سیستمی java.io.tmpdir (معمولاً /var/tmp یا /tmp) با پیشوند rmid-err و پسوند tmp قرار می‌گیرد.
•
استفاده از گزینه -port مجاز نیست. در صورت تعیین این گزینه، RMID با پیام خطا خارج می‌شود.
•
تعیین گزینه -log الزامی است. در صورت عدم تعیین این گزینه، RMID با پیام خطا خارج می‌شود.

برای جزئیات بیشتر درباره نحوه پیکربندی سرویس‌ها جهت راه‌اندازی در صورت نیاز، صفحات راهنمای inetd (اوراکل سولاریس) یا xinetd (لینوکس) را مشاهده کنید.


گزینه‌ای را مشخص می‌کند که هنگام ایجاد هر فرآیند فرزند (گروه فعال‌سازی) توسط دستور rmid، به عنوان آرگومان خط فرمان به آن ارسال می‌شود. برای نمونه، می‌توانید یک ویژگی (Property) را به هر ماشین مجازی ایجادشده توسط دیمن سیستم فعال‌سازی ارسال کنید:
rmid -C-Dsome.property=value

این قابلیت برای ارسال آرگومان‌های خط فرمان به فرآیندهای فرزند می‌تواند برای اشکال‌زدایی مفید باشد. برای نمونه، دستور زیر گزارش‌گیری فراخوانی‌های سرور (Server-call logging) را در تمام JVMهای فرزند فعال می‌کند.

rmid -C-Djava.rmi.server.logCalls=true

گزینه‌ای را مشخص می‌کند که به مفسر جاوا در حال اجرای RMID ارسال می‌شود. برای نمونه، جهت تعیین اینکه دستور rmid از یک فایل خط‌مشی به نام rmid.policy استفاده کند، می‌توان از گزینه -J برای تعریف ویژگی java.security.policy در خط فرمان rmid استفاده کرد؛ مانند:
rmid -J-Djava.security.policy-rmid.policy

خط‌مشی‌ای را مشخص می‌کند که RMID برای بررسی دستورات و گزینه‌های خط فرمانِ مورد استفاده برای راه‌اندازی JVMای که گروه فعال‌سازی در آن اجرا می‌شود، به کار می‌گیرد. لطفاً توجه داشته باشید که این گزینه تنها در پیاده‌سازی اوراکل از دیمن فعال‌سازی Java RMI وجود دارد. اگر این ویژگی در خط فرمان مشخص نشود، نتیجه مانند این است که -J-Dsun.rmi.activation.execPolicy=default مشخص شده باشد. مقادیر ممکن برای policy می‌توانند default، policyClassName یا none باشند.
•
default

مقدار default یا عدم تعیین مقدار برای execPolicy به دستور rmid اجازه می‌دهد دستورات را با گزینه‌های خط فرمان مشخص تنها در صورتی اجرا کند که دستور rmid در فایل خط‌مشی امنیتی مورد استفاده خود مجوز اجرای آن دستورات و گزینه‌ها را دریافت کرده باشد. با خط‌مشی اجرایی پیش‌فرض، فقط می‌توان از پیاده‌سازی پیش‌فرض گروه فعال‌سازی استفاده کرد.

دستور rmid یک JVM را برای یک گروه فعال‌سازی بر اساس اطلاعات توصیف‌کننده ثبت‌شده آن گروه، یعنی یک ActivationGroupDesc، راه‌اندازی می‌کند. توصیف‌کننده گروه یک ActivationGroupDesc.CommandEnvironment اختیاری را مشخص می‌کند که شامل دستور اجرایی جهت راه‌اندازی گروه فعال‌سازی و هرگونه گزینه خط فرمانی است که باید به خط فرمان اضافه شود. به‌طور پیش‌فرض، دستور rmid از دستور java موجود در java.home استفاده می‌کند. توصیف‌کننده گروه همچنین حاوی بازنویسی‌های ویژگی‌ها است که به صورت گزینه‌هایی با فرمت -D<property>=<value> به خط فرمان افزوده می‌شوند. مجوز com.sun.rmi.rmid.ExecPermission به دستور rmid اجازه می‌دهد دستوری را که در CommandEnvironment توصیف‌کننده گروه برای راه‌اندازی گروه فعال‌سازی مشخص شده است اجرا کند. مجوز com.sun.rmi.rmid.ExecOptionPermission دستور rmid را قادر می‌سازد هنگام راه‌اندازی گروه فعال‌سازی، از گزینه‌های خط فرمان مشخص‌شده به عنوان بازنویسی‌های ویژگی در توصیف‌کننده گروه یا به صورت گزینه‌ها در CommandEnvironment استفاده کند. هنگام اعطای مجوز به دستور rmid برای اجرای دستورات و گزینه‌های گوناگون، مجوزهای ExecPermission و ExecOptionPermission باید به تمام منابع کد اعطا شوند.

ExecPermission

کلاس ExecPermission نشان‌دهنده مجوزی است که به دستور rmid اجازه می‌دهد دستوری مشخص را جهت راه‌اندازی یک گروه فعال‌سازی اجرا کند.

قواعد نگارشی (Syntax): نام یک ExecPermission مسیر فرمانی است که مجوز اجرای آن به دستور rmid داده می‌شود. نام مسیری که به یک اسلش (/) و ستاره (*) ختم می‌شود، نشان می‌دهد که تمام فایل‌های موجود در آن دایرکتوری مشمول هستند؛ که در آن اسلش کاراکتر جداکننده فایل (File.separatorChar) است. نام مسیری که به اسلش (/) و علامت منها (-) ختم می‌شود، تمام فایل‌ها و زیردایرکتوری‌های موجود در آن دایرکتوری را (به صورت بازگشتی) در بر می‌گیرد. نام مسیری که از توکن ویژه <<ALL FILES>> تشکیل شده است با هر فایلی مطابقت دارد.

نام مسیری که شامل یک ستاره (*) باشد، تمام فایل‌های موجود در دایرکتوری جاری را مشخص می‌کند. نام مسیری که شامل یک علامت منها (-) باشد، تمام فایل‌های موجود در دایرکتوری جاری و (به صورت بازگشتی) تمامی فایل‌ها و زیردایرکتوری‌های درون آن را در بر می‌گیرد.

ExecOptionPermission

کلاس ExecOptionPermission نشان‌دهنده مجوزی است که به دستور rmid اجازه می‌دهد هنگام راه‌اندازی یک گروه فعال‌سازی از گزینه خط فرمان مشخصی استفاده کند. نام یک ExecOptionPermission مقدار یک گزینه خط فرمان است.

قواعد نگارشی (Syntax): گزینه‌ها از یک طرح نویسه عام (Wildcard) محدود پشتیبانی می‌کنند. ستاره نشان‌دهنده تطبیق عام است و می‌تواند به عنوان خود نام گزینه ظاهر شود (که با هر گزینه‌ای مطابقت دارد)، یا اینکه ستاره (*) فقط زمانی می‌تواند در انتهای نام گزینه قرار گیرد که پس از یک نقطه (.) یا یک علامت مساوی (=) آمده باشد.

برای نمونه: * یا -Dmydir.* یا -Da.b.c=* معتبر است، اما *mydir یا -Da*b یا ab* نامعتبر است.

فایل خط‌مشی برای rmid (Policy file for rmid)

هنگامی که به دستور rmid مجوز اجرای دستورات و گزینه‌های گوناگون را می‌دهید، مجوزهای ExecPermission و ExecOptionPermission باید به تمام منابع کد اعطا شوند (به صورت همگانی). اعطای این مجوزها به صورت همگانی امن است زیرا تنها دستور rmid این مجوزها را بررسی می‌کند.

نمونه‌ای از یک فایل خط‌مشی که مجوزهای اجرایی مختلف را به دستور rmid اعطا می‌کند عبارت است از:

grant {
    permission com.sun.rmi.rmid.ExecPermission
        "/files/apps/java/jdk1.7.0/solaris/bin/java";
    permission com.sun.rmi.rmid.ExecPermission
        "/files/apps/rmidcmds/*";
    permission com.sun.rmi.rmid.ExecOptionPermission
        "-Djava.security.policy=/files/policies/group.policy";
    permission com.sun.rmi.rmid.ExecOptionPermission
        "-Djava.security.debug=*";
    permission com.sun.rmi.rmid.ExecOptionPermission
        "-Dsun.rmi.*";
};

نخستین مجوز اعطاشده به دستور rmid اجازه می‌دهد نسخه 1.7.0 دستور java را که با مسیر صریح آن مشخص شده است اجرا کند. به صورت پیش‌فرض، نسخه‌ای از دستور java که در java.home یافت می‌شود مورد استفاده قرار می‌گیرد (همان نسخه‌ای که دستور rmid استفاده می‌کند) و نیازی به مشخص کردن آن در فایل خط‌مشی نیست. دومین مجوز به دستور rmid اجازه می‌دهد هر دستوری را در دایرکتوری /files/apps/rmidcmds اجرا کند.

سومین مجوز اعطاشده که یک ExecOptionPermission است، به دستور rmid اجازه می‌دهد گروه فعال‌سازی‌ای را راه‌اندازی کند که فایل خط‌مشی امنیتی را به صورت /files/policies/group.policy تعریف کرده است. مجوز بعدی به ویژگی java.security.debug اجازه می‌دهد توسط یک گروه فعال‌سازی استفاده شود. آخرین مجوز نیز به هر ویژگی‌ای در سلسله‌مراتب نام ویژگی‌های sun.rmi اجازه می‌دهد توسط گروه‌های فعال‌سازی به کار گرفته شود.

برای راه‌اندازی دستور rmid با یک فایل خط‌مشی، ویژگی java.security.policy باید در خط فرمان rmid مشخص شود؛ برای نمونه:

rmid -J-Djava.security.policy=rmid.policy.

•
<policyClassName>

اگر رفتار پیش‌فرض به اندازه کافی انعطاف‌پذیر نباشد، مدیر سیستم می‌تواند هنگام راه‌اندازی دستور rmid نام کلاسی را ارائه دهد که متد checkExecCommand آن جهت بررسی دستورات قابل‌اجرا توسط دستور rmid فراخوانی شود.

شناسه policyClassName کلاسی عمومی (public) با یک سازنده عمومی بدون آرگومان را مشخص می‌کند که متد checkExecCommand زیر را پیاده‌سازی کرده باشد:

 public void checkExecCommand(ActivationGroupDesc desc, String[] command)
        throws SecurityException;

پیش از راه‌اندازی یک گروه فعال‌سازی، دستور rmid متد checkExecCommand خط‌مشی را فراخوانی کرده و توصیف‌کننده گروه فعال‌سازی به همراه آرایه‌ای حاوی دستور کامل برای راه‌اندازی گروه فعال‌سازی را به آن ارسال می‌کند. اگر متد checkExecCommand یک SecurityException صادر کند، دستور rmid گروه فعال‌سازی را راه‌اندازی نمی‌کند و یک ActivationException به فراخواننده‌ای که در تلاش برای فعال‌سازی شیء است پرتاب می‌شود.

•
none

اگر مقدار ویژگی sun.rmi.activation.execPolicy برابر با none باشد، دستور rmid هیچ‌گونه اعتبارسنجی روی دستورات راه‌اندازی گروه‌های فعال‌سازی انجام نمی‌دهد.


نام دایرکتوری‌ای را مشخص می‌کند که دیمن سیستم فعال‌سازی برای نوشتن پایگاه داده و اطلاعات مرتبط خود استفاده می‌کند. دایرکتوری گزارش‌ها به صورت پیش‌فرض یک گزارش (log) در دایرکتوری‌ای که دستور rmid در آن اجرا شده است ایجاد می‌کند.

درگاهی را مشخص می‌کند که رجیستری از آن استفاده می‌کند. دیمن سیستم فعال‌سازی ActivationSystem را با نام java.rmi.activation.ActivationSystem در این رجیستری ثبت (Bind) می‌کند. شیء ActivationSystem روی ماشین محلی را می‌توان با فراخوانی متد Naming.lookup به صورت زیر به دست آورد:
import java.rmi.*; 
    import java.rmi.activation.*;
    ActivationSystem system; system = (ActivationSystem)
    Naming.lookup("//:port/java.rmi.activation.ActivationSystem");

اجرای جاری دستور rmid را برای درگاه مشخص‌شده توسط گزینه -port متوقف می‌کند. اگر درگاهی مشخص نشود، این گزینه اجرای rmid روی درگاه ۱۰۹۸ را متوقف می‌سازد.

برای مشخص کردن مسیر کلاس‌های تعریف‌شده توسط کاربر به سیستم استفاده می‌شود. دایرکتوری‌ها با دونقطه (:) از یکدیگر جدا می‌شوند؛ برای نمونه: .:/usr/local/java/classes.

•
java(1)
•
تنظیم مسیر کلاس (Setting the Class Path)
21 November 2013 JDK 8