ファイルサーバーの実装は初めてです。Alfresco jlan は、ほとんどのサーバー プロトコル (CIFS、NFS、および FTP) の純粋な Java 実装であるため、良い出発点のようです。屋外専用のスレッドがたくさんありますが、jlan に固有のものではありません。NetBeans でスタンドアロン Java パッケージとして jlan をセットアップする方法は?
前もって感謝します。
ファイルサーバーの実装は初めてです。Alfresco jlan は、ほとんどのサーバー プロトコル (CIFS、NFS、および FTP) の純粋な Java 実装であるため、良い出発点のようです。屋外専用のスレッドがたくさんありますが、jlan に固有のものではありません。NetBeans でスタンドアロン Java パッケージとして jlan をセットアップする方法は?
前もって感謝します。
https://web.archive.org/web/20110925093759/https://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/alfresco-jlan/をご覧ください。
ここには、提供された XML 構成 jlanConfig.xml を使用して JLANServer をブートストラップするための runsrv.bat (および runsrv.sh) スクリプトがあります。
提供されたファイル (jlanConfig.xml および JLANServer) は提供されたバイナリの一部ではないため (たとえば、alfresco-jlan-embed v5.0.b の一部ではない)、同様のセットアップを自分で提供する必要があります。
例えば:
ServerConfiguration cfg = new JLANFileServerConfiguration();
NetBIOSNameServer netBIOSNameServer = new NetBIOSNameServer(cfg);
cfg.addServer(netBIOSNameServer);
SMBServer smbServer = new SMBServer(cfg);
cfg.addServer(smbServer);
// start servers
for (int i = 0; i < cfg.numberOfServers(); i++) {
NetworkServer server = cfg.getServer(i);
server.startServer();
}
ServerConfiguration は、XML ファイルから読み取るか、Java コードを使用して構築できます。
private static final String HOSTNAME = "JLANHOST";
private static final int DefaultThreadPoolInit = 25;
private static final int DefaultThreadPoolMax = 50;
private static final int[] DefaultMemoryPoolBufSizes = { 256, 4096, 16384, 66000 };
private static final int[] DefaultMemoryPoolInitAlloc = { 20, 20, 5, 5 };
private static final int[] DefaultMemoryPoolMaxAlloc = { 100, 50, 50, 50 };
public JLANFileServerConfiguration() throws InvalidConfigurationException, DeviceContextException {
super(HOSTNAME);
setServerName(HOSTNAME);
// DEBUG
DebugConfigSection debugConfig = new DebugConfigSection(this);
final GenericConfigElement debugConfigElement = new GenericConfigElement("output");
final GenericConfigElement logLevelConfigElement = new GenericConfigElement("logLevel");
logLevelConfigElement.setValue("Debug");
debugConfig.setDebug("org.alfresco.jlan.debug.ConsoleDebug", debugConfigElement);
// CORE
CoreServerConfigSection coreConfig = new CoreServerConfigSection(this);
coreConfig.setMemoryPool( DefaultMemoryPoolBufSizes, DefaultMemoryPoolInitAlloc, DefaultMemoryPoolMaxAlloc);
coreConfig.setThreadPool(DefaultThreadPoolInit, DefaultThreadPoolMax);
coreConfig.getThreadPool().setDebug(true);
// GLOBAL
GlobalConfigSection globalConfig = new GlobalConfigSection(this);
// SECURITY
SecurityConfigSection secConfig = new SecurityConfigSection(this);
DefaultAccessControlManager accessControlManager = new DefaultAccessControlManager();
accessControlManager.setDebug(true);
accessControlManager.initialize(this, new GenericConfigElement("aclManager"));
secConfig.setAccessControlManager(accessControlManager);
secConfig.setJCEProvider("cryptix.jce.provider.CryptixCrypto");
final UserAccountList userAccounts = new UserAccountList();
secConfig.setUserAccounts(userAccounts);
// SHARES
FilesystemsConfigSection filesysConfig = new FilesystemsConfigSection(this);
DiskInterface diskInterface = new org.alfresco.jlan.smb.server.disk.JavaFileDiskDriver();
final GenericConfigElement driverConfig = new GenericConfigElement("driver");
final GenericConfigElement localPathConfig = new GenericConfigElement("LocalPath");
localPathConfig.setValue(".");
driverConfig.addChild(localPathConfig);
DiskDeviceContext diskDeviceContext = (DiskDeviceContext) diskInterface.createContext("JLANSHARE", driverConfig);
diskDeviceContext.setShareName("JLANSHARE");
diskDeviceContext.setConfigurationParameters(driverConfig);
diskDeviceContext.enableChangeHandler(false);
diskDeviceContext.setDiskInformation(new SrvDiskInfo(2560000, 64, 512, 2304000));// Default to a 80Gb sized disk with 90% free space
DiskSharedDevice diskDev = new DiskSharedDevice("JLANSHARE", diskInterface, diskDeviceContext);
diskDev.setConfiguration(this);
diskDev.setAccessControlList(secConfig.getGlobalAccessControls());
diskDeviceContext.startFilesystem(diskDev);
filesysConfig.addShare(diskDev);
// SMB
CIFSConfigSection cifsConfig = new CIFSConfigSection(this);
cifsConfig.setServerName(HOSTNAME);
cifsConfig.setDomainName("MYDOMAIN");
cifsConfig.setHostAnnounceInterval(5);
cifsConfig.setHostAnnouncer(true);
final CifsAuthenticator authenticator = new LocalAuthenticator() {
@Override
public int authenticateUser(ClientInfo client, SrvSession sess, int alg) {
return AUTH_ALLOW;
}
};
authenticator.setDebug(true);
authenticator.setAllowGuest(true);
authenticator.setAccessMode(CifsAuthenticator.USER_MODE);
final GenericConfigElement authenticatorConfigElement = new GenericConfigElement("authenticator");
authenticator.initialize(this, authenticatorConfigElement);
cifsConfig.setAuthenticator(authenticator);
cifsConfig.setHostAnnounceDebug(true);
cifsConfig.setNetBIOSDebug(true);
cifsConfig.setSessionDebugFlags(-1);
cifsConfig.setTcpipSMB(true);
}
Windows ボックスで JLAN を使用するには、ポート 445 で組み込みのファイル共有を無効にする必要があることに注意してください。