[Design of JBossCache] - Re: JBoss Cache Public API
by bstansberry@jboss.com
"manik.surtani(a)jboss.com" wrote : Re: lifecycle, don't people find it useful to create a cache, then set up stuff, such as register classloaders for regions, register listeners, etc., and then start?
|
| Or should create() really be an initial state that is attained by calling CacheFactory.createCache()?
Yeah, I think that's the idea.
anonymous wrote : And then what about stop() and destroy()? Does it not make sense that a cache, once stopped, could be started again - which implies that internal components should not be cleaned up/released?
Yes, absolutely.
anonymous wrote : In which case isn't a destroy() necessasry to actually release resources and clean up?
Depends on whether they require some cleanup beyond garbage collection. Sounds like that's the thing to investigate.
Not sure if I was clear in my previous comment on this. Not saying we should definitely drop the 4 step lifecycle; just that the original reason for it no longer really applies, so worth looking into it.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4158380#4158380
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4158380
16 years, 3 months
[Design of EJB 3.0] - Re: Unit Tests for Unbinding References from JNDI in EJB3 Pr
by jaikiran
Andrew,
I have started work on this. A few questions:
1) I don't see a API which returns me a JndiSessionRegistrarBase, which i can use for calling the unbindEjb. I do see a setJndiRegistrar(JndiSessionRegistrarBase jndiRegistrar) on the SessionContainer. From what i have seen so far, the Ejb3Registrar (which i get from Ejb3RegistrarLocator.locateRegistrar) has an unbind method which will invoke the JndiSessionRegistrarBase.unbindEjb? So the test case should use the Ejb3Registrar for testing the JndiSessionRegistrarBase's unbindEjb?
2) While trying out simple SLSB for this test case, i observed that the @RemoteBinding and the @LocalBinding values are not used for binding the EJBs. The EJBs always get bound to the default jndi names (ex: beanname/remote and beanname/local). Here's the bean definition:
| @Stateless
| @Local(MyStatelessLocal.class)
| @Remote(MyStatelessRemote.class)
| @RemoteBinding (jndiBinding="MyStatelessBeanRemote")
| @LocalBinding (jndiBinding="MyStatelessBeanLocal")
| public class MySLSBean implements MyStatelessLocal, MyStatelessRemote
And here's the logs that i see:
19:47:25,284 DEBUG [Ejb3McRegistrar] Created Ejb3McRegistrar with backing Kernel: org.jboss.kernel.Kernel@d251a3
| 19:47:25,284 DEBUG [Ejb3RegistrarLocator] Bound Ejb3Registrar: org.jboss.ejb3.common.registrar.plugin.mc.Ejb3McRegistrar@1f5d386
| 19:47:25,284 DEBUG [EmbeddedTestMcBootstrap] Deploying file:/D:/JBoss/EJB3/proxy/target/tests-classes/org/jboss/ejb3/test/proxy/jndiregistrar/unit/JndiSessionRegistrarBaseTestCase-beans.xml...
| 19:47:26,284 WARN [BeanAnnotationAdapterFactory] Exception while creating bean annotation adapter instance: java.lang.IllegalAccessException: Class org.jboss.reflect.plugins.introspection.ReflectionUtils can not access a member of class org.jboss.kernel.plugins.annotations.BasicBeanAnnotationAdapter with modifiers "protected"
| 19:47:26,440 DEBUG [JndiSessionRegistrarBase] Using Session EJB JNDI ObjectFactory: org.jboss.ejb3.proxy.objectfactory.session.stateless.StatelessSessionProxyObjectFactory
| 19:47:26,628 INFO [EmbeddedTestMcBootstrap] Deployed: file:/D:/JBoss/EJB3/proxy/target/tests-classes/org/jboss/ejb3/test/proxy/jndiregistrar/unit/JndiSessionRegistrarBaseTestCase-beans.xml
| 19:47:26,878 INFO [MetaDataHelper] Business Remote JNDI Name: MySLSBean/remote
| 19:47:26,878 INFO [MetaDataHelper] Business Remote JNDI Name for org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote: MySLSBean/remote-org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote
| 19:47:26,878 INFO [MetaDataHelper] Local JNDI Name: MySLSBean/local
| 19:47:26,878 INFO [MetaDataHelper] Business Local JNDI Name for org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessLocal: MySLSBean/local-org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessLocal
| 19:47:27,253 INFO [SessionContainer] Starting org.jboss.ejb3.test.proxy.common.container.StatelessContainer@1ba94d
| 19:47:27,253 DEBUG [Ejb3McRegistrar] Returning from name "org.jboss.ejb3.JndiRegistrar.Session.SLSBJndiRegistrar": org.jboss.ejb3.proxy.jndiregistrar.JndiStatelessSessionRegistrar@7cd37a
| 19:47:27,253 DEBUG [JndiSessionRegistrarBase] Found Session Bean: MySLSBean
| 19:47:27,269 DEBUG [JndiStatelessSessionRegistrar] Registering with Remoting Dispatcher under name "MySLSBean/remote/ProxyFactory": org.jboss.ejb3.proxy.factory.session.stateless.StatelessSessionRemoteProxyFactory@16dc861
| 19:47:27,269 DEBUG [JndiSessionRegistrarBase] Registering org.jboss.ejb3.proxy.factory.session.stateless.StatelessSessionRemoteProxyFactory@16dc861 under key "MySLSBean/remote/ProxyFactory"...
| 19:47:27,284 DEBUG [ProxyFactoryBase] Started: org.jboss.ejb3.proxy.factory.session.stateless.StatelessSessionRemoteProxyFactory@16dc861
| 19:47:27,284 DEBUG [SessionProxyFactoryBase] Created Session Bean Business Interface-Specific Proxy Constructor implementing "org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote"
| 19:47:27,284 DEBUG [SessionProxyFactoryBase] Created Session Bean Default EJB3 Business Proxy Constructor implementing [interface org.jboss.ejb3.proxy.intf.EjbProxy, interface org.jboss.ejb3.proxy.intf.SessionProxy, interface org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote]
| 19:47:27,284 DEBUG [Ejb3McRegistrar] Installed in AbstractKernelController@bf053f{} at "MySLSBean/remote/ProxyFactory": org.jboss.ejb3.proxy.factory.session.stateless.StatelessSessionRemoteProxyFactory@16dc861
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Adding RefAddr to Default Remote Reference: Type "Remote Business Interface", Content "org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Adding RefAddr to Default Remote Reference: Type "Remoting Host URL", Content "socket://localhost:3874"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Default Remote Business View for EJB MySLSBean to be bound into JNDI at "MySLSBean/remote"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Adding RefAddr to Reference: Type "ProxyFactoryKey", Content "MySLSBean/remote/ProxyFactory"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Adding RefAddr to Reference: Type "EJB Container Name", Content "org.jboss.ejb3.EJBContainer.StatelessSession.MySLSBean/f75a7411-0375-4ab4-aba0-48ea9e818a81"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Bound javax.naming.Reference into JNDI at "MySLSBean/remote"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Remote Business View for org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote of EJB MySLSBean to be bound into JNDI at "MySLSBean/remote-org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Adding RefAddr to Reference: Type "ProxyFactoryKey", Content "MySLSBean/remote/ProxyFactory"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Adding RefAddr to Reference: Type "EJB Container Name", Content "org.jboss.ejb3.EJBContainer.StatelessSession.MySLSBean/f75a7411-0375-4ab4-aba0-48ea9e818a81"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Bound javax.naming.Reference into JNDI at "MySLSBean/remote-org.jboss.ejb3.test.proxy.jndiregistrar.MyStatelessRemote"
| 19:47:27,300 DEBUG [JndiSessionRegistrarBase] Registering org.jboss.ejb3.proxy.factory.session.stateless.StatelessSessionLocalProxyFactory@cf829d under key "MySLSBean/local/ProxyFactory"...
| 19:47:27,315 DEBUG [ProxyFactoryBase] Started: org.jboss.ejb3.proxy.factory.session.stateless.StatelessSessionLocalProxyFactory@cf829d
|
Is this intentional to neglect the @RemoteBinding and @LocalBinding?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4158365#4158365
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4158365
16 years, 3 months
[Deployers on JBoss (Deployers/JBoss)] - Re: EAR Dependency
by adrian@jboss.org
It's certainly possible, but that doesn't mean it is a priority.
Since you can already declare your dependencies at the more granular
(and arguably more correct) level, e.g. my war depends upon that ejb in a different
deployment, I wouldn't describe it as a high priority.
For me its just an "ease of use" feature such that in simple cases
means you only have to declare one piece of configuration.
In more complex cases, it wouldn't even work because the broad brush
configuration is likely to lead to circular dependency problems
(with dependencies going both ways between the ears).
And such a configuration (where you don't declare the true dependency)
is suspectible to breakage during refactoring, e.g. an ejb moves from one ear to
another.
The other reason it's not a high priority is because you can
already decide what order applications should be started in using
something like the prefix deployment sorter (modulo no other dependencies
causing indivdual components to wait).
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4158362#4158362
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4158362
16 years, 3 months
[Design of POJO Server] - Whitespace trimming in metadata
by adrian@jboss.org
Currently we have a failing test because whitespace is not getting
trimmed from a jndi-name. NOTE there is an extra space after SessionA
| 2008-06-16 14:38:33,596 DEBUG [org.jboss.test.naming.ejb.TestEjbLinkBean] (WorkerThread#0[127.0.0.1:54701]) failed
| javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: SessionA not bound]
| at org.jnp.interfaces.NamingContext.resolveLink(NamingContext.java:1254)
| at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:767)
| at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:776)
| at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:629)
| at javax.naming.InitialContext.lookup(InitialContext.java:351)
| at org.jboss.test.naming.ejb.TestEjbLinkBean.testEjbLinkCaller(TestEjbLinkBean.java:74)
|
This is coming from the following jboss.xml
| <?xml version="1.0" encoding="UTF-8"?>
| <!DOCTYPE jboss PUBLIC
| "-//JBoss//DTD JBOSS 4.0//EN"
| "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
|
| <jboss>
| <enterprise-beans>
| <session>
| <ejb-name>SessionB</ejb-name>
| <jndi-name>naming/SessionB</jndi-name>
|
| <ejb-ref>
| <ejb-ref-name>ejb/NoLinkSessionA</ejb-ref-name>
| <jndi-name>naming/SessionA </jndi-name>
| </ejb-ref>
|
| <ejb-local-ref>
| <ejb-ref-name>ejb/NoLinkLocalSessionA</ejb-ref-name>
| <local-jndi-name>naming/local/SessionA</local-jndi-name>
| </ejb-local-ref>
|
| </session>
| </enterprise-beans>
| </jboss>
|
In our jboss.xml schema, jndi-name inhertis eventually from the simple xml type
xsd:name
which has a facet defined that says to normalise space.
However, in the dtd (used above), jndi-name is just defined as #PCDATA
But correcting the schema/dtd types wouldn't be the complete fix if
xml validation is turned off since then it wouldn't look at the dtd/schema anyway.
What I'd suggest is that we introduce a convenience annotation
so you can specify whether whitespace should be preserved at the shema level,
e.g. something like
| @XmlRootElement(name="jboss", namespace=JavaEEMetaDataConstants.JBOSS_NS)
| @JBossXmlSchema(
| xmlns={@XmlNs(namespaceURI = JavaEEMetaDataConstants.JAVAEE_NS, prefix = "jee")},
| ignoreUnresolvedFieldOrClass=false,
| namespace=JavaEEMetaDataConstants.JBOSS_NS,
| elementFormDefault=XmlNsForm.QUALIFIED,
|
| // HERE
| normaliseSpace=true)
|
| @XmlType(name="jbossType", namespace=JavaEEMetaDataConstants.JBOSS_NS)
| public class JBoss50MetaData extends JBossMetaData
|
With the option on paricular elements/attributes to do
@XmlPreserveWhitespace
This would then more easily map to what we used to do in the old parsing
where it trimmed everything (from the old org.jboss.metadata.MetaData utility class)
| public static String getElementContent(Element element, String defaultStr, boolean replace)
| {
| if (element == null)
| return defaultStr;
|
| NodeList children = element.getChildNodes();
| String result = "";
| for (int i = 0; i < children.getLength(); i++)
| {
| if (children.item(i).getNodeType() == Node.TEXT_NODE ||
| children.item(i).getNodeType() == Node.CDATA_SECTION_NODE)
| {
| result += children.item(i).getNodeValue();
| }
| else if( children.item(i).getNodeType() == Node.COMMENT_NODE )
| {
| // Ignore comment nodes
| }
| else
| {
| result += children.item(i).getFirstChild();
| }
| }
|
| // HERE
|
| if (replace)
| return StringPropertyReplacer.replaceProperties(result.trim());
| else
| return result.trim();
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4158353#4158353
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4158353
16 years, 3 months