1 package org
.argeo
.cms
.internal
.kernel
;
3 import java
.awt
.image
.Kernel
;
4 import java
.io
.IOException
;
6 import java
.nio
.file
.Files
;
7 import java
.nio
.file
.Path
;
8 import java
.util
.Dictionary
;
10 import java
.util
.Locale
;
12 import javax
.security
.auth
.login
.Configuration
;
14 import org
.apache
.commons
.logging
.Log
;
15 import org
.apache
.commons
.logging
.LogFactory
;
16 import org
.argeo
.cms
.CmsException
;
17 import org
.argeo
.node
.ArgeoLogger
;
18 import org
.argeo
.node
.NodeConstants
;
19 import org
.argeo
.node
.NodeDeployment
;
20 import org
.argeo
.node
.NodeInstance
;
21 import org
.argeo
.node
.NodeState
;
22 import org
.argeo
.util
.LangUtils
;
23 import org
.ietf
.jgss
.GSSCredential
;
24 import org
.osgi
.framework
.BundleActivator
;
25 import org
.osgi
.framework
.BundleContext
;
26 import org
.osgi
.framework
.Constants
;
27 import org
.osgi
.framework
.ServiceReference
;
28 import org
.osgi
.service
.log
.LogReaderService
;
29 import org
.osgi
.service
.useradmin
.UserAdmin
;
32 * Activates the {@link Kernel} from the provided {@link BundleContext}. Gives
33 * access to kernel information for the rest of the bundle (and only it)
35 public class Activator
implements BundleActivator
{
36 private final static Log log
= LogFactory
.getLog(Activator
.class);
38 private static Activator instance
;
40 private BundleContext bc
;
41 // private CmsSecurity nodeSecurity;
42 private LogReaderService logReaderService
;
43 // private ConfigurationAdmin configurationAdmin;
45 private NodeLogger logger
;
46 private CmsState nodeState
;
47 private CmsDeployment nodeDeployment
;
48 private CmsInstance nodeInstance
;
51 public void start(BundleContext bundleContext
) throws Exception
{
53 this.bc
= bundleContext
;
54 this.logReaderService
= getService(LogReaderService
.class);
55 // this.configurationAdmin = getService(ConfigurationAdmin.class);
58 // nodeSecurity = new CmsSecurity();
62 } catch (Exception e
) {
63 log
.error("## FATAL: CMS activator failed", e
);
64 // throw new CmsException("Cannot initialize node", e);
68 private void initSecurity() {
69 if (System
.getProperty(KernelConstants
.JAAS_CONFIG_PROP
) == null) {
70 String jaasConfig
= KernelConstants
.JAAS_CONFIG
;
71 URL url
= getClass().getClassLoader().getResource(jaasConfig
);
72 // System.setProperty(KernelConstants.JAAS_CONFIG_PROP,
73 // url.toExternalForm());
74 KernelUtils
.setJaasConfiguration(url
);
76 // explicitly load JAAS configuration
77 Configuration
.getConfiguration();
80 private void initArgeoLogger() {
81 logger
= new NodeLogger(logReaderService
);
82 bc
.registerService(ArgeoLogger
.class, logger
, null);
85 private void initNode() throws IOException
{
87 Path stateUuidPath
= bc
.getDataFile("stateUuid").toPath();
89 if (Files
.exists(stateUuidPath
)) {
90 stateUuid
= Files
.readAllLines(stateUuidPath
).get(0);
92 stateUuid
= bc
.getProperty(Constants
.FRAMEWORK_UUID
);
93 Files
.write(stateUuidPath
, stateUuid
.getBytes());
95 nodeState
= new CmsState(stateUuid
);
96 Dictionary
<String
, Object
> regProps
= LangUtils
.dico(Constants
.SERVICE_PID
, NodeConstants
.NODE_STATE_PID
);
97 regProps
.put(NodeConstants
.CN
, stateUuid
);
98 bc
.registerService(NodeState
.class, nodeState
, regProps
);
101 nodeDeployment
= new CmsDeployment();
102 bc
.registerService(NodeDeployment
.class, nodeDeployment
, null);
105 nodeInstance
= new CmsInstance();
106 bc
.registerService(NodeInstance
.class, nodeInstance
, null);
110 public void stop(BundleContext bundleContext
) throws Exception
{
111 nodeInstance
.shutdown();
112 nodeDeployment
.shutdown();
113 nodeState
.shutdown();
117 this.logReaderService
= null;
118 // this.configurationAdmin = null;
121 private <T
> T
getService(Class
<T
> clazz
) {
122 ServiceReference
<T
> sr
= bc
.getServiceReference(clazz
);
124 throw new CmsException("No service available for " + clazz
);
125 return bc
.getService(sr
);
128 public static NodeState
getNodeState() {
129 return instance
.nodeState
;
132 public static GSSCredential
getAcceptorCredentials() {
133 ServiceReference
<UserAdmin
> sr
= instance
.bc
.getServiceReference(UserAdmin
.class);
134 NodeUserAdmin userAdmin
= (NodeUserAdmin
) instance
.bc
.getService(sr
);
135 return userAdmin
.getAcceptorCredentials();
138 // static CmsSecurity getCmsSecurity() {
139 // return instance.nodeSecurity;
142 public String
[] getLocales() {
144 List
<Locale
> locales
= getNodeState().getLocales();
145 String
[] res
= new String
[locales
.size()];
146 for (int i
= 0; i
< locales
.size(); i
++)
147 res
[i
] = locales
.get(i
).toString();