Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/URISupport.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/URISupport.java?rev=602803&r1=602802&r2=602803&view=diff ============================================================================== --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/URISupport.java (original) +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/URISupport.java Mon Dec 10 00:07:48 2007 @@ -27,11 +27,68 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.List; +import java.util.Arrays; /** * Swiped verbatim from ActiveMQ... the URI kings. + * + * URI relativize(URI, URI) added afterwards to deal with the + * non-functional URI.relativize(URI) method */ public class URISupport { + + /** + * URI absoluteA = new URI("/Users/dblevins/work/openejb3/container/openejb-jee/apple/"); + * URI absoluteB = new URI("/Users/dblevins/work/openejb3/container/openejb-core/foo.jar"); + * + * URI relativeB = URISupport.relativize(absoluteA, absoluteB); + * + * assertEquals("../../openejb-core/foo.jar", relativeB.toString()); + * + * URI resolvedB = absoluteA.resolve(relativeB); + * assertTrue(resolvedB.equals(absoluteB)); + * + * @param a + * @param b + * @return relative b + */ + public static URI relativize(URI a, URI b) { + if (a == null || b == null) return b; + + if (!a.isAbsolute() && b.isAbsolute()) return b; + + if (!b.isAbsolute()) b = a.resolve(b); + + List<String> pathA = Arrays.asList(a.getPath().split("/")); + List<String> pathB = Arrays.asList(b.getPath().split("/")); + + int limit = Math.min(pathA.size(), pathB.size()); + + + int lastMatch = 0; + while (lastMatch < limit) { + String aa = pathA.get(lastMatch); + String bb = pathB.get(lastMatch); + if (aa.equals(bb)) lastMatch++; + else break; + } + + List<String> path = new ArrayList<String>(); + for (int x = pathA.size() - lastMatch; x > 0; x--) { + path.add(".."); + } + + List<String> remaining = pathB.subList(lastMatch, pathB.size()); + path.addAll(remaining); + + try { + return new URI(null, null, Join.join("/", path), b.getQuery(), b.getFragment()); + } catch (URISyntaxException e) { + throw new IllegalArgumentException(e); + } + } + public static class CompositeData { String scheme; String path;
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=602803&r1=602802&r2=602803&view=diff ============================================================================== --- openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties (original) +++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties Mon Dec 10 00:07:48 2007 @@ -125,106 +125,106 @@ # fail("InterceptorBinding", "interceptorBinding.ejbNameRequiredWithMethod", binding.getMethod().getMethodName(), join(interceptorClasses, ",")); 1.interceptorBinding.ejbNameRequiredWithMethod = ejb-name required with method binding -2.interceptorBinding.ejbNameRequiredWithMethod = ejb-name required with binding on method '{0}'. -3.interceptorBinding.ejbNameRequiredWithMethod = Binding an interceptor to a specific method requires the ejb-name of the bean to also be specified. Fix binding on method '{0}' for interceptors {1}. +2.interceptorBinding.ejbNameRequiredWithMethod = ejb-name required with binding on method "{0}". +3.interceptorBinding.ejbNameRequiredWithMethod = Binding an interceptor to a specific method requires the ejb-name of the bean to also be specified. Fix binding on method "{0}" for interceptors {1}. # fail("MethodPermission", "methodPermission.ejbNameRequired", method.getMethodName(), join(permission.getRoleName(), ",")); 1.methodPermission.ejbNameRequired = ejb-name required for method-permission 2.methodPermission.ejbNameRequired = ejb-name required for method-permission: {0} -3.methodPermission.ejbNameRequired = Assinging a method-permission requires the ejb-name of the bean to also be specified. Fix method-permission on method '{0}' for security roles {1}. +3.methodPermission.ejbNameRequired = Assinging a method-permission requires the ejb-name of the bean to also be specified. Fix method-permission on method "{0}" for security roles {1}. # fail("MethodPermission", "methodPermission.noSuchEjbName", method.getEjbName(), method.getMethodName(), join(permission.getRoleName(), ",")); 1.methodPermission.noSuchEjbName = Referenced EJB does not exist -2.methodPermission.noSuchEjbName = Referenced EJB does not exist: {0} on method '{1}'. -3.methodPermission.noSuchEjbName = Method-permission refers to an EJB, {0}, that does not exist. Fix method-permission on method '{0}' for security roles {1}. +2.methodPermission.noSuchEjbName = Referenced EJB does not exist: {0} on method "{1}". +3.methodPermission.noSuchEjbName = Method-permission refers to an EJB, {0}, that does not exist. Fix method-permission on method "{0}" for security roles {1}. # fail("ContainerTransaction", "containerTransaction.ejbNameRequired", method.getMethodName(), transaction.getTransAttribute()); 1.containerTransaction.ejbNameRequired = ejb-name required for container-transaction 2.containerTransaction.ejbNameRequired = ejb-name required for container-transaction: {0} -3.containerTransaction.ejbNameRequired = Assinging a container-transaction requires the ejb-name of the bean to also be specified. Fix container-transaction on method '{0}' with transaction attribute {1}. +3.containerTransaction.ejbNameRequired = Assinging a container-transaction requires the ejb-name of the bean to also be specified. Fix container-transaction on method "{0}" with transaction attribute {1}. # fail("ContainerTransaction", "containerTransaction.noSuchEjbName", method.getMethodName(), method.getEjbName(), transaction.getTransAttribute()); 1.containerTransaction.noSuchEjbName = Referenced EJB does not exist -2.containerTransaction.noSuchEjbName = Referenced EJB does not exist: {0} on method '{1}'. -3.containerTransaction.noSuchEjbName = Container-transaction refers to an EJB, {0}, that does not exist. Fix container-transaction on method '{0}' with transaction attribute {1}. +2.containerTransaction.noSuchEjbName = Referenced EJB does not exist: {0} on method "{1}". +3.containerTransaction.noSuchEjbName = Container-transaction refers to an EJB, {0}, that does not exist. Fix container-transaction on method "{0}" with transaction attribute {1}. # CheckCallbacks.java # fail(componentName, "aroundInvoke.badReturnType", aroundInvoke.getMethodName(), returnType.getName(), aroundInvoke.getClassName()); 1.aroundInvoke.badReturnType = AroundInvoke method must return java.lang.Object -2.aroundInvoke.badReturnType = AroundInvoke method must return java.lang.Object: method '{0}' returns '{1}' -3.aroundInvoke.badReturnType = AroundInvoke method '{0}' in class {2} illegally returns {1} instead of java.lang.Object. Change the method signature to 'java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception' +2.aroundInvoke.badReturnType = AroundInvoke method must return java.lang.Object: method "{0}" returns "{1}" +3.aroundInvoke.badReturnType = AroundInvoke method "{0}" in class {2} illegally returns {1} instead of java.lang.Object. Change the method signature to "java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception" # fail(componentName, "aroundInvoke.mustThrowException", aroundInvoke.getMethodName(), aroundInvoke.getClassName()); 1.aroundInvoke.mustThrowException = AroundInvoke method must declare 'throws Exception' -2.aroundInvoke.mustThrowException = AroundInvoke method must declare 'throws Exception': method '{0}' -3.aroundInvoke.mustThrowException = AroundInvoke method '{0}' must declare java.lang.Exception in the throws clause. Change the method signature to 'java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception' +2.aroundInvoke.mustThrowException = AroundInvoke method must declare 'throws Exception': method "{0}" +3.aroundInvoke.mustThrowException = AroundInvoke method "{0}" must declare java.lang.Exception in the throws clause. Change the method signature to "java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception" # fail(componentName, "aroundInvoke.missing", aroundInvoke.getMethodName(), aroundInvoke.getClassName()); 1.aroundInvoke.missing = AroundInvoke method missing -2.aroundInvoke.missing = AroundInvoke method missing: '{0}' in class {1} -3.aroundInvoke.missing = AroundInvoke method '{0}' not found in class {1}. The required method signature is 'java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception' +2.aroundInvoke.missing = AroundInvoke method missing: "{0}" in class {1} +3.aroundInvoke.missing = AroundInvoke method "{0}" not found in class {1}. The required method signature is "java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception" # fail(componentName, "aroundInvoke.invalidArguments", aroundInvoke.getMethodName(), getParameters(possibleMethods.get(0)), aroundInvoke.getClassName()); 1.aroundInvoke.invalidArguments = Invalid AroundInvoke arguments 2.aroundInvoke.invalidArguments = Invalid AroundInvoke arguments: {0}({1}) -3.aroundInvoke.invalidArguments = AroundInvoke method signature '{0}({1})' in class {2} has invalid arguments. The required method signature is 'java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception' +3.aroundInvoke.invalidArguments = AroundInvoke method signature "{0}({1})" in class {2} has invalid arguments. The required method signature is "java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception" # fail(componentName, "aroundInvoke.missing.possibleTypo", aroundInvoke.getMethodName(), possibleMethods.size(), aroundInvoke.getClassName()); 1.aroundInvoke.missing.possibleTypo = AroundInvoke method missing or invalid -2.aroundInvoke.missing.possibleTypo = AroundInvoke method missing or invalid: looked for '{0}(javax.ejb.InvocationContext)' in class {2} -3.aroundInvoke.missing.possibleTypo = AroundInvoke method missing or invalid. There are {1} methods with the name '{0}' visible in class {2}, none have the required signature of 'java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception' +2.aroundInvoke.missing.possibleTypo = AroundInvoke method missing or invalid: looked for "{0}(javax.ejb.InvocationContext)" in class {2} +3.aroundInvoke.missing.possibleTypo = AroundInvoke method missing or invalid. There are {1} methods with the name "{0}" visible in class {2}, none have the required signature of "java.lang.Object {0}(javax.ejb.InvocationContext) throws java.lang.Exception" # fail(bean, "callback.badReturnType", type, callback.getMethodName(), returnType.getName(), callback.getClassName()); 1.callback.badReturnType = {0} method must return 'void' 2.callback.badReturnType = {0} method must return 'void': method {1} returns {2} -3.callback.badReturnType = {0} method '{1}' in class {3} illegally returns {2} instead of void. Change the method signature to 'void {1}()' +3.callback.badReturnType = {0} method "{1}" in class {3} illegally returns {2} instead of void. Change the method signature to "void {1}()" # fail(bean, "callback.missing", type, callback.getMethodName(), callback.getClassName()); 1.callback.missing = {0} method missing -2.callback.missing = {0} method missing: '{1}' in class {2} -3.callback.missing = {0} method '{1}' not found in class {2}. The required method signature is 'void {1}()' +2.callback.missing = {0} method missing: "{1}" in class {2} +3.callback.missing = {0} method "{1}" not found in class {2}. The required method signature is "void {1}()" # fail(bean, "callback.invalidArguments", type, callback.getMethodName(), getParameters(possibleMethods.get(0)), callback.getClassName()); 1.callback.invalidArguments = Invalid {0} arguments 2.callback.invalidArguments = Invalid {0} arguments: {1}({2}) -3.callback.invalidArguments = {0} method signature '{1}({2})' in class {3} has invalid arguments. The required method signature is 'void {1}()' +3.callback.invalidArguments = {0} method signature "{1}({2})" in class {3} has invalid arguments. The required method signature is "void {1}()" # fail(bean, "callback.missing.possibleTypo", type, callback.getMethodName(), possibleMethods.size(), callback.getClassName()); 1.callback.missing.possibleTypo = {0} method missing or invalid -2.callback.missing.possibleTypo = {0} method missing or invalid: looked for 'void {1}()' in class {3} -3.callback.missing.possibleTypo = {0} method missing or invalid. There are {2} methods with the name '{1}' visible in class {3}, none have the required signature of 'void {0}()' +2.callback.missing.possibleTypo = {0} method missing or invalid: looked for "void {1}()" in class {3} +3.callback.missing.possibleTypo = {0} method missing or invalid. There are {2} methods with the name "{1}" visible in class {3}, none have the required signature of "void {0}()" # fail("Interceptor", "interceptor.callback.badReturnType", type, callback.getMethodName(), returnType.getName(), interceptorClass.getName()); -1.interceptor.callback.badReturnType = {0} method must return 'void' -2.interceptor.callback.badReturnType = {0} method must return 'void': method {1} returns {2} in class {} -3.interceptor.callback.badReturnType = {0} method '{1}' in class {3} illegally returns {2} instead of void. Change the method signature to 'void {1}(javax.ejb.InvocationContext)' +1.interceptor.callback.badReturnType = {0} method must return "void" +2.interceptor.callback.badReturnType = {0} method must return "void": method {1} returns {2} in class {} +3.interceptor.callback.badReturnType = {0} method "{1}" in class {3} illegally returns {2} instead of void. Change the method signature to "void {1}(javax.ejb.InvocationContext)" # fail("Interceptor", "interceptor.callback.missing", type, callback.getMethodName(), interceptorClass.getName()); 1.interceptor.callback.missing = {0} method missing -2.interceptor.callback.missing = {0} method missing: '{1}' in class {2} -3.interceptor.callback.missing = {0} method '{1}' not found in class {2}. The required method signature is 'void {1}(javax.ejb.InvocationContext)' +2.interceptor.callback.missing = {0} method missing: "{1}" in class {2} +3.interceptor.callback.missing = {0} method "{1}" not found in class {2}. The required method signature is "void {1}(javax.ejb.InvocationContext)" # fail("Interceptor", "interceptor.callback.invalidArguments", type, callback.getMethodName(), getParameters(possibleMethods.get(0)), interceptorClass.getName()); 1.interceptor.callback.invalidArguments = Invalid {0} arguments 2.interceptor.callback.invalidArguments = Invalid {0} arguments: {1}({2}) in class {3} -3.interceptor.callback.invalidArguments = {0} method signature '{1}({2})' in class {3} has invalid arguments. The required method signature is 'void {1}(javax.ejb.InvocationContext)' +3.interceptor.callback.invalidArguments = {0} method signature "{1}({2})" in class {3} has invalid arguments. The required method signature is "void {1}(javax.ejb.InvocationContext)" # fail("Interceptor", "interceptor.callback.missing.possibleTypo", type, callback.getMethodName(), possibleMethods.size(), interceptorClass.getName()); 1.interceptor.callback.missing.possibleTypo = {0} method missing or invalid -2.interceptor.callback.missing.possibleTypo = {0} method missing or invalid: looked for 'void {1}(javax.ejb.InvocationContext)' in class {3} -3.interceptor.callback.missing.possibleTypo = {0} method missing or invalid. There are {2} methods with the name '{1}' visible in class {3}, none have the required signature of 'void {0}()' +2.interceptor.callback.missing.possibleTypo = {0} method missing or invalid: looked for "void {1}(javax.ejb.InvocationContext)" in class {3} +3.interceptor.callback.missing.possibleTypo = {0} method missing or invalid. There are {2} methods with the name "{1}" visible in class {3}, none have the required signature of "void {0}()" # CheckInjectionTargets.java # warn(bean, "injectionTarget.nameContainsSet", target.getInjectionTargetName(), shortNameInvalid, shortNameCorrect, correctName, reference.getName(), reference.getClass().getSimpleName()); 1.injectionTarget.nameContainsSet = Corrected invalid injection-target-name 2.injectionTarget.nameContainsSet = Corrected invalid injection-target-name: {0} -3.injectionTarget.nameContainsSet = The injection-target-name '{0}' for setter methods should not begin with 'set'. The last portion of the name '{1}' has been automatically corrected to '{2}'. Update the descriptor with the correct injection-target-name of '{3}' to avoid receiving this warning. Resource to be injected is '{4}'. +3.injectionTarget.nameContainsSet = The injection-target-name "{0}" for setter methods should not begin with "set". The last portion of the name "{1}" has been automatically corrected to "{2}". Update the descriptor with the correct injection-target-name of "{3}" to avoid receiving this warning. Resource to be injected is "{4}". # CheckServiceRefs.java # warn(bean, "serviceRef.unsupported", ref.getName()); 1.serviceRef.unsupported = Web service refs are not yet supported 2.serviceRef.unsupported = Web service refs are not yet supported: service-ref {0} -3.serviceRef.unsupported = The web service ref '{0}' will be ignored as this feature is not yet implemented. The entry 'java:comp/env/{0}' will not be available in JNDI and any associated injects will not be performed. +3.serviceRef.unsupported = The web service ref "{0}" will be ignored as this feature is not yet implemented. The entry "java:comp/env/{0}" will not be available in JNDI and any associated injects will not be performed. # AnnotationDeployer.java # fail(ejbName, "ann.remote.noAttributes", join(", ", interfaces)); @@ -239,8 +239,8 @@ # fail(ejbName, "ann.remoteLocal.conflict", join(", ", interfaces)); 1.ann.remoteLocal.conflict = @Remote annotation in bean class conflicts with @Local in interface. -2.ann.remoteLocal.conflict = @Remote annotation in bean class conflicts with @Local in interface '{0}'. -3.ann.remoteLocal.conflict = When annotating a bean class as @Remote, the corresponding business interfaces cannot be annotated with @Local. Revise the business interface '{0}'. +2.ann.remoteLocal.conflict = @Remote annotation in bean class conflicts with @Local in interface "{0}". +3.ann.remoteLocal.conflict = When annotating a bean class as @Remote, the corresponding business interfaces cannot be annotated with @Local. Revise the business interface "{0}". # fail(ejbName, "ann.local.noAttributes", join(", ", interfaces)); 1.ann.local.noAttributes = Ambiguous @Local() usage on bean class @@ -254,8 +254,8 @@ # fail(ejbName, "ann.localRemote.conflict", join(", ", interfaces)); 1.ann.localRemote.conflict = @Local annotation in bean class conflicts with @Remote in interface. -2.ann.localRemote.conflict = @Local annotation in bean class conflicts with @Remote in interface '{0}'. -3.ann.localRemote.conflict = When annotating a bean class as @Local, the corresponding business interfaces cannot be annotated with @Remote. Revise the business interface '{0}'. +2.ann.localRemote.conflict = @Local annotation in bean class conflicts with @Remote in interface "{0}". +3.ann.localRemote.conflict = When annotating a bean class as @Local, the corresponding business interfaces cannot be annotated with @Remote. Revise the business interface "{0}". # fail(ejbName, "ann.remoteOrLocal.ejbHome", annotationName, interfce.getName()); 1.ann.remoteOrLocal.ejbHome = @{0} used in bean class lists a javax.ejb.EJBHome interface. @@ -269,15 +269,165 @@ # fail(ejbName, "ann.remoteOrLocal.ejbObject", annotationName, interfce.getName()); 1.ann.remoteOrLocal.ejbObject = @{0} used in bean class lists a javax.ejb.EJBObject interface. -2.ann.remoteOrLocal.ejbObject = @{0} used in bean class lists a javax.ejb.EJBObject interface. Use @RemoteHome with home interface of '{1}'. -3.ann.remoteOrLocal.ejbObject = When applied to a bean class, the @{0} annotation must only list business interfaces and cannot list legacy EJBObject interfaces. The EJBHome of interface for '{1}' can be annotated on the bean class with @RemoteHome +2.ann.remoteOrLocal.ejbObject = @{0} used in bean class lists a javax.ejb.EJBObject interface. Use @RemoteHome with home interface of "{1}". +3.ann.remoteOrLocal.ejbObject = When applied to a bean class, the @{0} annotation must only list business interfaces and cannot list legacy EJBObject interfaces. The EJBHome of interface for "{1}" can be annotated on the bean class with @RemoteHome # fail(ejbName, "ann.remoteOrLocal.ejbLocalObject", annotationName, interfce.getName()); 1.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists a javax.ejb.EJBLocalObject interface. -2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists a javax.ejb.EJBLocalObject interface. Use @LocalHome with home interface of '{1}'. -3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class, the @{0} annotation must only list business interfaces and cannot list legacy EJBLocalObject interfaces. The EJBLocalHome of interface for '{1}' can be annotated on the bean class with @LocalHome +2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists a javax.ejb.EJBLocalObject interface. Use @LocalHome with home interface of "{1}". +3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class, the @{0} annotation must only list business interfaces and cannot list legacy EJBLocalObject interfaces. The EJBLocalHome of interface for "{1}" can be annotated on the bean class with @LocalHome # fail(bean, "persistenceContextExtented.nonStateful", refName, beanType); 1.persistenceContextExtented.nonStateful = Non-Stateful use of PersistenceContextType.EXTENDED 2.persistenceContextExtented.nonStateful = Non-Stateful use of PersistenceContextType.EXTENDED in ref {0} -3.persistenceContextExtented.nonStateful = {1} ejbs are not capable of using EntityManagers with EXTENTED persistence. Convert your bean to a Stateful ejb or update the '{0}' PersistenceContext reference to PersistenceContextType.TRANSACTION. \ No newline at end of file +3.persistenceContextExtented.nonStateful = {1} ejbs are not capable of using EntityManagers with EXTENTED persistence. Convert your bean to a Stateful ejb or update the "{0}" PersistenceContext reference to PersistenceContextType.TRANSACTION. + +# fail(consumer.getJndiConsumerName(), "resourceRef.onEntityManager", refName); +1.resourceRef.onEntityManager = Mistaken use of @Resource on an EntityManager reference. Use @PersistenceContext. +2.resourceRef.onEntityManager = Mistaken use of @Resource on an EntityManager reference. Use @PersistenceContext for ref "{0}" +3.resourceRef.onEntityManager = The @Resource annotation cannot be used on references to javax.persistence.EntityManager. Change the annotation to @PersistenceContext for ref "{0}" + +# fail(consumer.getJndiConsumerName(), "resourceRef.onEntityManagerFactory", refName); +1.resourceRef.onEntityManagerFactory = Mistaken use of @Resource on an EntityManagerFactory reference. Use @PersistenceUnit. +2.resourceRef.onEntityManagerFactory = Mistaken use of @Resource on an EntityManagerFactory reference. Use @PersistenceUnit for ref "{0}" +3.resourceRef.onEntityManagerFactory = The @Resource annotation cannot be used on references to javax.persistence.EntityManagerFactory. Change the annotation to @PersistenceUnit for ref "{0}" + +# fail(consumer.getJndiConsumerName(), "ejbAnnotation.onClassWithNoBeanInterface"); +1.ejbAnnotation.onClassWithNoBeanInterface = Missing required "beanInterface" attribute on class-level @EJB usage +2.ejbAnnotation.onClassWithNoBeanInterface = Missing required "beanInterface" attribute on class-level @EJB usage +3.ejbAnnotation.onClassWithNoBeanInterface = The "beanInterface" attribute was not specified for the class level annotation @EJB. It is mandatory for all class level @EJB annotations. + +# fail(consumer.getJndiConsumerName(), "ejbAnnotation.onClassWithNoName"); +1.ejbAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @EJB usage +2.ejbAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @EJB usage +3.ejbAnnotation.onClassWithNoName = The "name" attribute was not specified for the class level annotation @EJB. It is mandatory for all class level @EJB annotations. + +# fail(consumer.getJndiConsumerName(), "presistenceContextAnnotation.onEntityManagerFactory", persistenceContextRef.getName()); +1.presistenceContextAnnotation.onEntityManagerFactory = Mistaken use of @PersistenceContext on an EntityManagerFactory reference. Use @PersistenceUnit. +2.presistenceContextAnnotation.onEntityManagerFactory = Mistaken use of @PersistenceContext on an EntityManagerFactory reference. Use @PersistenceUnit for ref "{0}" +3.presistenceContextAnnotation.onEntityManagerFactory = The @PersistenceContext annotation only applies to javax.persistence.EntityManager and cannot be used on references to javax.persistence.EntityManagerFactory. Change the annotation to @PersistenceUnit for ref "{0}" + +# fail(consumer.getJndiConsumerName(), "presistenceContextAnnotation.onNonEntityManager", persistenceContextRef.getName()); +1.presistenceContextAnnotation.onNonEntityManager = Use of @PersistenceContext only applies to EntityManager references +2.presistenceContextAnnotation.onNonEntityManager = Use of @PersistenceContext only applies to EntityManager references. Fix ref "{0}" +3.presistenceContextAnnotation.onNonEntityManager = The @PersistenceContext annotation only applies to javax.persistence.EntityManager and cannot be used on references of other types. Change the annotation for ref "{0}" + +# fail(consumer.getJndiConsumerName(), "presistenceUnitAnnotation.onEntityManager", persistenceUnitRef.getName()); +1.presistenceUnitAnnotation.onEntityManager = Mistaken use of @PersistenceUnit on an EntityManager reference. Use @PersistenceContext +2.presistenceUnitAnnotation.onEntityManager = Mistaken use of @PersistenceUnit on an EntityManager reference. Use @PersistenceContext for ref "{0}" +3.presistenceUnitAnnotation.onEntityManager = The @PersistenceUnit annotation only applies to javax.persistence.EntityManagerFactory and cannot be used on references to javax.persistence.EntityManager. Change the annotation to @PersistenceContext for ref "{0}" + +# fail(consumer.getJndiConsumerName(), "presistenceUnitAnnotation.onNonEntityManagerFactory", persistenceUnitRef.getName()); +1.presistenceUnitAnnotation.onNonEntityManagerFactory = Use of @PersistenceUnit only applies to EntityManager references +2.presistenceUnitAnnotation.onNonEntityManagerFactory = Use of @PersistenceUnit only applies to EntityManager references. Fix ref "{0}" +3.presistenceUnitAnnotation.onNonEntityManagerFactory = The @PersistenceUnit annotation only applies to javax.persistence.EntityManagerFactory and cannot be used on references of other types. Change the annotation for ref "{0}" + +# fail(consumer.getJndiConsumerName(), "resourceAnnotation.onClassWithNoName"); +1.resourceAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @Resource usage +2.resourceAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @Resource usage +3.resourceAnnotation.onClassWithNoName = The "name" attribute was not specified for the class level annotation @Resource. It is mandatory for all class level @Resource annotations. + +# fail(consumer.getJndiConsumerName(), "resourceAnnotation.onClassWithNoType"); +1.resourceAnnotation.onClassWithNoType = Missing required "type" attribute on class-level @Resource usage +2.resourceAnnotation.onClassWithNoType = Missing required "type" attribute on class-level @Resource usage +3.resourceAnnotation.onClassWithNoType = The "type" attribute was not specified for the class level annotation @Resource. It is mandatory for all class level @Resource annotations. + +# fail(consumer.getJndiConsumerName(), "presistenceContextAnnotation.onClassWithNoName", persistenceContext.unitName()); +1.presistenceContextAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @PersistenceContext usage +2.presistenceContextAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @PersistenceContext usage. +3.presistenceContextAnnotation.onClassWithNoName = The "name" attribute was not specified for the class level annotation @PersistenceContext with unitName="{0}". It is mandatory for all class level @PersistenceContext annotations. + +# fail(consumer.getJndiConsumerName(), "presistenceUnitAnnotation.onClassWithNoName", persistenceUnit.unitName()); +1.presistenceUnitAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @PersistenceUnit usage +2.presistenceUnitAnnotation.onClassWithNoName = Missing required "name" attribute on class-level @PersistenceUnit usage. +3.presistenceUnitAnnotation.onClassWithNoName = The "name" attribute was not specified for the class level annotation @PersistenceUnit with unitName="{0}". It is mandatory for all class level @PersistenceUnit annotations. + + +# AutoConfig.java +# fail(componentName, "persistenceContextRef.noPersistenceUnits", refShortName, unitName); +1.persistenceContextRef.noPersistenceUnits = Missing required persistence.xml for @PersistenceContext ref +2.persistenceContextRef.noPersistenceUnits = Missing required persistence.xml for @PersistenceContext ref "{0}" to unit "{1}" +3.persistenceContextRef.noPersistenceUnits = A persistence unit must be defined via META-INF/persistence.xml to satisfy @PersistenceContext ref "{0}" to unit "{1}". An example of a suitable persistence.xml might be:\ + <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">\ + <persistence-unit name="{1}">\ + <jta-data-source>java:openejb/Resource/myDataSource</jta-data-source>\ + <non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source>\ +\ + <properties>\ + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>\ + </properties>\ + </persistence-unit>\ + </persistence>\ + + +# fail(componentName, "persistenceContextRef.noUnitName", refShortName, join(", ", availableUnits), sampleUnitName ); +1.persistenceContextRef.noUnitName = @PersistenceContext unitName required, multiple units available. +2.persistenceContextRef.noUnitName = @PersistenceContext unitName required, multiple units available: ref "{0}", available units [{1}] +3.persistenceContextRef.noUnitName = Use of @PersistenceContext witout a unitName is only allowed when there is only a single persistence.xml in the entire application defining exactly one persistence-unit. Available units for ref {0} are [{1}]. Add the unitName to your declaration, for example:\ + @PersistenceContext(name="{0}", unitName = "{2}") + +# fail(componentName, "persistenceContextRef.vagueMatches", refShortName, unitName, possibleUnits.size(), join(", ", possibleUnits)); +1.persistenceContextRef.vagueMatches = @PersistenceContext unitName has multiple matches. +2.persistenceContextRef.vagueMatches = @PersistenceContext unitName has multiple matches: unitName "{1}" has {2} possible matches. +3.persistenceContextRef.vagueMatches = The reference @PersistenceContext(name="{0}", unitName="{1}") cannot be resolved as there are {2} units with the same name. Update your unitName to one of the following:\ +{3} + +# fail(componentName, "persistenceContextRef.noMatches", refShortName, unitName, join(", ", availableUnits)); +1.persistenceContextRef.noMatches = Persistence unit not found +2.persistenceContextRef.noMatches = Persistence unit not found: @PersistenceContext(name="{0}", unitName="{1}"). Available units [{1}] +3.persistenceContextRef.noMatches = The persistence unit "{1}" does not exist. Update the "{0}" PersistenceContext ref to one of the available units [{1}] or declare the unit in a persistence.xml like the following:\ + <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">\ + <persistence-unit name="{1}">\ + <jta-data-source>java:openejb/Resource/myDataSource</jta-data-source>\ + <non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source>\ +\ + <properties>\ + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>\ + </properties>\ + </persistence-unit>\ + </persistence>\ + + +# fail(componentName, "persistenceUnitRef.noPersistenceUnits", refShortName, unitName); +1.persistenceUnitRef.noPersistenceUnits = Missing required persistence.xml for @PersistenceUnit ref +2.persistenceUnitRef.noPersistenceUnits = Missing required persistence.xml for @PersistenceUnit ref "{0}" to unit "{1}" +3.persistenceUnitRef.noPersistenceUnits = A persistence unit must be defined via META-INF/persistence.xml to satisfy @PersistenceUnit ref "{0}" to unit "{1}". An example of a suitable persistence.xml might be:\ + <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">\ + <persistence-unit name="{1}">\ + <jta-data-source>java:openejb/Resource/myDataSource</jta-data-source>\ + <non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source>\ +\ + <properties>\ + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>\ + </properties>\ + </persistence-unit>\ + </persistence>\ + + +# fail(componentName, "persistenceUnitRef.noUnitName", refShortName, join(", ", availableUnits), sampleUnitName ); +1.persistenceUnitRef.noUnitName = @PersistenceUnit unitName required, multiple units available. +2.persistenceUnitRef.noUnitName = @PersistenceUnit unitName required, multiple units available: ref "{0}", available units [{1}] +3.persistenceUnitRef.noUnitName = Use of @PersistenceUnit witout a unitName is only allowed when there is only a single persistence.xml in the entire application defining exactly one persistence-unit. Available units for ref {0} are [{1}]. Add the unitName to your declaration, for example:\ + @PersistenceUnit(name="{0}", unitName = "{2}") + +# fail(componentName, "persistenceUnitRef.vagueMatches", refShortName, unitName, possibleUnits.size(), join(", ", possibleUnits)); +1.persistenceUnitRef.vagueMatches = @PersistenceUnit unitName has multiple matches. +2.persistenceUnitRef.vagueMatches = @PersistenceUnit unitName has multiple matches: unitName "{1}" has {2} possible matches. +3.persistenceUnitRef.vagueMatches = The reference @PersistenceUnit(name="{0}", unitName="{1}") cannot be resolved as there are {2} units with the same name. Update your unitName to one of the following:\ +{3} + +# fail(componentName, "persistenceUnitRef.noMatches", refShortName, unitName, join(", ", availableUnits)); +1.persistenceUnitRef.noMatches = Persistence unit not found +2.persistenceUnitRef.noMatches = Persistence unit not found: @PersistenceUnit(name="{0}", unitName="{1}"). Available units [{1}] +3.persistenceUnitRef.noMatches = The persistence unit "{1}" does not exist. Update the "{0}" PersistenceUnit ref to one of the available units [{1}] or declare the unit in a persistence.xml like the following:\ + <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">\ + <persistence-unit name="{1}">\ + <jta-data-source>java:openejb/Resource/myDataSource</jta-data-source>\ + <non-jta-data-source>java:openejb/Resource/myUnmanagedDataSource</non-jta-data-source>\ +\ + <properties>\ + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>\ + </properties>\ + </persistence-unit>\ + </persistence>\ + Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/URISupportTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/URISupportTest.java?rev=602803&view=auto ============================================================================== --- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/URISupportTest.java (added) +++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/URISupportTest.java Mon Dec 10 00:07:48 2007 @@ -0,0 +1,51 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.openejb.util; + +import junit.framework.TestCase; + +import java.net.URI; + +/** + * @version $Rev$ $Date$ + */ +public class URISupportTest extends TestCase { + public void test() throws Exception { + URI absoluteA = new URI("/Users/dblevins/work/openejb3/container/openejb-jee/apple/"); + URI absoluteB = new URI("/Users/dblevins/work/openejb3/container/openejb-core/foo.jar"); + + URI relativeB = URISupport.relativize(absoluteA, absoluteB); + + assertEquals("../../openejb-core/foo.jar", relativeB.toString()); + + URI resolvedB = absoluteA.resolve(relativeB); + assertTrue(resolvedB.equals(absoluteB)); + } + + public void testFragment() throws Exception { + URI absoluteA = new URI("/Users/dblevins/work/openejb3/container/openejb-jee/apple/"); + URI absoluteB = new URI("/Users/dblevins/work/openejb3/container/openejb-core/foo.jar#foo"); + + URI relativeB = URISupport.relativize(absoluteA, absoluteB); + + assertEquals("../../openejb-core/foo.jar#foo", relativeB.toString()); + + URI resolvedB = absoluteA.resolve(relativeB); + assertTrue(resolvedB.equals(absoluteB)); + } + +}
