Skip to content

Commit 6375196

Browse files
committed
wip
1 parent e2ef098 commit 6375196

File tree

4 files changed

+81
-126
lines changed

4 files changed

+81
-126
lines changed

modules/core/core-api/src/main/java/com/enonic/xp/home/HomeDir.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import java.nio.file.Path;
66

77
import com.enonic.xp.annotation.PublicApi;
8-
9-
import static com.google.common.base.Strings.isNullOrEmpty;
8+
import com.enonic.xp.server.ServerInfo;
109

1110
@PublicApi
1211
public final class HomeDir
@@ -42,13 +41,8 @@ public static HomeDir get()
4241
{
4342
return homeDir;
4443
}
45-
final String str = System.getProperty( "xp.home" );
46-
if ( isNullOrEmpty( str ) )
47-
{
48-
throw new IllegalArgumentException( "Home dir [xp.home] is not set." );
49-
}
5044

51-
return new HomeDir( Path.of( str ).toAbsolutePath().normalize() );
45+
return new HomeDir( ServerInfo.get().getHomeDir().toPath().toAbsolutePath().normalize() );
5246
}
5347

5448
static void set( final Path dir )

modules/server/server-deploy/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ dependencies {
55
implementation project( ':portal:portal-api' )
66

77
implementation libs.commons.io
8+
9+
testImplementation( testFixtures( project(":core:core-api") ) )
810
}
911

1012
jar {

modules/server/server-deploy/src/main/java/com/enonic/xp/server/internal/deploy/DeployDirectoryWatcher.java

Lines changed: 73 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.Stack;
66
import java.util.concurrent.ConcurrentHashMap;
77

8-
import org.apache.commons.io.monitor.FileAlterationListener;
8+
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
99
import org.apache.commons.io.monitor.FileAlterationMonitor;
1010
import org.apache.commons.io.monitor.FileAlterationObserver;
1111
import org.osgi.service.component.annotations.Activate;
@@ -21,77 +21,43 @@
2121
import com.enonic.xp.app.Application;
2222
import com.enonic.xp.app.ApplicationKey;
2323
import com.enonic.xp.app.ApplicationService;
24-
import com.enonic.xp.server.ServerInfo;
24+
import com.enonic.xp.home.HomeDir;
2525

2626
@Component(configurationPid = "com.enonic.xp.server.deploy", service = {DeployDirectoryWatcher.class})
2727
public final class DeployDirectoryWatcher
28-
implements FileAlterationListener
2928
{
3029
private static final Logger LOGGER = LoggerFactory.getLogger( DeployDirectoryWatcher.class );
3130

3231
private final Map<String, ApplicationKey> applicationKeyByPath = new ConcurrentHashMap<>();
3332

3433
private final Map<ApplicationKey, Stack<String>> pathsByApplicationKey = new ConcurrentHashMap<>();
3534

36-
private ApplicationService applicationService;
35+
private final ApplicationService applicationService;
3736

38-
private FileAlterationMonitor monitor;
37+
private final long interval;
3938

40-
private long interval;
39+
private volatile FileAlterationMonitor monitor;
4140

4241
@Activate
43-
public void activate( final DeployConfig config )
44-
throws Exception
42+
public DeployDirectoryWatcher( @Reference final ApplicationService applicationService, final DeployConfig config )
4543
{
46-
interval = config.interval();
44+
this.applicationService = applicationService;
45+
this.interval = config.interval();
4746
}
4847

4948
public void deploy()
5049
throws Exception
5150
{
52-
final FileAlterationObserver observer1 = addListenerDir( getDeployFolder() );
53-
this.monitor = new FileAlterationMonitor( interval, observer1 );
51+
final FileAlterationObserver observer = FileAlterationObserver.builder()
52+
.setFile( HomeDir.get().toPath().resolve( "deploy" ).toFile() )
53+
.setFileFilter( DeployDirectoryWatcher::isJarFile )
54+
.get();
55+
observer.addListener( new Listener() );
56+
this.monitor = new FileAlterationMonitor( interval, observer );
5457
this.monitor.start();
5558
}
5659

57-
private FileAlterationObserver addListenerDir( final File dir )
58-
throws Exception
59-
{
60-
final FileAlterationObserver observer = new FileAlterationObserver( dir, this::isJarFile );
61-
observer.addListener( this );
62-
63-
installApps( dir );
64-
return observer;
65-
}
66-
67-
private void installApps( final File dir )
68-
throws Exception
69-
{
70-
if ( !dir.exists() )
71-
{
72-
return;
73-
}
74-
75-
final File[] files = dir.listFiles( this::isJarFile );
76-
if ( files == null )
77-
{
78-
return;
79-
}
80-
81-
for ( final File file : files )
82-
{
83-
try
84-
{
85-
installApplication( file );
86-
}
87-
catch ( Exception e )
88-
{
89-
LOGGER.error( "Failed to install local application [" + file.getName() + "]", e );
90-
}
91-
}
92-
}
93-
94-
private boolean isJarFile( final File file )
60+
private static boolean isJarFile( final File file )
9561
{
9662
return file.getName().endsWith( ".jar" ) && file.isFile();
9763
}
@@ -106,70 +72,77 @@ public void deactivate()
10672
}
10773
}
10874

109-
@Override
110-
public void onStart( final FileAlterationObserver fileAlterationObserver )
75+
private class Listener
76+
extends FileAlterationListenerAdaptor
11177
{
112-
}
113-
114-
@Override
115-
public void onDirectoryCreate( final File file )
116-
{
117-
}
118-
119-
@Override
120-
public void onDirectoryChange( final File file )
121-
{
122-
}
78+
@Override
79+
public void onStart( final FileAlterationObserver observer )
80+
{
81+
final File dir = observer.getDirectory();
82+
if ( !dir.exists() )
83+
{
84+
return;
85+
}
12386

124-
@Override
125-
public void onDirectoryDelete( final File file )
126-
{
127-
}
87+
final File[] files = dir.listFiles( DeployDirectoryWatcher::isJarFile );
88+
if ( files == null )
89+
{
90+
return;
91+
}
12892

129-
@Override
130-
public void onFileCreate( final File file )
131-
{
132-
try
133-
{
134-
installApplication( file );
135-
}
136-
catch ( Exception e )
137-
{
138-
LOGGER.error( "Failed to install local application", e );
93+
for ( final File file : files )
94+
{
95+
try
96+
{
97+
installApplication( file );
98+
}
99+
catch ( Exception e )
100+
{
101+
LOGGER.error( "Failed to install local application [{}]", file.getName(), e );
102+
}
103+
}
139104
}
140-
}
141105

142-
@Override
143-
public void onFileChange( final File file )
144-
{
145-
try
106+
@Override
107+
public void onFileCreate( final File file )
146108
{
147-
installApplication( file );
148-
}
149-
catch ( Exception e )
150-
{
151-
LOGGER.error( "Failed to install local application", e );
109+
try
110+
{
111+
installApplication( file );
112+
}
113+
catch ( Exception e )
114+
{
115+
LOGGER.error( "Failed to install local application", e );
116+
}
152117
}
153-
}
154118

155-
@Override
156-
public void onFileDelete( final File file )
157-
{
158-
try
119+
@Override
120+
public void onFileChange( final File file )
159121
{
160-
uninstallApplication( file );
122+
try
123+
{
124+
installApplication( file );
125+
}
126+
catch ( Exception e )
127+
{
128+
LOGGER.error( "Failed to install local application", e );
129+
}
161130
}
162-
catch ( Exception e )
131+
132+
@Override
133+
public void onFileDelete( final File file )
163134
{
164-
LOGGER.error( "Failed to uninstall local application", e );
135+
try
136+
{
137+
uninstallApplication( file );
138+
}
139+
catch ( Exception e )
140+
{
141+
LOGGER.error( "Failed to uninstall local application", e );
142+
}
165143
}
166144
}
167145

168-
@Override
169-
public void onStop( final FileAlterationObserver fileAlterationObserver )
170-
{
171-
}
172-
173146
private void installApplication( final File file )
174147
{
175148
//Installs the application
@@ -226,7 +199,7 @@ private void uninstallApplication( final File file )
226199
}
227200
catch ( Exception e )
228201
{
229-
LOGGER.warn( "Failed to reinstall local application [" + previousInstalledFile + "]", e );
202+
LOGGER.warn( "Failed to reinstall local application [{}]", previousInstalledFile, e );
230203
}
231204
} );
232205
}
@@ -239,16 +212,4 @@ private void uninstallApplication( final File file )
239212
return fileNameStack.isEmpty() ? null : fileNameStack;
240213
} );
241214
}
242-
243-
@Reference
244-
public void setApplicationService( final ApplicationService applicationService )
245-
{
246-
this.applicationService = applicationService;
247-
}
248-
249-
private static File getDeployFolder()
250-
{
251-
final File homeDir = ServerInfo.get().getHomeDir();
252-
return new File( homeDir, "deploy" );
253-
}
254215
}

modules/server/server-deploy/src/test/java/com/enonic/xp/server/internal/deploy/ApplicationDeployerManagerTest.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.osgi.service.condition.Condition;
1212

1313
import com.enonic.xp.app.ApplicationService;
14+
import com.enonic.xp.home.HomeDirSupport;
1415

1516
import static org.junit.jupiter.api.Assertions.assertEquals;
1617
import static org.mockito.ArgumentMatchers.any;
@@ -32,24 +33,21 @@ class ApplicationDeployerManagerTest
3233

3334
@BeforeEach
3435
void setup()
35-
throws Exception
3636
{
37+
HomeDirSupport.set( temporaryFolder );
3738
applicationService = mock( ApplicationService.class );
3839
final StoredApplicationsDeployer storedApplicationsDeployer = new StoredApplicationsDeployer( applicationService );
3940

40-
deployDirectoryWatcher = new DeployDirectoryWatcher();
4141
final DeployConfig deployConfig = mock( DeployConfig.class );
42-
System.setProperty( "xp.home", temporaryFolder.toFile().getAbsolutePath() );
43-
deployDirectoryWatcher.activate( deployConfig );
42+
deployDirectoryWatcher = new DeployDirectoryWatcher(applicationService, deployConfig);
43+
4444
applicationDeployerManager = new ApplicationDeployerManager( storedApplicationsDeployer, deployDirectoryWatcher );
4545
}
4646

4747
@Test
4848
void test_activate()
4949
throws Exception
5050
{
51-
deployDirectoryWatcher.setApplicationService( applicationService );
52-
5351
final BundleContext bundleContext = mock( BundleContext.class );
5452
applicationDeployerManager.activate( bundleContext );
5553
verify( applicationService ).installAllStoredApplications( any() );

0 commit comments

Comments
 (0)